互聯網上有許多企業公司和組織采用Linux作為服務器平台。當這些服務器與互聯網連接以提供應用服務時,不可避免地會成為攻擊目標。本文討論Linux系統安全配置的一些基本知識,以幫助你保護Linux系統。雖然在這裡以Red Hat 6.0為例子,但也應該適用於其它Linux發行版本。 1、安裝配置系統安全的頭一步最好是在系統的開始--操作系統的安全。因為配置的是防火牆,所以你絕對不能信任任何以前的系統安裝和配置,而應該從全新安裝開始,才能真正保證系統安全的完整性。 使你的系統處於單獨(或隔離)的網絡中。決不要讓未受保護的系統連接到其它網絡或互聯網中受到可能的攻擊。按我個人的經驗,一個連接到互聯網的新安裝系統可以在15分鐘內被掃描和入侵取得完全控制權。你可能需要另一台機器從互聯網獲取重要工具和安全補丁等等,然後再從這些機器將其傳送到單獨的"配置網絡"中。 當把將要作為未來防火牆的機器放置於隔離的網絡中時,就可以開始下一步了。 第一步是選擇操作系統將要安裝的軟件包。對於Red Hat 6.0,提供了三種安裝選擇:Workstation(工作站)、Server(服務器)、Custom(定制,缺省選項)。我個人強烈推薦"定制",因為這允許你選擇添加哪些服務和硬盤如何分區。安裝策略是在維持最大化效率時進行"最小化"安裝。系統中的軟件越少,潛在的安全漏洞就會越少。例如,如果你不需要News或Real Audio Server,就不要安裝它。Linux系統有一個好處就是如果你後來改變了想法,也是很容易添加所需軟件包的。不管選擇了哪種安裝方式,手冊頁和HOWTO文檔都應該是必不可缺的。雖然可能會使系統增加一點點風險,但它們有時確實特別有用。 如果選擇了"定制"安裝,會被提示進行硬盤分區。我個人通常喜歡使根分區盡可能地大,並且把所有東西都放在那裡。然後,我們確實需要創建幾個分區以保護根分區。因為如果根分區被例如系統日志或電子郵件等數據塞滿的話,就會出現拒絕服務,甚至有可能使系統崩潰。 因此,我總是推薦為/var設置一個單獨的分區。/var是用於存放系統所有日志和電子郵件的地方,將/var分區獨立出來,就能夠有效地保護根分區被這些數據塞滿。對於許多網絡環境,為/var分區設置不少於400MB基本上就足夠了。另外可以考慮為某些特定的服務或應用創建或保留單獨的分區,特別是敏感的日志記錄。如果系統中存在不可完全信任的用戶,也許應該為/home創建單獨的分區,這樣可以避免惡意用戶輕易攻擊/根分區。對於一台獨立服務器以下是一個分區實例: / - everything else /var - 400 MB swap - (I normally go with 256 MB) 當系統安裝完成並重啟後,務必要安裝必需的安全補丁。對於Red Hat,可以到找到它的所有安全補丁程序。安全補丁對於維持一個安全的防火牆是至關重要的,應該經常保持更新。
[email protected]或[email protected]是獲取最新安全漏洞信息的最佳資源。如果不安裝這些補丁,你的系統可能會輕易入侵。記住,從上面提及的另一台機器獲取這些補丁,防火牆機器應該仍處於隔離網絡中。對於Red Hat系統,下載RPM包會使系統更新變得更簡單。例如是對wu-ftpd進行安全升級的實例: rpm -Uvh wu-ftpd-2.6.0-14.6x.i386.rpm 如果系統早已處於互聯網上,可以直接從互聯網上安裝: rpm -Uvh ftp://updates.redhat.com/6.1/i386/wu-ftpd-2.6.0-14.6x.i386.rpm 推薦使用autorpm工具保持對RPM軟件包的補丁更新。這個命令行工具分析確定哪些.rpm包需要升級,並會自動(如果你願意的話)從Red Hat的網站上下載並安裝升級文件。這個工具的使用非常靈活簡單,可以讓其在cron中運行,這樣你的系統就會定期自動檢查升級更新,並可以向管理員發送提醒系統需要升級的電子郵件。 2、關閉服務一旦安裝完系統的安裝包、補丁,重啟後,我們現在就可以開始對操作系統進行安全增強配置了。安全增強配置主要包括關閉服務、增加日志、調整幾個文件和配置TCP Wrappers。首先從關閉服務開始。缺省情況下,Solaris是一個提供許多有用服務的高性能操作系統。然而,對於防火牆來說,其中的大多數服務是不需要,且可能是安全風險。首先需要修改/etc/inetd.conf文件。這個文件定義了由/usr/sbin/inetd超級守護進程需要監聽的服務。缺省情況下,/etc/inetd.conf會啟動35個服務,然而最多僅需要兩項:ftp和telnet。其余服務都不是必需的,可以將它們注釋(關閉)。這是很重要的,因為inetd監聽的許多服務存在嚴重的安全威脅,例如popd、imapd和rsh。以下命令列出inetd守護進程會監聽的服務,請確認將其中不必要的服務的所在行注釋(行首加"#"號): grep -v "^#" /etc/inetd.conf 下一步要修改的是/etc/rc2.d和/etc/rc3.d目錄下的文件。在這裡你能夠找到被init進程執行的啟動腳本。其中也有許多是不需要的。要取消在啟動過程中執行一個腳本,只需將對應文件名的起始大寫S改為小寫s即可。此外,Red Hat系統中帶有一個好工具用以關閉服務。只要在命令行輸入"/usr/sbin/setup",然後選擇"System Services",接著再選擇在系統啟動時需要執行的腳本。另外還有一種方法就是在大多數發行版本中都帶有的chkconfig工具。以下啟動腳本是系統缺省安裝,但通常卻不是必需的。如果確定不需要它們,應該將禁止其啟動。 注意其中的數字用於決定執行的順序,在不同的發行版本中可能會有所變化。以大寫K開始的腳本用於kill已經在運行中的服務。 S05apmd (僅有筆記本電腦才需要) S10xntpd (網絡時間協議) S11portmap (如果運行RPC服務則必需打開) S15sound (保存聲卡設置) S15netfs (NFS客戶端,用於從NFS服務器安裝文件系統) S20rstatd (向遠程用戶洩露過多信息) S20rusersd S20rwhod S20rwalld S20bootparamd (用於無盤客戶端,通常都不需要) S25squid (代理服務器) S34yppasswdd (如果系統運行NIS服務器,則必需此服務) S35ypserv (如果系統運行NIS服務器,則必需此服務) S35dhcpd (啟動DHCP服務器守護進程) S40atd (at服務,類似cron服務,但系統通常不需要) S45pcmcia (僅有筆記本電腦才需要) S50snmpd (SNMP守護進程,向遠程用戶洩露過多信息) S55named (DNS服務器。如果需要運行DNS,請升級到最新版本) S55routed (RIP,僅在必需時才應該啟動) S60lpd (打印服務) S60mars-nwe (Netware文件和打印服務器) S60nfs (用於NFS服務器。除非必須,此服務不應運行) S72amd (AutoMount守護進程,用於自動安裝遠程文件系統) S75gated (用於運行其它路由協議,例如OSPF) S80sendmail (如果不需要接收或轉發電子郵件應關閉。此時仍可發送電子郵件) S85httpd (Apache服務器,建議升級到最新版本) S87ypbind (僅有NIS客戶端才需要) S90xfs (X Windows系統字體服務器 S95innd (News服務器) S99linuxconf (通過浏覽器遠程配置Linux系統)
要想在修改啟動腳本前了解有多少服務正在運行,輸入: ps aux | wc -l 然後修改啟動腳本後,重啟系統,再次輸入上面的命令,就可計算出減少了多少項服務。越少服務在運行,安全性就越好。另外運行以下命令可以了解還有多少服務在運行: netstat -na --ip 3、日志和系統調整在盡可能多地取消服務後,下一步就是配置系統日志了。所有的系統日志存放在/var/log目錄下。缺省時,Linux有不錯的日志設置,除了ftp。有兩種方法記錄ftp的日志,配置/etc/ftpaccess文件或編輯/etc/inetd.conf。建議采用相對簡單的編輯/etc/inetd.conf文件的方法。通過編輯/etc/inetd.conf文件如下,可以記錄所有FTP會話的所有日志。 ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -L -i -o --- 以下選自ftp手冊頁 --- 如果指定-l參數,syslog會記錄每一個ftp會話。如果指定-L參數,缺省時一旦ftp服務器被調用,命令日志就會激活。這將使服務器記錄下所有的USER命令。注意,此時如果一個用戶偶然性地在用戶名輸入時輸入了口令,該口令會被syslog記錄下來!如果指定-i參數,ftpd服務器接收到的文件都會被記錄到xferlog。 如果指定-o參數,ftpd服務器發送的文件都會被記錄到xferlog。 --- snip snip --- 下一步配置是系統調整。這包括了多個文件的管理。第一件事情是確保/etc/passwd文件的安全。首先要確認系統使用了/etc/shadow文件,此保存了所有用戶口令密文的文件僅允許root根用戶訪問,這可以阻止用戶口令輕易地被訪問和破解。Red Hat 6.0缺省時使用了shadow口令系統,但務必要檢查確定。只要運行以下命令,就會將口令系統自動轉換到/etc/shadow口令系統: pwconv 第二步是刪除/etc/passwd文件中許多缺省的系統帳號。Linux提供這些帳號主要是用於許多其實極少需要的系統操作。如果不需要這些帳號,刪除它們。帳號越多,系統被入侵的可能性就越大。例如"news"帳號,如果不運行nntp新聞組服務器,就不需要該帳號(注意要更新/etc/cron.hourly文件,因為腳本中涉及到了"news"用戶)。另外,一定要刪除"ftp"帳號,因為該帳號僅用於匿名FTP訪問。 我們還要修改/etc/ftpusers文件。任何被列入該文件的帳號將不能ftp到本系統。通常用於限制系統帳號,例如root和bin等,禁止這些帳號的FTP會話。缺省時Linux已創建了該文件。一定要確保root根用戶被包含在該文件中,以禁止root與系統的ftp會話。檢查並確認需要FTP到該防火牆的所有帳號**不**在/etc/ftpusers文件中。 另外,確保根用戶root不能telnet到系統。這強迫用戶用其普通帳號登錄到系統,然後再su成為root。/etc/securetty文件列出了root所能連接的tty終端。將tty1、tty2等列入該文件中,使root用戶只能從本地登錄到系統中。ttyp1、ttyp2等是pseudo(虛擬)終端,它們允許root遠程telnet到系統中。 最後,創建/etc/issue文件。該ASCII文本文件用於在所有telnet登錄時顯示的信息。當試圖登錄到系統中時,該文件中的警告信息將被顯示。在Linux系統中要修改/etc/rc.d/init.d/S99local腳本文件,以生成固定的/etc/issue文件。 因為缺省時Linu