SUSE安全大揭秘之“十誡”
原創(chuàng)【51CTO.com獨家特稿】SUSE由于其出色的性能和對安全較好的控制,吸引了很多企業(yè)級用戶,目前在國內(nèi)開始有大量的關(guān)鍵應(yīng)用。但這并不代表SUSE在使用中就是安全的,SUSE里還有很多安全細節(jié)要注意。本文就SUSE中的這些安全細節(jié)進行逐一介紹,為大家揭開每一個需要注意的地方。
一、補丁、SSH及其他
1、補丁
每個補丁的更新都意味著這是一個安全漏洞,或是有其他嚴重的功能問題,但如果更新補丁則又可能導致系統(tǒng)的一些異常,甚至引起一些服務(wù)的癱瘓。所以對于補丁的更新要慎重處理。從實際的角度來說,有4種做法:
1)是在剛裝完系統(tǒng)之后立刻更新補丁,然后再上應(yīng)用。
2)是通過外圍防護手段來保護服務(wù)器,可以用防火墻、IPS之類的手段。
3)是在測試機上更新補丁。不過值得注意的是,有些補丁帶來的問題是隱性的,可能今天明天沒問題,但后天出了問題,所以,觀察的時間需要久一些。
4)、如果你的SUSE服務(wù)器比較多,也可以通過NFS共享或者內(nèi)部的FTP、HTTP服務(wù)來完成。但FTP、HTTP又會帶來另外的安全風險。
SUSE的補丁升級,需要去下載Novell的新RPM。RPM包的安裝會有先有后,不過多數(shù)情況下,RPM會根據(jù)其依賴關(guān)系來處理。另外,Novell也有一些在特殊情況下的提示,比如內(nèi)核更新、C運行庫等。Novell公司提供了一個強大的工具YaST,不過遺憾的是,YaST自身也不安全,有在線升級不安全臨時文件建立漏洞。
加固方法:輸入yast,在software中選擇online update。
2、SSH
SUSE上默認安裝了OpenSSH,OpenSSH是目前比較流行并且免費的加密連接工具,但OpenSSH的低版本也存在不少安全漏洞,所以最好還是去http://www.openssh.org下載最新版本的。在升級到最新版本之后,SSH仍有很多需要安全加固工作要做。比如限制那些賬戶的登錄、更改默認端口、指定可訪問的網(wǎng)絡(luò)等等,限于篇幅本文對此不做更詳細的介紹。但至少有一點,是你必須要做的:將協(xié)議版本修改為2。因為版本1的安全問題實在太嚴重了,甚至可以截獲密碼。
加固方法:
vi /etc/ssh/ssh_config
修改protocol的值為2。
3、系統(tǒng)性能審計
對于運維人員來說,需要經(jīng)常監(jiān)控系統(tǒng)的性能情況,SUSE提供的sysstat就是一個檢測系統(tǒng)狀態(tài)的工具,比如比如CPU利用率、磁盤I/O等。sysstat默認每10分鐘收集一次系統(tǒng)數(shù)據(jù),可以用sar命令查看。sysstat首先會建立一個正常的性能曲線,當這個基線建立完畢以后,任何超出基線的活動都會給出提示。例如密碼猜測、或者在業(yè)務(wù)高峰期以外的事件會導致CPU利用率過高,從而偏離正常的基線。注意sysstat收集的數(shù)據(jù)默認是在系統(tǒng)上存放一周,一周之后會被cron任務(wù)自動移除,可在/var/log/sa/目錄下來維護收集的數(shù)據(jù)。但是默認安裝的服務(wù)器版本是不包括sysstat包的,除非安裝的時候選擇了完全安裝。
加固方法:安裝sysstat,并使用sar命令。
4、防火墻
SuSEfirewall2是SUSE下面的包過濾防火墻,可以允許、拒絕數(shù)據(jù)的進出。默認是安裝并且激活的,而且默認不允許任何服務(wù),要開放服務(wù)就必須明確的啟用(比如上面提到的SSH)。
加固方法:
在YAST里,Center--#Security and Users--#Firewall進行防火墻策略調(diào)整。
更細粒度的策略配置,可以在YAST Center--#System#--/etc/sysconfig editor-Network/Firewall/SuSEfirewall2,也可直接編輯/etc/sysconfig/SuSEfirewall2文件。
5、系統(tǒng)安全定期檢查腳本seccheck
seccheck是一個系統(tǒng)安全檢查腳本,可以每天、每周、每月的定期生成報告,并且郵件發(fā)送。不過他在定期運行的時候比較占用資源,所以要選擇在非業(yè)務(wù)高峰期來做。
加固方法:YAST Center-System-#/etc/sysconfig-System/Security/Seccheck selection
6、SUSE的安全應(yīng)用框架AppArmor
AppArmor和SuSEfirewall2相比,他的特點在于對應(yīng)用級的保護,可以管理應(yīng)用的文件和目錄訪問等更細顆粒的操作,是一個白名單的機制,即指定哪些行為才是允許的,其他的拒絕,這樣可以更好的隱藏內(nèi)部系統(tǒng)。比如你的系統(tǒng)存在一個漏洞,但由于對其的操作沒有受到白名單允許,所以操作會被拒絕。
加固方法:YAST Center-Novell AppArmor可以調(diào)整細節(jié)策略、查看報告。如果不熟悉的話,AppArmor還內(nèi)設(shè)了一個向?qū)Чδ堋?/P>
二、最小化xinetd
1、關(guān)閉標準服務(wù)
SUSE使用xinetd,他比inetd更優(yōu)秀也更方便使用。SUSE默認情況下是關(guān)閉所有服務(wù)的,在啟用SSH之后,就可以配置xinetd的服務(wù)了。安全的做法也應(yīng)該如此,先關(guān)閉所有服務(wù),然后只啟用必須的服務(wù)。
加固方法:運行chkconfig查看所有服務(wù)的開啟狀態(tài),對不需要的服務(wù)進行關(guān)閉。
2、可信網(wǎng)絡(luò)接入
對服務(wù)器的訪問應(yīng)該受到控制,所以需要用SuSEfirewall2或者其他的措施來控制,只允許那些可信的網(wǎng)絡(luò)接入。
加固方法:
vi /etc/sysconfig/SuSEfirewall2中的第10項配置。也可以在yast Center#System#/etc/sysconfig editor進行配置。
3、telnet
如果不是有特別的理由,不要使用telnet,telnet使用的是不加密的網(wǎng)絡(luò)協(xié)議,這就意味著從你的賬號到你傳輸?shù)臄?shù)據(jù),都可以被人竊聽,嚴重的可以通過會話劫持控制你的系統(tǒng)。所以這里還是強烈建議使用SSH,雖然SSH也不是那么的安全。
加固方法:
打開的命令是chkconfig telnet on。
關(guān)閉的命令是chkconfig telnet off。
4、FTP
同樣,在沒有充分理由的情況下,不要使用FTP,尤其是匿名FTP。和telnet一樣,F(xiàn)TP也不加密,也可以被人竊聽或者會話劫持。SSH則提供了SCP和SFTP,可以取代FTP。要注意的是,有時候FTP可能是因為某些應(yīng)用綁定的,比如我多次見到的WEB上傳通道,所以你必須要用這種匿名FTP。如果必須要用FTP,那還是要做一些控制,要注意的一點是,F(xiàn)TP的目錄應(yīng)該受到控制,最好能有自己的分區(qū)。在SUSE上,vsftpd默認是不安裝的。
加固方法:
打開的命令是chkconfig vsftpd。
關(guān)閉命令是chkconfig vsftpd off。
5、rlogin/rsh/rcp
所有r系列的命令都應(yīng)該被關(guān)閉。他們除了可以被竊聽之外,在驗證機制上也存在問題,并且還有其他的安全漏洞,比如緩沖區(qū)溢出、任意命令執(zhí)行等。建議還是用SSH來取代。
加固方法:
打開命令是
chkconfig rexec on
chkconfig rlogin on
chkconfig rsh on
關(guān)閉他們:
chkconfig rexec off
chkconfig rlogin off
chkconfig rsh off
6、TFTP
TFTP一般用在無盤工作站, X-terminals等情況下。路由器或者其他網(wǎng)絡(luò)設(shè)備的配置數(shù)據(jù)可以利用它復制,實現(xiàn)備份功能。當然,在這里,沒有特殊原因,我們?nèi)匀唤ㄗh你禁用。TFTP在SUSE上也不是默認安裝的。
關(guān)閉命令chkconfig tftp off
7、IMAP
只有郵件服務(wù)器才會用到IMAP,一些郵件客戶端(比如Eudora、Netscape Mail和Kmail)需要使用IMAP來檢索遠程郵件。
加固方法:關(guān)閉服務(wù)的命令
chkconfig cyrus off或chkconfig imap off。
8、POP
這是一個收郵件的服務(wù),作為服務(wù)器有收取郵件的需要嗎?如果沒有,同樣也應(yīng)關(guān)閉。
加固方法:chkconfig qpopper off或chkconfig cyrus off。
三、最小化啟動服務(wù)
1、設(shè)置umask
系統(tǒng)默認的umask至少應(yīng)設(shè)置成027,有些守護進程比如系統(tǒng)日志,會默認設(shè)置為任何人可以寫文件。如果某個守護進程需要放開對權(quán)限的限制,可以考慮修改守護進程的啟動腳本,給以其權(quán)限,同時又不會影響服務(wù)器的其他安全。
加固方法:
vi /etc/profile,改變umask的值為027。
對/home下的所有用戶,根據(jù)其shell類型,定義umask的值。一般在/home/.profile中新增加一行umask 027。
2、SMTP
需要確認服務(wù)器是否需要處理郵件。SUSE中,默認安裝的是Postfix,并且是激活狀態(tài)。如果這臺服務(wù)器是郵件服務(wù)器的話,需要注意的是,有權(quán)限在web界面上搜索附件是一個安全隱患。另外,如果你對郵件服務(wù)器管理有經(jīng)驗的話,你會知道為postfix規(guī)劃一個chroot環(huán)境有多么重要。在chroot環(huán)境下,即使有人闖入了smtpd daemon,能夠造成的損害也比較有限。
加固方法:
打開:vi /etc/sysconfig/mail,設(shè)置SMTPD_LISTEN_REMOTE="yes"。在防火墻上也必須啟用。
關(guān)閉:vi /etc/sysconfig/mail,設(shè)置SMTPD_LISTEN_REMOTE="no"。
3、運行級別
SUSE里有兩個主要的運行級別,級別5直接啟動到X Windows,級別3則是字符界面。但注意的是,即使系統(tǒng)運行在級別3,用戶仍然可以在shelle下執(zhí)行startx來啟動X Windows。
加固方法:
設(shè)置為級別3,vi /etc/inittab,將id:5:initdefault中的5修改為3。
4、X Font Server
對于服務(wù)器來說,一般不需要運行X Windows,如果不使用圖形界面的話,X Font Server就可以關(guān)掉,他是為圖形界面提供字體集用的,并且XFS還有一些緩沖區(qū)溢出的問題。
加固方法:
關(guān)閉X Font Server:chkconfig xfs off
5、標準啟動服務(wù)
每個系統(tǒng)的守護進程,如果你不能明確知道必須開啟的話,都應(yīng)該關(guān)閉。服務(wù)器上運行的脆弱應(yīng)用,將大大增加風險。SUSE使用chkconfig來管理所有的系統(tǒng)服務(wù)腳本。這里要注意的是,SUSE的補丁程序可能會恢復啟動某些服務(wù),在更新補丁之前,最好還是先記錄一下你已經(jīng)啟動哪些服務(wù)。還有就是一些守護進程會擁有一些賬戶,對這些賬戶要進行刪除、鎖定,避免別人登錄,或者對他的Shell設(shè)置成/bin/false。
加固方法:
添加、刪除啟動服務(wù)的方法是在在不同運行級別下的目錄里,首先你需要知道你的系統(tǒng)運行界別,使用runlevel命令查看運行級別,如果運行級別是3的話,那就需要在/etc/rc.d/rc3.d修改。這里面以S開頭的,都是啟動時會運行的服務(wù)。例如mv /etc/rc3.d/S04rpcbind etc/rc3.d/K04rpcbind,是將rpcbind服務(wù)關(guān)閉。
另外還需要對守護進程的賬戶進行刪除或鎖定,刪除用戶命令是userdel,可以刪除這些用戶:adm lp sync shutdown halt news uucp operator gopher,如果不用x windows的話可以刪除games,如果沒有匿名ftp可以刪除ftp。
6、SMB和NMB
SUSE提供了Samba,為windows用戶提供文件和打印共享,這樣unix系統(tǒng)可以在windows的網(wǎng)絡(luò)上充當文件服務(wù)器、打印服務(wù)器,甚至為早期的windows系統(tǒng)充當域控驗證服務(wù)器。Samba需要用到SMB和NMB協(xié)議,SMB是Windows的文件共享,NMB是NetBIOS消息塊。如果不需要充當這些角色的話,就應(yīng)該關(guān)閉這兩個協(xié)議。關(guān)閉命令 chkconfig smb off
7、NFS
NFS經(jīng)常被利用來越權(quán)存取文件,所以沒有需要也應(yīng)關(guān)閉。即使真的需要NFS服務(wù),也應(yīng)該采取控制措施,包括限制訪問的IP范圍、文件的只讀等。NFS的客戶端服務(wù)也應(yīng)關(guān)閉。
關(guān)閉命令:
chkconfig nfsserver off
chkconfig autofs off
8、NIS
除非十分有必要,否則不要使用NIS。NIS是網(wǎng)絡(luò)信息服務(wù)的縮寫,類似與windows中的域控制器。NIS雖然使用維護簡單,但有設(shè)計上的安全問題,而且也完全可以用LDAP來替代。
關(guān)閉命令:
chkconfig ypserv off
chkconfig yppasswdd off
9、RPC端口映射
要想NIS能夠運行,須首先運行portmap守護進程。但是RPC的驗證機制很薄弱,很容易被繞過,卻可以利用RPC得到很多重要的信息。除非是需要NIS,最好禁用。
關(guān)閉命令:chkconfig portmap off
10、ncpfs腳本
ncpfs是NFS、windows網(wǎng)絡(luò)里共享文件需要用到的,但并非默認安裝,如果沒有網(wǎng)絡(luò)共享在使用,就把它停掉。這個腳本會掛載在客戶機的網(wǎng)絡(luò)驅(qū)動器上,好在它不是一個持續(xù)的守護進程,所以相對來說不是那么危險。
關(guān)閉命令:chkconfig ncpfs off
11、apache
只有WEB服務(wù)器才會用到,即使這臺服務(wù)器是WEB服務(wù)器,也不要把數(shù)據(jù)庫和其他環(huán)境支持都放在這臺服務(wù)器上。
關(guān)閉命令:chkconfig apache2 off
12、SNMP
在規(guī)模比較大的網(wǎng)絡(luò)里會經(jīng)常用到的網(wǎng)絡(luò)管理協(xié)議,要確定你是不是在使用依賴SNMP的遠程監(jiān)控工具,比如HP OpenView, MRTG, Cricket等。如果使用了SNMP,也建議更改默認的community string。在SUSE中,snmp的設(shè)置在/etc/snmpd.conf里。
關(guān)閉命令:chkconfig snmpd off
13、DNS server
確定你的網(wǎng)絡(luò)是否需要域名解析的服務(wù)器,針對DNS的攻擊這兩年越來越多,如果必須要用,建議在/etc/named.conf里 使用訪問控制。比如,內(nèi)部的DNS服務(wù)器不應(yīng)該對外部開放查詢。在比較大的網(wǎng)絡(luò)里,一般都會使用內(nèi)部和外部的DNS服務(wù)器分別提供查詢,但一些小的網(wǎng)絡(luò)沒有條件內(nèi)外分開,就應(yīng)考慮訪問控制。
關(guān)閉命令:chkconfig named off
14、Squid Cache服務(wù)器
Squid是一個代理服務(wù)器軟件,其實Squid是一個較好的安全架構(gòu),因為他在客戶端和服務(wù)器之間設(shè)置了一道代理,在一定程度上減少了系統(tǒng)泄露信息的風險,防止內(nèi)部漏洞被發(fā)現(xiàn)。但是,在使用Squid的時候要仔細進行配置,有很多關(guān)于Squid cache的漏洞。如果不加安全考慮的話,外部仍然可以探測到內(nèi)部的主機,或者利用你的cache來隱藏攻擊者的真實IP。所以應(yīng)該配置成:不允許外部人員未經(jīng)認證使用你的緩存。
關(guān)閉命令:chkconfig squid off
#p#
四、內(nèi)核優(yōu)化
1、網(wǎng)絡(luò)參數(shù)修改
SUSE和其他Linux一樣,把網(wǎng)絡(luò)參數(shù)的修改都放在了/proc/sys/net/ipv4下,這里所有文件名中包含rate和max的變量都可以防止拒絕服務(wù)攻擊。對于每個參數(shù)的具體解釋可以參考相關(guān)文檔,這里就不一一介紹。
建議修改:
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
2、其他參數(shù)
如果系統(tǒng)不是作為一個防火墻或網(wǎng)關(guān)的話,需要修改以下部分。
建議修改:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
五、日志
1、syslog
SUSE使用了syslog-ng來記錄日志。/var/log/messages包括了iptables, mail, news和messages,并把它們分別發(fā)送到(/var/log/firewall, /var/log/mail*, 和/var/log/news。文件權(quán)限默認是u=rw,g=r,o=。
2、NTP
NTP是網(wǎng)絡(luò)時間協(xié)議,目的是保持計算機的時間與網(wǎng)絡(luò)同步,默認安裝,但是沒有啟用。系統(tǒng)時鐘應(yīng)該保持一個高準確度,這樣日志的記錄才能準確的反映時間。NTP啟用后,在udp123端口監(jiān)聽。在配置上,應(yīng)該忽略任何未明確允許的消息,只允許本地回環(huán)127.0.0.1和NTP服務(wù)器的消息,防止別人偽造時間服務(wù)器。對NTP的修改在/etc/ntp.conf下面。
3、日志文件權(quán)限
確保系統(tǒng)日志文件的所有權(quán)和權(quán)限是正確的,日志文件權(quán)限的配置在/etc/syslog-ng/syslog-ng.conf.in和/etc/logrotate.d
4、遠程日志記錄
配置系統(tǒng)日志記錄發(fā)送到網(wǎng)絡(luò)的其他主機上。注意的是,這個時候,就需要精確的系統(tǒng)時鐘了,所以需要使用NTP。為什么要在遠程記錄日志呢?原因是,如果你的系統(tǒng)發(fā)生故障或者崩潰了,它是什么原因造成的?你就可以在這臺遠程記錄日志的主機上找到原因。syslog-ng可以使用UDP或TCP。但是,除非這臺遠程主機能夠保證一直可用、網(wǎng)絡(luò)也很可靠,否則,建議使用TCP,防止數(shù)據(jù)丟失。
例如:在/etc/syslog-ng的syslog-ng.conf中添加
destination logserver { tcp("10.10.10.10" port(514)); };
六、文件權(quán)限許可
1、在 /etc/fstab使用nodev方式
nodev選項的意思是禁止用戶在任何分區(qū)上掛載未授權(quán)的設(shè)備,需要掛載設(shè)備時,應(yīng)該在其他地方比如/dev。但也有例外,比如在chroot的環(huán)境中,經(jīng)常需要在chroot目錄中創(chuàng)建多個設(shè)備。如果在你的機器上使用了chroot,要注意這個nodev的選項。
2、在/etc/fstab中使用nosuid
在移動介質(zhì)上,經(jīng)常會有一些病毒、惡意軟件,通過nosuid選項,可以阻止用戶在光驅(qū)、軟驅(qū)或者U盤上運行set-UID權(quán)限的程序。如果機器上有多個移動設(shè)備,也可以在/etc/fstab中相關(guān)設(shè)備的第四列設(shè)置nosuid。
3、禁止用戶掛載可移動介質(zhì)
SUSE默認只有root用戶可以掛載移動介質(zhì),如果/etc/fstab被改成允許用戶掛載,可能會讓病毒進入服務(wù)器,或者數(shù)據(jù)被修改刪除。把它改回nouser選項更有助于安全。
4、驗證passwd, shadow,group文件權(quán)限
這些文件都有著默認的所有者和訪問權(quán)限,都要修改/etc/shadow權(quán)限為644,并且定期檢查。AIDE是一個不錯的工具,可以提醒你對這些文件權(quán)限的注意。不過AIDE是Tripwire的非商業(yè)版改進,目前還是BETA版,可能不適合用于關(guān)鍵的生產(chǎn)系統(tǒng)上。
5、沒有權(quán)限限制的目錄應(yīng)該設(shè)置粘滯位
你在任何一個目錄上設(shè)置粘滯位以后,就只有文件所有者能夠刪除目錄里的文件,而不是任何有寫權(quán)限的人可以刪除。設(shè)置粘滯位可以防止彼此覆蓋文件,無論是意外、惡意行為。但也應(yīng)在設(shè)置粘滯位之前,查看一下你的應(yīng)用程序文檔,避免破壞用用程序的依賴。
用這個腳本進行檢查:
for PART in `awk '($3 ~ "ext2|ext3|reiserfs") \
{ print $2 }' /etc/fstab`; do
find $PART -xdev -type d \
\( -perm -0002 -a ! -perm -1000 \) -print
done
如果你的系統(tǒng)設(shè)置的足夠安全的話,這里應(yīng)該不會有任何的返回。
6、任何人都可寫的文件
在某個文件上,如果任何人都可以寫,將可能導致對系統(tǒng)的修改,或者對系統(tǒng)上的用戶造成影響。避免這種文件的出現(xiàn),要在編寫腳本或者程序時加以注意,因為這會導致系統(tǒng)的完整性受到影響。一般來說,可以消除寫訪問(chmod o-w
用這個腳本進行檢查
for PART in `awk '($6 != "0") { print $2 }' /etc/fstab`; do
find $PART -xdev -type f \
\( -perm -0002 -a ! -perm -1000 \) -print
done
如果你的系統(tǒng)設(shè)置的足夠安全的話,這里應(yīng)該不會有任何的返回。
7、未授權(quán)SUID/SGID的可執(zhí)行文件
管理員要檢查在系統(tǒng)里,有沒有未授權(quán)的set-UID。另外如果可能的話,應(yīng)做Set-UID的審計,或者減少這種Set-UID程序。
檢查方法:
for PART in `awk '($6 != "0") { print $2 }' /etc/fstab`; do
find $PART \( -perm -04000 -o -perm -02000 \) \
-type f -xdev -print
done
8、查找無主文件
不要讓你的系統(tǒng)上有任何無主文件,無主文件可能是一個入侵者已經(jīng)訪問了你的系統(tǒng),或者是不當文件包的維護安裝造成的。比如刪除了用戶或者組,但是相關(guān)文件沒有刪除。另一種常見情況是軟件安裝時,沒有正確的設(shè)置所有者。NFS掛載文件,會忽視用戶ID和系統(tǒng)之間的映射同步,也有可能造成無主文件的產(chǎn)生。如果你在使用NIS或者LDAP,那可能是其他原因造成的,什么原因就需要你去仔細檢查了。
檢查方法:
for PART in `awk '($6 != "0") { print $2 }' /etc/fstab`; do
find $PART -nouser -o -nogroup -print
done
#p#
七、系統(tǒng)的管理、授權(quán)、認證
1、在PAM配置文件里移除.rhosts支持
.rhosts定義了哪些計算機和用戶可以不用提供口令就在本地計算機上執(zhí)行遠程命令,很容易被攻擊者利用。使用.rhosts是對用戶訪問控制規(guī)則的破壞,盡量關(guān)閉。如果有特殊原因,必須要使用,那就需要一些預防措施。永遠不要在.rhosts里使用+通配符。.rhosts必須指定特定的可信任用戶名,比如trustedhost DB1,而不是trustedhost。這種在配置HA的時候常見。要避免信任關(guān)系之外的主機,而且防火墻或者其他安全設(shè)備應(yīng)該阻止外部的rlogin/rsh/rcp訪問。最后,還要確保.rhost文件只有所有者可讀。例如文件權(quán)限600。
2、/etc/ftpusers
/etc/ftpusers的列表里定義了哪些用戶不允許使用系統(tǒng)的FTP,一般來說,應(yīng)該只有普通用戶可以使用FTP,而不是system這種類型的賬戶。當然,root用戶永遠都不應(yīng)該使用FTP方式直接傳輸文件。
SUSE提供了一個netcfg的包,預填充了不該使用FTP的賬戶。
3、 防止X Server在tcp6000上監(jiān)聽
X Server在TCP6000上監(jiān)聽,接受來自其他客戶端的請求。但是,X Server使用了一個相對不安全的身份驗證協(xié)議,攻擊者可以未授權(quán)訪問到本地X Server上。使用"-nolisten tcp" 方式可以取消X Server在TCP6000上默認監(jiān)聽。
4、限制用戶使用at/cron
cron.allow、 at.allow定義了誰可以使用crontab、at命令在預定的時間運行作業(yè)。在很多系統(tǒng)上,只有系統(tǒng)管理員有這種能力。即使某個用戶不在cron.allow里面,用戶仍然可以運行cron作業(yè)。cron.allow控制的是:crontab命令調(diào)度的權(quán)限、修改cron作業(yè)的權(quán)限。注意:不要修改/etc/at.deny和/etc/cron.deny文件,除非你的確了解他們,這兩個文件里都有合理的默認內(nèi)容。如果對at和cron必須加以控制,創(chuàng)建/etc/at.allow和/etc/cron.allow文件,增加適當?shù)挠脩簟?/P>
5、限制crontab文件的權(quán)限
系統(tǒng)的crontab文件只能由cron守護進程(運行超級用戶權(quán)限)和crontab命令(set-UID為root)訪問。允許未授權(quán)的用戶讀取修改crontab,可以讓用戶獲得權(quán)限提升。
6、配置xinetd的訪問控制
可使用簡單的基于IP的訪問控制,限制對xinted的非法連接?,F(xiàn)在比較流行的工具是PortSentry,可以用于監(jiān)視那些試圖訪問未使用端口的行為。然后再使用系統(tǒng)防火墻SuSEfirewall2來控制。
7、限制root登錄到系統(tǒng)控制臺
root直接登錄到系統(tǒng)控制臺是不允許的,除非特別情況。在其他時候,管理員應(yīng)該通過無特權(quán)的賬戶并使用授權(quán)機制,比如su、sudo來獲取額外的特權(quán)。這些機制至少提供了審計的線索。/etc/securtty讓你可以規(guī)定root可從哪個tty登錄。/etc/securtty列出來的都是可以登錄的,注釋、不存在的都是不允許root登錄的。
8、設(shè)置LILO/GRUB密碼
大多數(shù)的Linux系統(tǒng),默認在引導時,有裝載提示,這讓攻擊者破壞正常的引導變得很容易。對他設(shè)置密碼,這樣在試圖修改LILO或GRUB的時候,就需要驗證,當然,密碼要夠強壯。
方法
A、如果你有/etc/lilo.conf 文件
在/etc/lilo.conf前面添加:
password=
以root執(zhí)行命令:
chown root:root /etc/lilo.conf
chmod 600 /etc/lilo.conf
B、如果是/etc/grub.conf文件
在/etc/grub.conf取消password
以root執(zhí)行命令:
chown root:root /etc/grub.conf
chmod 600 /etc/grub.conf
9、對單用戶模式驗證
在一些Linux上你可以在LILO模式下鍵入linux single進入單用戶模式,或者在GRUB的引導編輯菜單。這就帶來風險,進入系統(tǒng)的認證應(yīng)該始終需要root級別的訪問,防止攻擊者物理訪問系統(tǒng)。SUSE默認禁止這種進入方式,但是作為檢查來說,還是需要檢查一下。如果被改動的話,要搞清楚原因并恢復。8和9這兩個項目都為了解決物理/啟動的安全問題,也可以考慮設(shè)置只從主硬盤啟動,或者設(shè)置BIOS密碼。
10、限制NFS客戶端請求特權(quán)端口
設(shè)置:NFS服務(wù)器忽略來自客戶端的低于1024的源端口訪問,這不會妨礙到正常的NFS操作,但可以阻止一些使用工具軟件攻擊的人。其配置文件在/etc/exports里。
11、syslog的消息接收
你的服務(wù)器是日志服務(wù)器嗎?需要從網(wǎng)絡(luò)上、其他主機上接收日志嗎?如果是肯定的,啟用日志系統(tǒng)的遠程消息接受。默認情況下的系統(tǒng)日志的守護進程是syslogd,不在udp514上監(jiān)聽來自其他系統(tǒng)的日志消息(Solaris相反,默認是接受的。)成立一個獨立的日志服務(wù)器來記錄一個或多個日志,是比較推薦的安全做法。但是,如果你不是日志服務(wù)器的話,就不應(yīng)該打開udp514的監(jiān)聽,因為這些信息的傳遞沒有任何認證機制。攻擊者也可以利用此端口發(fā)起DDOS攻擊,或者不停的發(fā)送日志消息填滿你的日志系統(tǒng),這樣以后的攻擊就不會被記錄到了。
在syslog-ng.conf.in里,把下面這行加上#注釋掉
#udp(ip("0.0.0.0") port(514))
八、用戶賬戶和環(huán)境
1、鎖定系統(tǒng)賬戶
有很多賬戶是系統(tǒng)賬戶,不會被人使用,鎖定這些賬戶有助于減少攻擊者的利用。這些賬戶不應(yīng)該有shell。如果沒有守護進程/服務(wù)使用的話,甚至可以將賬戶刪除。比較簡單的做法是直接停用,停用的做法是鎖定password,設(shè)置一個無效的shell(比如/bin/false)。SUSE里使用/bin/false而不是/dev/null和/bin/nologin。
2、空密碼賬戶
使用awk -F: '($2 == "") { print $1 }' /etc/shadow查找空密碼賬戶??彰艽a賬戶是指任何人都可以登錄,而不用提供密碼。所有的賬戶都應(yīng)該有健壯的密碼,或者使用鎖定密碼的字符串:NP、*LOCKED*。
3、設(shè)置賬戶過期和密碼參數(shù)
強制用戶定期改變密碼,設(shè)置所有活躍賬戶(除了系統(tǒng)賬戶)強制更改密碼,例如:每90天(-M 90),下次允許更改密碼之前最少的天數(shù)7天 (-m 7),用戶在密碼過期前28天收到警告(-W 28)。一旦密碼過期,賬戶將被鎖定7天(-I 7)。最后,密碼最小長度為6。這只是一些建議,你需要根據(jù)你的實際情況在/etc/login.defs進行調(diào)整。
4、確認在passwd, shadow,group里沒有‘+’
使用命令grep ^+: /etc/passwd /etc/shadow /etc/group檢查。+用于NIS的數(shù)據(jù)映射配置,在passwd, shadow,group文件里存在+號,將會為攻擊者提供一個提權(quán)的途徑,應(yīng)該把它們都刪掉。
5、確認除了root外,沒有UID為0的賬戶
檢查方法:awk -F: '($3 == 0) { print $1 }' /etc/passwd
任何UID為0的賬戶都擁有系統(tǒng)的超級用戶權(quán)限,唯一的超級用戶應(yīng)該是root,而且還應(yīng)該通過非特權(quán)賬戶su來獲得權(quán)限。
6、用戶主目錄應(yīng)為750權(quán)限或者更多的限制
用戶主目錄如果有任何人可寫的目錄,可以導致別人竊取、修改數(shù)據(jù),或者獲得其他用戶的權(quán)限。對其他組成員,取消讀、執(zhí)行權(quán)限。不過在全局對用戶主目錄的權(quán)限進行修改,可能會造成服務(wù)中斷。
7、刪除User.netrc文件
find / -name .netrc
.netrc是ftp命令的初始化文件,能夠給Ftp帶來一定的方便。但文件可能包含未加密的密碼。在上出他們之前,要考慮.netrc文件的作用,因為可能會影響應(yīng)用。但是一個良好設(shè)計的應(yīng)用,不應(yīng)該使用.netrc。
8、設(shè)置默認的用戶umask值
將umask設(shè)置為077,這樣由用戶創(chuàng)建的文件和目錄不會被系統(tǒng)上任何其他人可讀。如果需要改變權(quán)限可通過chmod命令。可將uamsk命令插入到shell配置文件中來實現(xiàn),例如.profile, .cshrc, etc.等。027可讓同組人員可讀,而022的umask值可讓系統(tǒng)上每個用戶都可讀。但是,過于嚴格的umask會導致軟件的安裝問題,比如umask設(shè)置為700,那么他的應(yīng)用程序或者守護進程就無法讀取文件。所以一般umask的設(shè)置不能過于嚴格,或者在文件安裝之后再控制umask。
9、關(guān)閉核心轉(zhuǎn)儲
這個問題需要問一下你的軟件開發(fā)商們,他們是否需要調(diào)試程序,或者需要看到debug的信息?如果答案是否定的,則可以關(guān)閉。核心轉(zhuǎn)儲會大量消耗磁盤空間,并且核心轉(zhuǎn)儲會包含敏感數(shù)據(jù)。開發(fā)人員需要用這個功能來幫助調(diào)試。/etc/security下的limits.con文件是用來控制核心轉(zhuǎn)儲的開關(guān)。
10、限制root賬戶su
su命令允許你成為系統(tǒng)上的其他用戶,常常被用來作為root執(zhí)行命令。如果不希望某些用戶可以su到root,在/etc/pam.d/su下加入:
auth required pam_wheel.so
這行命令的意思是,只允許wheel組的用戶,可以su為root。其他用戶在su root的時候,會收到一條消息,說該密碼是不正確的。通過限制使用root賬戶,即使用戶知道root密碼,也無法成為root用戶,除非它能夠物理上控制這個服務(wù)器,或者他被添加到wheel組。
這樣就增加了一個安全保護層,防止未經(jīng)授權(quán)的訪問。
九、殺毒
在有些系統(tǒng)上,比如郵件服務(wù)器、文件服務(wù)器,主要是給windows用戶使用的,應(yīng)該有殺毒軟件來保護。linux平臺下的殺毒軟件有:
Sophos http://www.sophos.com/ 商業(yè)軟件
NAI Virus Scan 商業(yè)軟件
McAfee http://www.mcafee.com/ 商業(yè)軟件
ClamAV http://www.clamav.net/ 開源軟件
f-prot Antivirus 商業(yè)軟件
f-prot Antivirus http://www.f-prot.com 商業(yè)軟件
Trend Micro 商業(yè)軟件
Computer Associates InoculateIT http://www.cai.com/ 商業(yè)軟件
十、其他
1、對于危險文件創(chuàng)建符號鏈接
/root/.rhosts, /root/.shosts, /etc/hosts.equiv等文件的訪問控制很薄弱,我們在第七章里已經(jīng)討論過了,攻擊者會經(jīng)常針對這些漏洞進行攻擊,把他們鏈接到/dev/null,意味著任何數(shù)據(jù)都會被簡單的拋棄。
可以使用這個腳本:
for FILE in /root/.rhosts /root/.shosts /etc/hosts.equiv \
/etc/shosts.equiv; do
rm -f $FILE
ln -s /dev/null $FILE
done
2、打開TCP SYN Cookie的保護
SYN攻擊是一種拒絕服務(wù)攻擊,目的在于消耗系統(tǒng)資源。這個攻擊是由于TCP連接握手協(xié)議的漏洞,對方發(fā)送SYN信息,然后不再回應(yīng)。這樣的攻擊就使得系統(tǒng)與數(shù)百或者上千的連接保持半開狀態(tài)。是一個非常簡單的攻擊方法。
3、LILO/GRUB安全
給LILO和GRUB加上一個i的屬性,這樣他既不能刪除也不能修改,可以有效地防止配置文件發(fā)生任何變化(不管是意外或者其他原因)。如果想要修改,必須用chattr -i命令。
chattr +i /etc/lilo.conf
chattr +i /boot/grub/menu.lst
4、配置sudo
sudo的是一個文件包,它允許管理員授權(quán)給用戶做一些特權(quán),這些特權(quán)超出了用戶的權(quán)限,比如重啟web服務(wù)。我們舉個例子,因為你的web服務(wù)有bug或者不斷的出現(xiàn)故障,那你可能需要不斷地修改web的配置文件來讓找出問題原因。這時候如果你要用su - root的話就會非常繁瑣,因為你只是在改完配置文件之后,重啟一下web服務(wù)而已。這時候sudo就派上用場了,它允許管理員授權(quán)給該用戶權(quán)利來重啟web服務(wù)。sudo安裝之后,使用visudo來配置而不是vi配置文件,因為visudo有錯誤檢查功能。
5、刪除所有的編譯器和匯編程序
在安全上,C編譯器會構(gòu)成對系統(tǒng)可信的威脅。編譯器應(yīng)該安裝在開發(fā)系統(tǒng)的機器上,而不是一個生產(chǎn)應(yīng)用系統(tǒng)上。這里只是提醒注意檢查。檢查這些:gcc、gcc3、gcc3-c++、 gcc3-g77、gcc3-java、gcc3-objc、gcc-c++、gcc-chill、 gcc-g77、gcc-java、gcc-objc、bin86、dev86、nasm。