安全是IT行業(yè)一個老生常談的話題了,從之前的“棱鏡門”事件中折射出了很多安全問題,處理好信息安全問題已變得刻不容緩。
因此做為運維人員,就必須了解一些安全運維準(zhǔn)則,同時,要保護(hù)自己所負(fù)責(zé)的業(yè)務(wù),首先要站在攻擊者的角度思考問題,修補(bǔ)任何潛在的威脅和漏洞,主要分五部分展開:
賬戶和登錄安全
賬戶安全是系統(tǒng)安全的第一道屏障,也是系統(tǒng)安全的核心,保障登錄賬戶的安全,在一定程度上可以提高服務(wù)器的安全級別,下面重點介紹下Linux系統(tǒng)登錄賬戶的安全設(shè)置方法。
1、刪除特殊的賬戶和賬戶組
Linux提供了各種不同角色的系統(tǒng)賬號,在系統(tǒng)安裝完成后,默認(rèn)會安裝很多不必要的用戶和用戶組,如果不需要某些用戶或者組,就要立即刪除它,因為賬戶越多,系統(tǒng)就越不安全,很可能被黑客利用,進(jìn)而威脅到服務(wù)器的安全。
Linux系統(tǒng)中可以刪除的默認(rèn)用戶和組大致有如下這些:
可刪除的用戶,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。
可刪除的組,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等。
2、關(guān)閉系統(tǒng)不需要的服務(wù)
Linux在安裝完成后,綁定了很多沒用的服務(wù),這些服務(wù)默認(rèn)都是自動啟動的。對于服務(wù)器來說,運行的服務(wù)越多,系統(tǒng)就越不安全,越少服務(wù)在運行,安全性就越好,因此關(guān)閉一些不需要的服務(wù),對系統(tǒng)安全有很大的幫助。
具體哪些服務(wù)可以關(guān)閉,要根據(jù)服務(wù)器的用途而定,一般情況下,只要系統(tǒng)本身用不到的服務(wù)都認(rèn)為是不必要的服務(wù)。
例如:某臺Linux服務(wù)器用于www應(yīng)用,那么除了httpd服務(wù)和系統(tǒng)運行是必須的服務(wù)外,其他服務(wù)都可以關(guān)閉。下面這些服務(wù)一般情況下是不需要的,可以選擇關(guān)閉:anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ip6tables、ipsec、isdn、lpd、mcstrans、messagebus、netfs、nfs、nfslock、nscd、pcscd portmap、readahead_early、restorecond、rpcgssd、rpcidmapd、rstatd、sendmail、setroubleshoot、yppasswdd ypserv
3、密碼安全策略
在Linux下,遠(yuǎn)程登錄系統(tǒng)有兩種認(rèn)證方式:密碼認(rèn)證和密鑰認(rèn)證。
密碼認(rèn)證方式是傳統(tǒng)的安全策略,對于密碼的設(shè)置,比較普遍的說法是:至少6個字符以上,密碼要包含數(shù)字、字母、下劃線、特殊符號等。設(shè)置一個相對復(fù)雜的密碼,對系統(tǒng)安全能起到一定的防護(hù)作用,但是也面臨一些其他問題,例如密碼暴力破解、密碼泄露、密碼丟失等,同時過于復(fù)雜的密碼對運維工作也會造成一定的負(fù)擔(dān)。
密鑰認(rèn)證是一種新型的認(rèn)證方式,公用密鑰存儲在遠(yuǎn)程服務(wù)器上,專用密鑰保存在本地,當(dāng)需要登錄系統(tǒng)時,通過本地專用密鑰和遠(yuǎn)程服務(wù)器的公用密鑰進(jìn)行配對認(rèn)證,如果認(rèn)證成功,就成功登錄系統(tǒng)。這種認(rèn)證方式避免了被暴力破解的危險,同時只要保存在本地的專用密鑰不被黑客盜用,攻擊者一般無法通過密鑰認(rèn)證的方式進(jìn)入系統(tǒng)。因此,在Linux下推薦用密鑰認(rèn)證方式登錄系統(tǒng),這樣就可以拋棄密碼認(rèn)證登錄系統(tǒng)的弊端。
Linux服務(wù)器一般通過SecureCRT、putty、Xshell之類的工具進(jìn)行遠(yuǎn)程維護(hù)和管理,密鑰認(rèn)證方式的實現(xiàn)就是借助于SecureCRT軟件和Linux系統(tǒng)中的SSH服務(wù)實現(xiàn)的。
4、合理使用su、sudo命令
su命令:是一個切換用戶的工具,經(jīng)常用于將普通用戶切換到超級用戶下,當(dāng)然也可以從超級用戶切換到普通用戶。為了保證服務(wù)器的安全,幾乎所有服務(wù)器都禁止了超級用戶直接登錄系統(tǒng),而是通過普通用戶登錄系統(tǒng),然后再通過su命令切換到超級用戶下,執(zhí)行一些需要超級權(quán)限的工作。通過su命令能夠給系統(tǒng)管理帶來一定的方便,但是也存在不安全的因素,
例如:系統(tǒng)有10個普通用戶,每個用戶都需要執(zhí)行一些有超級權(quán)限的操作,就必須把超級用戶的密碼交給這10個普通用戶,如果這10個用戶都有超級權(quán)限,通過超級權(quán)限可以做任何事,那么會在一定程度上對系統(tǒng)的安全造成了威協(xié)。
因此su命令在很多人都需要參與的系統(tǒng)管理中,并不是最好的選擇,超級用戶密碼應(yīng)該掌握在少數(shù)人手中,此時sudo命令就派上用場了。
sudo命令:允許系統(tǒng)管理員分配給普通用戶一些合理的“權(quán)利”,并且不需要普通用戶知道超級用戶密碼,就能讓他們執(zhí)行一些只有超級用戶或其他特許用戶才能完成的任務(wù)。
比如:系統(tǒng)服務(wù)重啟、編輯系統(tǒng)配置文件等,通過這種方式不但能減少超級用戶登錄次數(shù)和管理時間,也提高了系統(tǒng)安全性。
因此,sudo命令相對于權(quán)限無限制性的su來說,還是比較安全的,所以sudo也被稱為受限制的su,另外sudo也是需要事先進(jìn)行授權(quán)認(rèn)證的,所以也被稱為授權(quán)認(rèn)證的su。
sudo執(zhí)行命令的流程是:
將當(dāng)前用戶切換到超級用戶下,或切換到指定的用戶下,然后以超級用戶或其指定切換到的用戶身份執(zhí)行命令,執(zhí)行完成后,直接退回到當(dāng)前用戶,而這一切的完成要通過sudo的配置文件/etc/sudoers來進(jìn)行授權(quán)。
sudo設(shè)計的宗旨是:
賦予用戶盡可能少的權(quán)限但仍允許它們完成自己的工作,這種設(shè)計兼顧了安全性和易用性,因此,強(qiáng)烈推薦通過sudo來管理系統(tǒng)賬號的安全,只允許普通用戶登錄系統(tǒng),如果這些用戶需要特殊的權(quán)限,就通過配置/etc/sudoers來完成,這也是多用戶系統(tǒng)下賬號安全管理的基本方式。
5、刪減系統(tǒng)登錄歡迎信息
系統(tǒng)的一些歡迎信息或版本信息,雖然能給系統(tǒng)管理者帶來一定的方便,但是這些信息有時候可能被黑客利用,成為攻擊服務(wù)器的幫兇,為了保證系統(tǒng)的安全,可以修改或刪除某些系統(tǒng)文件,需要修改或刪除的文件有4個,分別是:
/etc/issue、/etc/issue.net、/etc/redhat-release和/etc/motd。
/etc/issue和/etc/issue.net文件都記錄了操作系統(tǒng)的名稱和版本號,當(dāng)用戶通過本地終端或本地虛擬控制臺等登錄系統(tǒng)時,/etc/issue的文件內(nèi)容就會顯示,當(dāng)用戶通過ssh或telnet等遠(yuǎn)程登錄系統(tǒng)時,/etc/issue.net文件內(nèi)容就會在登錄后顯示。在默認(rèn)情況下/etc/issue.net文件的內(nèi)容是不會在ssh登錄后顯示的,要顯示這個信息可以修改/etc/ssh/sshd_config文件,在此文件中添加如下內(nèi)容即可:
Banner /etc/issue.net
其實這些登錄提示很明顯泄漏了系統(tǒng)信息,為了安全起見,建議將此文件中的內(nèi)容刪除或修改。
/etc/redhat-release文件也記錄了操作系統(tǒng)的名稱和版本號,為了安全起見,可以將此文件中的內(nèi)容刪除。
/etc/motd文件是系統(tǒng)的公告信息。每次用戶登錄后,/etc/motd文件的內(nèi)容就會顯示在用戶的終端。通過這個文件系統(tǒng)管理員可以發(fā)布一些軟件或硬件的升級、系統(tǒng)維護(hù)等通告信息,但是此文件的大作用就、是可以發(fā)布一些警告信息,當(dāng)黑客登錄系統(tǒng)后,會發(fā)現(xiàn)這些警告信息,進(jìn)而產(chǎn)生一些震懾作用。看過國外的一個報道,黑客入侵了一個服務(wù)器,而這個服務(wù)器卻給出了歡迎登錄的信息,因此法院不做任何裁決。
遠(yuǎn)程訪問和認(rèn)證安全
1、遠(yuǎn)程登錄取消telnet而采用SSH方式
telnet是一種古老的遠(yuǎn)程登錄認(rèn)證服務(wù),它在網(wǎng)絡(luò)上用明文傳送口令和數(shù)據(jù),因此別有用心的人就會非常容易截獲這些口令和數(shù)據(jù)。而且,telnet服務(wù)程序的安全驗證方式也極其脆弱,攻擊者可以輕松將虛假信息傳送給服務(wù)器。現(xiàn)在遠(yuǎn)程登錄基本拋棄了telnet這種方式,而取而代之的是通過SSH服務(wù)遠(yuǎn)程登錄服務(wù)器。
2、合理使用Shell歷史命令記錄功能
在Linux下可通過history命令查看用戶所有的歷史操作記錄,同時shell命令操作記錄默認(rèn)保存在用戶目錄下的.bash_history文件中,通過這個文件可以查詢shell命令的執(zhí)行歷史,有助于運維人員進(jìn)行系統(tǒng)審計和問題排查,同時,在服務(wù)器遭受黑客攻擊后,也可以通過這個命令或文件查詢黑客登錄服務(wù)器所執(zhí)行的歷史命令操作,但是有時候黑客在入侵服務(wù)器后為了毀滅痕跡,可能會刪除.bash_history文件,這就需要合理的保護(hù)或備份.bash_history文件。
3、啟用tcp_wrappers防火墻
Tcp_Wrappers是一個用來分析TCP/IP封包的軟件,類似的IP封包軟件還有iptables。Linux默認(rèn)都安裝了Tcp_Wrappers。作為一個安全的系統(tǒng),Linux本身有兩層安全防火墻,通過IP過濾機(jī)制的iptables實現(xiàn)第一層防護(hù)。iptables防火墻通過直觀地監(jiān)視系統(tǒng)的運行狀況,阻擋網(wǎng)絡(luò)中的一些惡意攻擊,保護(hù)整個系統(tǒng)正常運行,免遭攻擊和破壞。如果通過了第一層防護(hù),那么下一層防護(hù)就是tcp_wrappers了。通過Tcp_Wrappers可以實現(xiàn)對系統(tǒng)中提供的某些服務(wù)的開放與關(guān)閉、允許和禁止,從而更有效地保證系統(tǒng)安全運行。
文件系統(tǒng)安全
1、鎖定系統(tǒng)重要文件
系統(tǒng)運維人員有時候可能會遇到通過root用戶都不能修改或者刪除某個文件的情況,產(chǎn)生這種情況的大部分原因可能是這個文件被鎖定了。在Linux下鎖定文件的命令是chattr,通過這個命令可以修改ext2、ext3、ext4文件系統(tǒng)下文件屬性,但是這個命令必須有超級用戶root來執(zhí)行。和這個命令對應(yīng)的命令是lsattr,這個命令用來查詢文件屬性。
對重要的文件進(jìn)行加鎖,雖然能夠提高服務(wù)器的安全性,但是也會帶來一些不便。
例如:在軟件的安裝、升級時可能需要去掉有關(guān)目錄和文件的immutable屬性和append-only屬性,同時,對日志文件設(shè)置了append-only屬性,可能會使日志輪換(logrotate)無法進(jìn)行。因此,在使用chattr命令前,需要結(jié)合服務(wù)器的應(yīng)用環(huán)境來權(quán)衡是否需要設(shè)置immutable屬性和append-only屬性。
另外,雖然通過chattr命令修改文件屬性能夠提高文件系統(tǒng)的安全性,但是它并不適合所有的目錄。chattr命令不能保護(hù)/、/dev、/tmp、/var等目錄。
根目錄不能有不可修改屬性,因為如果根目錄具有不可修改屬性,那么系統(tǒng)根本無法工作:
/dev在啟動時,syslog需要刪除并重新建立/dev/log套接字設(shè)備,如果設(shè)置了不可修改屬性,那么可能出問題;
/tmp目錄會有很多應(yīng)用程序和系統(tǒng)程序需要在這個目錄下建立臨時文件,也不能設(shè)置不可修改屬性;
/var是系統(tǒng)和程序的日志目錄,如果設(shè)置為不可修改屬性,那么系統(tǒng)寫日志將無法進(jìn)行,所以也不能通過chattr命令保護(hù)。
2、文件權(quán)限檢查和修改
不正確的權(quán)限設(shè)置直接威脅著系統(tǒng)的安全,因此運維人員應(yīng)該能及時發(fā)現(xiàn)這些不正確的權(quán)限設(shè)置,并立刻修正,防患于未然。下面列舉幾種查找系統(tǒng)不安全權(quán)限的方法。
(1)查找系統(tǒng)中任何用戶都有寫權(quán)限的文件或目錄
查找文件:find / -type f -perm -2 -o -perm -20 |xargs ls -al
查找目錄:find / -type d -perm -2 -o -perm -20 |xargs ls –ld
(2)查找系統(tǒng)中所有含“s”位的程序
find / -type f -perm -4000 -o -perm -2000 -print | xargs ls –al
含有“s”位權(quán)限的程序?qū)ο到y(tǒng)安全威脅很大,通過查找系統(tǒng)中所有具有“s”位權(quán)限的程序,可以把某些不必要的“s”位程序去掉,這樣可以防止用戶濫用權(quán)限或提升權(quán)限的可能性。
(3)檢查系統(tǒng)中所有suid及sgid文件
find / -user root -perm -2000 -print -exec md5sum {} ;
find / -user root -perm -4000 -print -exec md5sum {} ;
將檢查的結(jié)果保存到文件中,可在以后的系統(tǒng)檢查中作為參考。
(4)檢查系統(tǒng)中沒有屬主的文件
find / -nouser -o –nogroup
沒有屬主的孤兒文件比較危險,往往成為黑客利用的工具,因此找到這些文件后,要么刪除掉,要么修改文件的屬主,使其處于安全狀態(tài)。
3、/tmp、/var/tmp、/dev/shm安全設(shè)定
在Linux系統(tǒng)中,主要有兩個目錄或分區(qū)用來存放臨時文件,分別是/tmp和/var/tmp。
存儲臨時文件的目錄或分區(qū)有個共同點就是所有用戶可讀寫、可執(zhí)行,這就為系統(tǒng)留下了安全隱患。攻擊者可以將病毒或者木馬腳本放到臨時文件的目錄下進(jìn)行信息收集或偽裝,嚴(yán)重影響服務(wù)器的安全,此時,如果修改臨時目錄的讀寫執(zhí)行權(quán)限,還有可能影響系統(tǒng)上應(yīng)用程序的正常運行,因此,如果要兼顧兩者,就需要對這兩個目錄或分區(qū)就行特殊的設(shè)置。
/dev/shm是Linux下的一個共享內(nèi)存設(shè)備,在Linux啟動的時候系統(tǒng)默認(rèn)會加載/dev/shm,被加載的/dev/shm使用的是tmpfs文件系統(tǒng),而tmpfs是一個內(nèi)存文件系統(tǒng),存儲到tmpfs文件系統(tǒng)的數(shù)據(jù)會完全駐留在RAM中,這樣通過/dev/shm就可以直接操控系統(tǒng)內(nèi)存,這將非常危險,因此如何保證/dev/shm安全也至關(guān)重要。
對于/tmp的安全設(shè)置,需要看/tmp是一個獨立磁盤分區(qū),還是一個根分區(qū)下的文件夾,如果/tmp是一個獨立的磁盤分區(qū),那么設(shè)置非常簡單,修改/etc/fstab文件中/tmp分區(qū)對應(yīng)的掛載屬性,加上nosuid、noexec、nodev三個選項即可,修改后的/tmp分區(qū)掛載屬性類似如下:
LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodev 0 0
其中,nosuid、noexec、nodev選項,表示不允許任何suid程序,并且在這個分區(qū)不能執(zhí)行任何腳本等程序,并且不存在設(shè)備文件。
在掛載屬性設(shè)置完成后,重新掛載/tmp分區(qū),保證設(shè)置生效。
對于/var/tmp,如果是獨立分區(qū),安裝/tmp的設(shè)置方法是修改/etc/fstab文件即可;如果是/var分區(qū)下的一個目錄,那么可以將/var/tmp目錄下所有數(shù)據(jù)移動到/tmp分區(qū)下,然后在/var下做一個指向/tmp的軟連接即可。也就是執(zhí)行如下操作:
[root@server ~]# mv /var/tmp/* /tmp