第1章安裝linux系統後調優及安全設置
1.1 關閉SELinux功能[root@moban /]# sed -i 's/SELLINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config==》修改配置文件可使用高配置永久生效,但必須要重啟系統,此步時sed快速修改方法,也可以通過vi編輯修改此文件。[root@moban /]# grep SELINUX=disabled /etc/selinux/configSELINUX=disabled 《===檢查替換結果為disabled就表示編輯成功了。回到root ==》vi /etc/selinux/config1.1.1 selinux是什麼?安全工具,控制太嚴格了,生產環節不用它,使用跟其他的安全手段。永久關閉(需要重啟系統):vi /etc/selinux/configSELINUX=enforcing改為SELINUX=disabled臨時關閉selenlore 0 命令行關閉SELINUXgetenfore 查看命令行是否關閉SELINUX永久關閉(重啟系統):vi /etc/selinux/configSELINUX=enforcing改為SELINUX=disabledsed i 's#>SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/config臨時關閉:setenfore 0 命令行關閉SELINUXgetenfore 查看命令行是否關閉SELINUX
1.1.2 命令說明:setenfore:用於命令行管理SELinux的級別,後面的數字表示設置對應的級別。getenforce:查看SELinux當前的級別狀態。 提示:修改配置SELINUX後,要想時期生效,必須要重啟系統。因此,可配合使用sctenforce 0這個臨時相當於使其關閉的命令,這樣在重啟前後都可以使得SELinux關閉生效了。也就是說無需立刻重啟服務器了,在生產場景下Linux機器是不能隨意重啟的。 1.2 運行級別:linux運行時的一種狀態表示,這個標識用於數字表示7中運行級別。0 halt,關機狀態1 single user 單用戶,找回root密碼2 multiuser without nfs.多用戶沒有NFS網絡文件系統3 文本模式(Full multiuser mode ) ***** 工作模式4 unused5 圖形、桌面、X116 reboot 重啟
1.2.1 如何查看當前系統的運行級別runlevel[root@moban /]# runlevelN(前一次) 3(當前)
1.2.2 更改運行級別init例如:init 6 就表示重啟
1.3 精簡開機系統啟動1.3.1 重要的開機自啟動服務 sshd 遠程連接Linux服務器是需要用到這個服務程序,所以必須要開啟, 否則將無法遠程連接Linux服務器。 rsyslog 是操作系統提供的一種機制,系統的守護程序通常會使用rsyslog 將各種信息寫到各個日同日志文件中,Centos6以前此服務的名字 為syslog network 系統啟動時,若想激活/關閉各個網絡接口,則應(必須)考慮開啟。 crond 該服務用於周期性地執行系統用戶配置的任務計劃。有要周期性 執行的任務時,就要開啟,此服務幾乎是生產場景必須要用的一 個軟件。 sysstat sysstat是一個軟件包,保護檢測系統性能及效率的一組工具, 這些工具對於我們手機系統性能數據很有幫助,比如CPU使用率、 硬盤和網絡吞吐數據等,這些數據的手機和分析,有利於判斷系 統運行是否正常,所以它是提高系統運行效率、安全運行服務器 的得力助手。 Sysstat軟件包集成的主要工具為:iostat工具提供CPU使用率及硬盤吞吐效率的數據;mpstat工具提供與單個或多個處理器相關的數據;sar工具負責收集、報告並存儲系統活躍的信息。
提示:上述5個服務是安裝完系統後建議保留的開機啟動服務,也幾乎是一切服務器必須開機保留的自啟動服務。將來還可以根據服務器的業務使用個場景調整相應的自啟動服務,所謂調整,就是增加其他自啟動服務。
1.3.2 設置開啟自啟動服務的常見方法1)執行命令,然後手動選擇處理的方法方法1:執行ntsysv命令然後在彈出的窗口中進行設置。方法2:執行setup->system service,然後在彈出的窗口中進行設置提示:初學者可以選擇上述兩種方法中的一種來完成配置。
為什麼要設置開機自啟動?好處:1、節省開機時間,加快啟動速度。2、節省資源開銷3、減少安全隱患
如何做?第一種setup第二種ntsysv第三種chkconfig
sed 後向引用sed -r 's#(.*)(.*)#\1 \2#g'
1.4 關閉iptables防火牆關閉防火牆的目的是為了讓初學者更方便,將來在學了iptables技術後可再統一開啟。在企業環境中,一般只有外網IP的服務器才需要開啟防火牆,但即使是外網IP,對於高並發流量的業務服務器仍是不能開的,因為會有較大性能損失,導致網站訪問很慢,這種情況下只能在前段加更好的硬件防火牆了。關閉防火牆的具體操作過程如下:[root@moban /]# /etc/init.d/iptables stop[root@moban /]# /etc/init.d/iptables stop==service iptables stop
1.5 Linux系統安全最小原則說明最小化原則對linux系統安全來說極其重要:即多一事不如少一事。具體包括如下幾個方面:1)安裝linux系統最小化,即選包最小化,yum安裝軟件包也要最小化,無用的包不裝。2)開機自啟動服務最小化,即無用的服務不開啟3)操作命令最小化。例如:能用“rm -f tets.txt”就不用“rm -fr test.txt”.4)登陸Linux用戶最小化。平時沒有特殊需求不登錄root,用普通用戶登錄即可。5)普通用戶授權權限最小化,即只給用戶必須的管理系統的命令,不能啥都可以干。
1.6 更改SSH服務端遠程登陸的配置windows服務器的默認遠程管理端口是3389,管理員用戶是administrator,普通用戶是guest。linux的管理用戶是root,普通用戶默認有很多個,遠程連接默認端口port 22這些通常搞IT人都知道。那麼黑客是否也知道呢?他們當然知道,甚至比我們更清楚,所以,為了系統安全要隱藏或更改上述默認的配置才行。[root@moban /]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori更改配置前進行備份,是系統管理員的一個良好的習慣。[root@moban /]# vi /etc/ssh/sshd_config #-》編輯sshd_config###by moban#2016-03-10##Prot 52113PermitrootLogin noPermitEmptypasswords noUseDNS noGSSAPIAuthentication no### moban#2016-03-10##執行如下命令重啟sshd,是的修改的配置生效:[root@moban /]# /etc/init.d/sshd reload重新載入sshd [確定]或者/etc/init.d/sshd restart提示:reload為平滑重啟,不影響正在SSH連接的其他用戶,因此要好於restart。
1.7 利用sudo控制用戶對系統命令的使用權限 為了安全及管理的方便,可將需要root權限的普通用戶加入sudo管理,這樣用戶就可以通過自己的普通賬戶登錄實現利用root的權限來管理系統了,當然也就不需要有root賬號及密碼了。 執行如下visudo命令,即可打開sudo的配置文件進行編輯。[root@moban ~]# visudo #相當於直接編輯/etc/sudoers,單用命令方式更安全,推薦 在/etc/sudoers文件的大約第98行下面添加需要提升為root權限的普通用戶名及對應權限。1.7.1 優化注意的幾個方面:安裝linux系統最小化,即選包最小化,yum安裝軟件包也要最小化,無用的包不裝。開機自啟動服務最小化,即無用的服務不開啟。操作命令最小化。例如:能用“rm -f test.txt”就不用“rm -fr test.txt”登錄linux用戶最小化。平時沒有特殊需求不登錄root,用普通用戶登錄即可。普通用戶授權權限最小化,即只給用戶必須的管理系統的命令,不能啥都可以干。linux系統文件及目錄的權限設置最小化,禁止隨意創建、更改、刪除文件
普通用戶與皇帝root普通用戶當皇帝的辦法有兩種:第一種是 su - root ,執行su - 或su - root相當於農民起義,推翻皇帝,改朝換代了。需要輸入root密碼才能登陸。第二種是sudo ,sudo touch /etc/test.txt讓普通人做只有皇帝能做的事情,需要皇帝事先授權(sudoers文件)sudo su - root 功高蓋主了,也可以改朝換代,最大化授權sudo後果。
sudo設全對於bash的內置命令處理,十個難題,因為內置命令沒有實體文件和路徑,不過一般都有解決方法例如希望sudo cd 用sudo ls 替代,有的網友使用sudo bash後再使用內置命令,這是很危險的,不推薦。
1.8 linux中文顯示設置 此項優化為可選項,即調整linux系統的字符集設置,那麼。什麼是字符集呢?簡單的說,字符集就是一套文字符號及其編碼。目前linux下常用的字符集有:GBK:定長,雙字節,不是國際標准,支持的系統不少,實際企業用的不多UTF-8:費定長,1~4字節,廣泛支持,MYSQL也是用UTF-8,企業廣泛使用。可通過快捷的命令方式在/etc/sysconfig/i18n中添加如下內容,使其支持中文顯示:[root@moban ~]# cat /etc/sysconfig/i18nLANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"source /etc/sysconfig/i18n啟動設置查看字符集設置的結果。[root@moban ~]# cat /etc/sysconfig/i18nLANG="zh_CN.UTF-8"SYSFONT="latarcyrheb-sun16"登錄linux系統查看中文字符正常顯示的步驟如下:1)將服務器端字符集(/etc/sysconfig/i18n)改為LANG="zh_CN.UTF-8"。2)將客戶端字符集(CRT)調整為UTF-8.3)命令執行setup命令看到原來中文亂碼的窗口不亂了,正確顯示中文字符了。
提示:注意"zh_CN.UTF-8"的大小寫字母。這個中文顯示配置要跟你自己的SSH客戶端的配置一致。默認情況下就是老男孩演示的配置。調整SSH客戶端CAT的字符集,使其和linux服務端一致(UTF-8)。
1.9 設置linux服務器時間同步手動同步系統時間[root@moban ~]# /usr/sbin/ntpdate time.nist.gov31 Mar 22:35:56 ntpdate[10098]: step time server 24.56.178.140 offset 82739.057723 sec利用定時任務crond把上述的手動命令沒5分鐘自動執行一次:[root@moban ~]# crontab -l*/5 * * * * /usr/sbin/ntpdate time.nist.gov >dev/null 2>&1
1.10 linux系統變量優化1.10.1 設置閒置賬號超時時間設置閒置賬號超時時間示例命令如下,注意此處的配置僅臨時生效。[root@moban ~]# export TMOUT=10[root@moban ~]# timed out waiting for input: auto-logout #10秒提示超時1.10.2 設置linux的命令行歷史記錄數設置linux的命令行歷史記錄數命令如下,注意此處的配置僅臨時生效。[root@moban ~]# export HISTSIZE=5[root@moban ~]# history 914 date 915 /usr/sbin/ntpdate time.nist.gov 916 crontab -l 917 export HISTSIZE=5 918 history1.10.3 設定用戶的命令行歷史記錄文件設定用戶的命令行歷史記錄文件(~/.bash_history)記錄指定命令如下,注意此處的配置僅臨時生效。[root@moban ~]# export HISTFILESIZE=5[root@moban ~]# cat ~/.bash_history/usr/sbin/ntpdate time.nist.govcrontab -lexport HISTSIZE=5historyexport TMOUT=10[root@moban ~]#把上述命令放入配置文件,使其可以永久生效。配置文件:/etc/profilesource /etc/profile #使得配置文件生效在上述命令中,涉及的系統控制變量說明如下:export TMOUT=10 :連接的超時時間控制變量export HISTSIZE=5 :命令行的歷史記錄數量變量export HISTFILESIZE=5 :歷史記錄文件的命令數量變量(~/.bash_history)。提示:實際工作中類似的變量還有不少,大家可以根據企業需求選擇使用,最好執行前加上export命令,更多linux系統的環境變量,大家可以執行manbash查詢。
1.11 調整linux系統文件描述符數量 文件描述符是由無符號整數表示的句柄,進程使用它來表示打開的文件。文件描述符與包括相關信息(如文件的打開模式、文件的位置類型、文件的初始類型等)的文件對象相關聯,這些信息被稱為文件的上下文。文件描述符的有效范圍是0到OPEN_MAX. 對於內核而言,所有打開的文件都是通過文件描述符引用的。當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符。當讀或寫一個文件是,使用open或creat返回的文件描述符標識改文件,並將其作為參數傳遞給read或write。[root@moban ~]# ulimit -n1024 文字描述符數量 對於高並發的業務linux服務器來說,這個默認的設備值是不夠的,需要調整。1.11.1 調整方法1: 執行vim /etc/security/limits.conf命令,在文件結尾加上如下一行。* - nofile 65535 或者直接執行命令追加到文件尾部/etc/security/limits.conf配置完成後,需重新登陸才可以生效,用ulimit -n 命令查看。1.11.2 調整方法2 直接把ulimit-SHn65535命令加入到/etc/rc.local,然後每次開機啟動的時候生效。
[root@moban ~]# cat >>/etc/rc.local<<EOF
1.12 linux服務器內核參數優化 所謂linux服務器內核參數優化,主要是指在linux系統中針對業務服務應用而進行的系統內核參數調整,優化並無一定的標准,下面生產環境下linux常見的內核優化為例進行講解,僅供大家參考。 優化方法是,執行vi /etc/sysctl.conf命令道文件結尾,然後拷貝如下內容並保存。 sysctl -p 是的加載的參數生效 網絡狀態說明及優化命令和優化細節參考資料請看:http://oldboy.blog.51cto.com/2561410/1336488/content/5916165.html
1.13 定時清理郵件服務臨時目錄垃圾文件 centos5系列的系統會默認安裝sendmail服務,因此郵件臨時存放地點的路徑為/var/spool/clientmqueue/。 centos6默認情況下沒有安裝sendmail服務,而是改裝了postfix服務,因此郵件臨時存放點的路徑為/var/spool/postfix/maildrop 以上兩個目錄很容易被垃圾文件填滿導致系統的inode數量不夠用,從而導致無法存放文件。 手動清理的方法如下:[root@moban ~]# find /var/spool/clientmqueue/ -type f |xargs rm -f #centos5
[root@moban ~]# find /var/spool/postfix/maildrop/ -type f |xargs rm -f #centos6 定期清理的方法為:將上述命令攜程腳本,然後做成定時任務,每天晚上0點執行一次。[root@moban ~]#echo "find /var/spool/postfix/maildrop/ -type f|xargs rm -f">/server/scripts/del_file.sh[root@moban ~]# crontab -e00 00 * * * /bin/sh /server/scripts/del_file.sh >dev/null 2>&1
1.14 隱藏linux版本信息顯示 在登錄到linux主機本地(非CRT連接)前,會顯示系統的版本和內核[root@moban ~]# cat /etc/issue CentOS release 6.7 (Final)Kernel \r on an \m
[root@moban ~]# cat /etc/issue.netCentOS release 6.7 (Final)Kernel \r on an \m[root@moban ~]#
執行如下命令清除linux系統版本及內核信息[root@moban ~]# > /etc/issue[root@moban ~]# > /etc/issue.net
1.15 鎖定關鍵系統文件,防止提權被篡改 要鎖定關鍵系統文件,必須對賬號密碼文件及啟動文件加鎖,防止被篡改。上鎖命令如下:[root@moban ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab提示:上鎖後,所用該用戶都不能對文件修改刪除 解鎖的命令如下[root@moban ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab提示:上鎖後,如需臨時錯做,可以解鎖後對文件進行修改,之後再上鎖。
1.16 清除多余的系統虛擬賬號 操作前要先根據公司系統提供的服務確定哪些賬號不需要使用,如果不確定就不要操作了,一般情況下,一個規范的系統提供的服務都比較少,因此,系統中默認的絕大多數虛擬用戶都是可以刪除的。例如: bin/adm/lp/halt/mail/uncp/operator/games/gopher/ftp/dbus/vcsa/abrt/ntp/saslauth/postfix/tcpdump等,這些用戶本身也是無法登陸的,因此,此項優化不是必須的。
1.17 為grub菜單加密碼 為grub菜單加密碼的目的是防止他人修改grub做內核等啟動設置,以及用單用戶模式啟動破解root密碼等操作。實際上此步可以在安裝系統的過程中設定,安裝系統後的具體設定步驟如下:1)先用/sbin/grub-md5-crypt產生一個MD5密碼串,如下[root@moban ~]# /sbin/grub-md5-cryptPassword: Retype password: $1$vS9Bj$UKnQYq/V4Z2HIds8FVPJL.2)修改grub.conf文件,命令如下:[root@moban ~]# vi /etc/grub.conf
1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda3 12 splashimage=(hd0,0)/grub/splash.xpm.gz 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda3 8 # initrd /initrd-[generic-]version.img 13 hiddenmenu 14 password --md5 $1$vS9Bj$UKnQYq/V4Z2HIds8FVPJL#注意:password 要加載splashimage和title之間這段,否則可能不生效 15 title CentOS 6 (2.6.32-573.el6.x86_64) 16 root (hd0,0) 17 kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=c511f78f-2713-4ca d-8dcc-756dab643fc1 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=l atarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 18 initrd /initramfs-2.6.32-573.el6.x86_64.img 設置完成後,下次開機需要管理grub時就會提示輸入密碼。
1.18 禁止linux系統被ping 此項優化不是必須的,而且又是我們自己也會通過ping來檢查服務器是否異常,對於要求很高的中小企業服務器,設置禁止ping也是可以的。從安全角度來說,禁止ping還是會增加系統安全的。禁止png的命令如下:[root@moban ~]# echo "net.ipv4.icmp_echo_ignore_all=1">> /etc/sysctl.con[root@moban ~]#tail -1 /etc/sysctl.confnet.ipv4.icmp_echo_ignore_all=1[root@moban ~]#sysctl -p #啟動 其實這個禁ping的方法還不是好的額策略,因為禁止ping後,我們自己也無法通過ping檢查了,比較好的策略是通過iptables設置讓特定的IP可以ping,例如:讓內網用戶ping其他外部用戶不能ping。例如:在默認策略為drop的情況下,可以執行如下命令,為10.0.0.0/24網段允許pingiptables -t filter -I INPUT -p icmp --icmp -type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT
工作中防火牆處理還原禁ping刪除/etc/sysctl.conf中的net.ipv4.icmp_echo_ignore_all=1並執行如下命令etho 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
1.19 升級具有典型漏洞的軟件版本 openssl openssh bash爆出很多軟件漏洞,在企業場景需要進行修復漏洞操作,步驟如下:1)首先檢查相關軟件的版本號[root@moban ~]# rpm -qa openssl openssh bashbash-4.1.2-33.el6.x86_64openssh-5.3p1-111.el6.x86_64openssl-1.0.1e-42.el6.x86_642)執行升級已知漏洞的軟件版本到最新,命令如下[root@moban ~]# yum install openssl openssh bash -y
1.20 linux基礎優化與安全重點小結1)不用root登錄管理系統,而以普通用戶登錄通過sudo授權管理2)更改默認的遠程連接SSH服務端口,禁止root用戶遠程連接,甚至更改SSH服務只監聽內網IP。3)定時自動更新服務器的時間,使其和互聯網時間同步。4)配置yum更新源,從國內看更新源下載安裝軟件包5)管理SELinux及iptables(在工作場景中,如果有外部IP一般要打開iptables,高並發高流量的服務器可能無法開啟)。6)調整文件描述符的數量,進程及文件的打開都會消耗文件描述符數量。7)定時自動清理郵件臨時目錄垃圾文件,防止磁盤的inodes數被小文件占滿(注意cetos6和centos5要清除的目錄不同)8)精簡並保留必要的開機自啟動服務(如crond、sshd、network、rsyslog、sysstat)9)linux內核參數優化/etc/sysctl.conf,執行sysctl -p 生效。10)更改系統字符集為“zh_CN.UTF-8”,使其支持中文,防止出現亂碼問題。11)鎖定關鍵系統文件如(/etc/passwd./etc/shadow./etc/group./etc/gshadow /etc/inittab)處理以上內容後把chattr、lsattr改名為olboy,轉移走,這樣就安全多了。12)清空/etc/issue、/etc/issue.net,去除系統及內核版本登錄前的屏幕顯示。13)清除多余的系統虛擬用戶賬號。14)為grub引導菜單加密碼
提示:上述僅為安裝linux後的一些基礎優化,更多針對不同業務服務器的優化思路見:http://oldboy.blog.51cto.com/2561410/1336488/content/5916165.html 本文出自 “wtlinux” 博客,請務必保留此出處/content/6549665.html