 |  | 內容: |  | 關于加固 |  | 保護引導過程 |  | 保護服務和后臺進程 |  | 保護本地文件系統 |  | 強制實行配額和限制 |  | 啟用強制訪問控制 |  | 更新和添加安全補丁 |  | 將您的安全計劃付諸實行 |  | 結束語 |  | 參考資料 |  | 作者簡介 |  | 對本文的評價 |  |
|
 | 相關內容: |  | 讓 Linux 更安全,第 1 部分:介紹 |  | 讓 Linux 更安全,第 2 部分:計劃安裝 |  | 理解 Linux 配置文件 |  | 功能豐富的 Perl: 將 xinetd 程序用于系統管理 |  | 解決 Linux 中的安全問題 |  | 服務器診所: 實用 Linux 安全性 |  |  |
|
| 如何通過一些配置保持您的系統不受攻擊
Mario Eberlein, IT 設計師, IBM Global Services Rene Auberger, 軟件 IT 設計師, IBM Software Group Wolfram Andreas Richter, IT 設計師, IBM Software Group
2005 年 5 月 15 日 學習能夠使您的 Linux?系統更能抵御攻擊的技術,包括保護引導過程和本地文件、為服務和后臺進程加鎖、強制實行配額和限制、啟用強制訪問控制(mandatoryaccess control),以及識別那些在使用新軟件更新安全設施時可能會引入的安全漏洞。本系列的 第 1 部分 介紹了安全性的概念以及潛在的威脅。第 2 部分 列出了計劃安全安裝時需要謹記的事情。 在此系列文章中,您將看到如何以一種安全的方法來計劃、設計、安裝、配置和維護運行 Linux 的系統。除了安全概念的理論概述、安裝問題、潛在的危險及其作用以外,您還將得到關于如何保護和加固基于 Linux 的系統的實用建議。我們將討論最小化安裝、加固 Linux 安裝、授權/認證、本地和網絡安全、攻擊和如何防御攻擊,以及數據安全、病毒和惡意程序。 本系列的 第 1 部分 通過給出關于安全概念和潛在危險的一般理解讓您開始上手。第 2 部分 引導您進行到下一個階段,列出當計劃一個安全安裝時需要緊記的事情,其中包括制定一個詳細的安全行動計劃。 在本部分,我們將討論加固(hardening)Linux 的步驟。 關于加固 要讓加固行動更為成功,您應該: - 在系統連接到網絡之前進行加固,以避免攻擊。
- 基于 最小權限原則(least-privilege model) 進行配置:系統應該為特定的功能只賦予其所需要的權限。類似地,用戶應該只擁有他們所需要的最小限度的權限。
在完成初步計劃并準備和執行了最小化安裝后(見第 2 部分),您需要進行一些配置步驟。這些步驟通常被稱作是加固 Linux。 - 保護引導過程
- 保護服務和后臺進程
- 保護本地文件
- 強制實行配額和限制
- 啟用強制訪問控制
- 更新和添加安全補丁
保護引導過程 配置引導加載器(LILO 或者 Grub),以令其在引導時不被任何用戶干涉;這樣就防止了用戶在引導提示時向內核傳遞參數。除非您需要遠程引導(比如在遠程的數據中心),不然就配置它讓它要求輸入密碼。這是對有可能物理上接觸機器的人的進一步防范;它可以防止某些事件的偶然攻擊,比如使用參數 single 或者 init=/bin/sh 來獲得 root shell,等等。不過,要注意,稍加努力就可以避開此防范機制(比如拆下硬盤驅動器并將其掛載到另一個系統上),除非您對文件系統也進行了加密。 對 LILO 而言,在 lilo.conf 配置文件(通常在 /etc 下)中使用參數 password 替換 prompt 。對于 Grub,相應的參數是 Grub 配置文件(通常在 /boot/grub/grub/conf 下)中的 hiddenmenu 、default 0 和 password 。 在 /etc/inittab 中添加 sp:S:respawn:/sbin/sulogin ,以確保當切換到單用戶模式時運行級的配置要求輸入 root 密碼。 防止用戶使用 Ctrl-Alt-Del 進行重新引導:在 /etc/inittab 中注釋掉 ctrlaltdel 行,禁用 ctrlaltdel 。通過向類似這樣一行(#ca::ctrlaltdel:/sbin/shutdown -t5 -rf now )添加一個井號(#),您就可以防止那個組合鍵觸發重新引導。 保護服務和后臺進程 服務的安全配置的第一個步驟是,禁用所有不需要的服務。不提供的服務不會為潛在的入侵者所利用,有效地降低了風險。 為了找出所有啟用的服務,需要檢查若干個位置。另外,要禁用不安全的服務,并使用更為安全的選擇來取代它們。例如,telnet 不是加密的,所以,使用加密的 ssh 服務來取代 telnet(見第 2 部分)。 當保護服務時,考慮這些方面: - /etc/inittab
- /etc/init.d 中的引導腳本
inetd /xinetd 后臺進程- TCP 封裝器(wrappers)
- 防火墻
/etc/inittab 在引導過程中,init 進程會去讀取 /etc/inittab 文件中的條目。每一個條目 —— 每一行 —— 都定義了在特定的條件下運行哪個程序。這些程序或者本身是服務,或者是用于啟動和停止服務。 init 進程能識別若干個稱為 運行級(run levels) (由一個字母標識)的狀態。當輸入了運行級或者發生特定的事件(比如電源故障)時,就會考察那些條目,并執行適當的命令。
/etc/inittab 中條目的格式是,前面是條目的標簽,隨后是在哪些運行級下此條目要執行,然后是動作關鍵字以及包括命令行參數的需要執行的命令。所有這些域都由冒號隔開,典型的條目應該類似這樣: my_service:35:once:/usr/local/bin/my_service someparameter
(在 inittab 手冊中可以找到動作關鍵字的完全列表。) 在這個示例中,條目的標簽是 my_service 。當輸入的運行級為 3 或 5 時,它將使用參數 someparameter 來運行程序 /usr/local/bin/my_service 。一旦這個程序被終止,它將不會再重新啟動(動作關鍵字“once”)。 為了保護 Linux 系統,您應該理解 /etc/inittab 中所有條目的功能,并禁用潛在不必要的服務,方法是刪除那個條目,或者在那一行的開頭使用井號注釋掉它。 在所有 Linux 系統中,都會有以下兩類條目。第一類用來啟動名為 /sbin/getty (或者類似的)的程序,這些通常是用來允許通過 Linux 虛擬控制臺或者串行線登錄。第二類會運行 /etc/rc.d 目錄中通常名為 rc 的腳本,并將當前運行級作為參數給出。這個腳本控制服務的啟動和停止(接下來會介紹)。 /etc/init.d 中的引導腳本 /etc/init.d 中的引導腳本用來啟動或者停止系統服務。對于每一個運行級,都有一個 /etc/rcN.d 目錄(“N”是運行級的標識),其中包含了指向那些在運行級改變時需要調用的腳本的軟鏈接。 如果鏈接名以“S”開頭,則腳本在進入那個運行級時執行,啟動相應的服務;如果以“K”開頭,則腳本在退出那個運行級時執行,停止那個服務。 大部分情況下,引導腳本的名稱會暗示它所控制的服務。要防止在特定的運行級中會啟動某個服務,則刪除運行級目錄中指向相應引導腳本的鏈接,或者使用一個不做任何事情的虛腳本取代 /etc/init.d 中原來的引導腳本。 inetd/xinetd 后臺進程 也可以在客戶機請求時根據需要調用服務。這些請求被轉交給超級后臺進程 inetd 或者 xinetd 。然后超級后臺進程確定要啟動哪個服務,并將請求傳遞到相應的后臺進程。通常,telnet、ftp、rlogin 等服務使用 inetd 或者 xinetd 啟動。 inetd 后臺進程在 /etc/inetd.conf 配置,那個文件中包含了關于每一個超級后臺進程需要提供的服務的條目。配置 FTP 服務器的條目應該類似這樣 —— ftp stream tcp nowait root /usr/bin/ftpd in.ftpd -el —— 使用井號注釋掉它,就可以禁用它。
為了安全起見,建議使用 xinetd 。與 inetd 相比,xinetd 能夠啟動基于 rpc 的服務,并支持訪問控制。xinetd 可以限制進入連接的速度、來自特定主機的進入連接的數目,或者某個服務的總連接數。 通過用于每個從屬后臺進程的獨立配置文件來配置 xinetd 。這些文件位于 /etc/xinetd.d/ 目錄中。前面 FTP 服務器的示例配置文件應該稱為 called /etc/xinetd.d/ftp,類似這樣: 清單 1. 配置文件,/etc/xinetd.d/ftp
service ftp { socket_type = stream protocol = tcp wait = no user = root server = /usr/bin/ftpd server_args = -el disable = yes }
|
為了禁用這個服務,參數 disable 被設置為 yes ,如上面示例所示。 為了更詳細的訪問控制,xinetd 支持以下三個另外的參數: only_from no_access access_time
為了限制訪問,但不完全禁用 ftp 后臺進程,您可以如下修改配置文件 /etc/xinetd.d/ftp: 清單 2. 為限制訪問而修改過的配置文件,/etc/xinetd.d/ftp
service ftp { socket_type = stream protocol = tcp wait = no user = root server = /usr/bin/ftpd server_args = -el disable = no only-from = 192.168.200.3 192.168.200.7 192.168.200.9 only-from += 192.168.200.10 192.168.200.12 172.16.0.0 no_access = 172.16. access_times = 07:00-21:00 }
|
only-from 和 no_access 可以接受數字 IP 地址(最右邊的零作為任意數值處理)、IP 地址/網絡掩碼 范圍、主機名以及 /etc/networks 中的網絡名。如果組合使用 only-from 和 no_access ,xinetd 會為每個主機連接尋找最接近的匹配。
在前面的代碼示例中,表示 IP 地址為 172.16.x.x 的主機可以連接到此主機,但地址屬于 172.16.1.x、172.16.2.x、172.16.3.x 和 172.16.10.x 的則不能連接?梢,當使用 no_access 所用的因數符號時,不需要指定地址的所有四個部分。因數部分必須是地址最右邊的部分。參閱下面的 參考資料 部分,以獲得關于 xinetd 及其配置的文章。 TCP 封裝器 如果您決定不使用 xinetd ,而是使用 inted ,那么您可以使用 TCP 封裝器來記錄請求和具體的對特定網絡的 允許/拒絕。TCP 封裝器會為了認證和記錄日志而去檢查 /etc/hosts.allow 和 /etc/hosts.deny ,并將客戶機請求封裝起來,不直接回應它們。一旦認證成功,請求就會被轉發到原來請求的服務。 相對于使用普通的 inetd ,使用 TCP 封裝器有兩個主要的好處: - 發出請求的客戶機不會察覺到 TCP 封裝器;因此,沒有異心的人不會發現任何區別,而心懷不軌的人也得不到關于他們的請求失敗的任何信息。
- TCP 封裝器的工作不會理會任何已經被封裝的服務,讓應用程序能夠共享它們的配置文件,從而簡化管理。
要獲得關于 TCP 封裝器配置文件的詳細文檔,請參閱 參考資料 中列出的 Red Hat Linux Reference Guide。 如何找到所有人都可寫的(world-writable)文件 要找出所有人都可寫的文件,使用此命令: find / -perm -002 \( -type f -o -type d \) -ls
其中: / 是搜索的起始位置。-perm 檢查權限。002 表示(八進制符號)“other”設置了寫位。- 模式 002 之前的
- 表示設置了所有權限位(沒有考慮模式中的 zero-bits)。 -type f 或者 -type d 搜索常規的文件和目錄。-ls 以 ls 格式列出找到的文件。
|
防火墻 為了防范與不應該運行的服務或者不應該被 Internet 等特定網絡所訪問的服務的通信,建議安裝一個防火墻。防火墻提供網絡間基于信任級別的受控通信,并權衡使用基于角色的安全策略和最小權限原則允許或者拒絕對特定服務的訪問。 防火墻的安裝與配置是一個非常復雜的話題,不在本系列文章的討論范圍之內。 保護本地文件系統 保護本地文件系統涉及的是文件和目錄的所有者及訪問它們的權限。要保護文件系統,文件和目錄的保護位必須設置為只授予最小限度的權限。 要特別注意關于所有人可寫的文件和系統目錄的不適當權限,以及所謂的 setuid 或者 setgid 命令。這些命令運行時的用戶權限比運行此命令的用戶實際擁有的權限更高。對訪問只有 root 才可以訪問的文件來說這可能是必需的(比如 /bin/passwd 需要訪問 /etc/passwd)。對于這些命令,要確保它們每一個都確實需要設置 setuid /setgid 位。如果不是這樣,那么禁用它。 當某個分區上的所有文件確實都不需要 setuid /setgid 位時,/etc/fstab 中的 nosuid 選項可以為相應文件系統中的每個文件都禁用它(下面的示例中的 /dev/hdc1): #devicemountpointfilesystemtypeoptionsdumpfsckorder
/dev/hda1/ext2defaults11 ... /dev/hdc1/mnt/cdromiso9660 nosuid,user12
|
此外,對于所有敏感的數據,都有必要對其進行加密并使用密碼保護它。為此,GnuPG 提供了一個合適的軟件包。 強制實行配額和限制 Linux PAM(插入式認證模塊,Pluggable Authentication Modules)可以強制實行一些實用的限制,在 /etc/security/limits.conf 文件中對此進行配置。謹記,這些限制適用于單個對話。您可以使用 maxlogins 來控制總額限制。limits.conf 中的條目有如下結構:username|@groupname type resource limit 。 為了與 username 區別,groupname 之前必須加 @ 。類型必須是 soft 或者 hard 。軟限制(soft-limit)可以被超出,通常只是警戒線,而硬限制(hard-limit)不能被超出。resource 可以是下面的關鍵字之一: core - 限制內核文件的大。↘B)。data - 最大數據大。↘B)。fsize - 最大文件大。↘B)。memlock - 最大鎖定內存地址空間(KB)。nofile - 打開文件的最大數目。rss - 最大持久設置大。↘B)。stack - 最大棧大。↘B)。cpu - 以分鐘為單位的最多 CPU 時間。nproc - 進程的最大數目。as - 地址空間限制。maxlogins - 此用戶允許登錄的最大數目。
在下面的代碼示例中,所有用戶每個會話都限制在 10 MB,并允許同時有四個登錄。第三行禁用了每個人的內核轉儲。第四行除去了用戶 bin 的所有限制。ftp 允許有 10 個并發會話(對匿名 ftp 帳號尤其實用);managers 組的成員的進程數目限制為 40 個。developers 有 64 MB 的 memlock 限制,wwwusers 的成員不能創建大于 50 MB 的文件。 清單 3. 設置配額和限制
* hard rss 10000 * hard maxlogins 4 * hard core 0 bin - ftp hard maxlogins 10 @managers hard nproc 40 @developers hard memlock 64000 @wwwusers hard fsize 50000
|
最佳的配額經驗 您應該為允許用戶寫入的每一個分區啟用配額。也要考慮到您的系統中有一些屬于應用程序的用戶 ID,而不是個人用戶。那些 ID 可能會擁有對某些目錄的寫權限,而人沒有這種權限。 向 cronjobs 添加 /sbin/quotacheck -avug ,以自動更新內核當前所使用的配額文件和表。 |
要激活這些限制,您需要在 /etc/pam.d/login 底部添加下面一行:session required /lib/security/pam_limits.so 。 配額讓您能夠限制用戶和組的 inode 數目和可用空間。注意,配額是在每個加載點上定義的,所以,如果用戶在若干個分區上有寫權限,那么要確保為它們每個都定義配額。 配額是管理員最小化 DoS 攻擊的一種方式,這類攻擊以填滿硬盤驅動器上所有可用空間為手段(這會使其他進程不能創建臨時文件而使它們失。。根據您正在使用的發行版本,您可以安裝自帶的配額工具,也可以自己下載、編譯并安裝它們(參見 參考資料)。 必須在內核中啟用配額。當前大部分發行版本都支持配額。如果您的發行版本沒有啟用配額,那么參考 參考資料 中的 mini-howto 來獲得啟用它們的說明。 要為文件系統啟用配額,您必須在 /etc/fstab 中為相應的那行添加一個選項。使用 usrquota 和 grpquota 來啟用用戶配額和組配額,如清單 4 所示: 清單 4. 啟用用戶配額和組配額
/dev/hda1 / ext3 defaults 1 1 /dev/hda2 /home ext3 defaults,usrquota 1 1 /dev/hda3 /tmp ext3 defaults,usrquota,grpquota 1 1 /dev/hda4 /shared ext3 defaults,grpquota 1 1 /dev/hdc1 /mnt/cdrom iso9660 nosuid,user 1 2
|
然后,使用 mount -a -o remount 重新掛載相應的文件系統,來激活剛才添加的選項;然后使用 quotacheck -cugvm 創建一個二進制配額文件,其中包含了機器可讀格式的配額配置。這是配額子系統要操作的文件。 使用工具 edquota 完成配額的指派。要為用戶 alice 定義限制,則使用 edquota -u alice 來調用它。環境變量 EDITOR 中定義的編輯器(默認是 vi)會打開,其中有類似如下的內容: Quotas for user alice: /dev/hda2: blocks in use: 3567, limits (soft = 5500, hard = 6500) inodes in use: 412, limits (soft = 1000, hard = 1500)
|
“in use”值只是為您提供信息,不能被修改 —— 您能修改的只是軟限制和硬限制。保存并退出編輯器后,edquota 會讀取您剛才編輯的臨時文件,并將那些值傳遞到二進制配額文件,以使您的修改生效。對組配額的編輯與此相同,只是必須使用 -g 選項而不是 -u 。 軟限制是警告級別,可以被超出,而硬限制是嚴格強制的。軟限制有一個 寬限期(grace period) (有時也稱為 軟性時間限制(soft time limits));這是允許用戶超出軟限制直到被系統強制執行之前的時間間隔。 您可以使用 edquota -t 來設置寬限期?梢允褂玫膯挝皇敲、分、小時、天、周和月。其他管理配額的實用工具包括 repquota (總結某個文件系統的配額)、quotaon 和 quotaoff (打開和關閉配額)。 啟用強制訪問控制 通過 SELinux 所實現的強制訪問控制(或者說是 MAC),您可以獲得進一步的安全性。使用 MAC,操作系統中的許可由進程所屬的 用戶/組 ID 以及正要被訪問的對象(文件)所屬的 用戶/組 ID 來管理。另外,使用 MAC,Linux 會強制為每個單獨的進程執行這些策略,它們會控制進程可以做什么事情。 那樣,在使用 MAC 進行適當配置的系統中,被外來控制或攻擊的服務不能夠接管系統。就算是進程運行所屬的用戶或組 ID(最壞的情形:root)可能會與 /etc/passwd 等關鍵系統文件權限相匹配,那個策略也會及時地禁止對它們的訪問。 Internet 上的測試系統可以展現出 SELinux 的有效性,它允許任何人登錄;控制機制防止了所有的惡意行為,即使用戶能夠以 root 身份登錄! 添加提供商 GnuPG 密鑰 發行版本提供商 GnuPG 密鑰應該已經是基本配置的一部分。您可以使用這個命令添加您所信任的第三方提供商的密鑰:$ rpm -import <keyfile> 。 您應該確保是以安全的方式獲得密鑰文件,例如,通過 HTTPS 從提供商的 Web 站點上下載,這樣您可以校驗連接的證書。 |
不過,使用 SELinux 也有一些問題。首先,如果發行版本提供商不支持 MAC,那么其配置是相當困難的?赡苄枰蜓a丁和重新編譯內核,并替換特定的系統管理工具(所有這些都可能影響發行版本提供商的支持策略)。第二,定義一個適當的策略是非常復雜的任務。如果沒有可用的策略定義供您的應用程序選擇,那么在 MAC 環境中制定并實施這個策略會非常艱難。這就使得對某些使用情形來說這樣做比較困難,比如需要支持種類很多的軟件包的桌面工作站。 更新和添加安全補丁 為了讓系統盡可能保持安全,您需要及時了解用于您的軟件的新修訂和補丁。這些信息可以通過若干個渠道得到,不過,通常軟件提供商和 Linux 發行商應該為您及時地提供這些信息。您也可以使用(幾乎永遠免費)CERT(Computer Emergency Response Team)的服務。他們通常會維持傳達關于最新的建議、漏洞等信息的郵件列表。 當有新的更新可用時,您應該去查看它是否適用于您的系統以及您的安全需要。安裝更新本身可能會導致安全問題。另外,要考慮到每個更新都可能會引入新的漏洞,或者如果更新失敗,您的系統可能會停留在不可用的狀態。 當在大范圍的系統中安裝某個更新時,您通常不能同時對它們全部進行更新 —— 這可能會導致您的多個系統在更新期間互相不兼容。 可見,更新系統會涉及到很多風險。這里是降低這些風險的一些建議: - 初始安裝后,不要將您的系統立即連接到網絡。將所有相關的更新下載到一臺單獨的機器,然后手工地傳輸它們,以確保系統在暴露在網絡上之前已經處于當前狀態(current state)。
- 始終擁有可用的近期系統備份。
- 對于業務中每一個關鍵的系統,您都應該有一個與產品環境的硬件和軟件相同的獨立測試環境。首先在測試環境中獲得關于更新的經驗,以防止在管理產品系統時出現意外。
- 理想情況下,您應該已經準備好一套回歸測試,在更新包括系統在內的所有程序之前和之后對適當的功能和性能進行對比。至少,要確保擁有可重復的而且文檔化的質量控制檢查,以保證在修改產品環境之前測試環境中的主要功能和服務不會受到影響。
- 對于小型網絡來說,手工安裝更新或許可行,但規模較大時很快就難以處理了。這經常會導致更新不能被安裝。使用商業的或者開放源代碼的系統管理或者軟件分發工作來簡化更新的部署。
- 我們是不是提醒過您最好在手邊準備一個備份?我們還要再提醒一次。
- 制定一個安裝更新的計劃,并考慮:
- 更新系統的次序
- 對您的業務來說關鍵的系統
- 系統如何互相依賴
- 哪個系統包含機密數據
- 當使用完整性檢查工具時(強烈建議至少對服務器使用),為了能識別出意外的更改,要記得更新系統在已知安全狀態下占用內存的基線。
- 在安裝任何修訂之前,要使用密碼檢驗和工具檢查軟件的完全性和真實性(尤其是從 Web 站點或者 ftp 服務器上下載時)。在 Linux 領域中,通常使用 MD5 和/或 SHA-1 檢驗和。如果軟件以 RPM 包的形式提供,那么提供商應該已經提供了一個 GnuPG 簽名。您可以運行
$ rpm -v --checksig <name>.rpm 命令來檢查它。成功的響應應該是 "<name>.rpm: md5 gpg OK" ;不成功的會是 "<name>.rpm: md5 GPG NOT OK" 。您可以使用 $ md5sum <name>.rpm 或 $ sha1sum <name>.rpm 來確認 MD5 或 SHA-1 檢驗和。如果您下載的某個文件中包含的檢驗和可用于多個文件(大部分情況下稱為 md5sum.asc 或 <name>.md5),那么您可以使用 $ md5sum -c md5sum.asc 。
- 最后,但不是最不重要的是,要備份您的系統。(我們是不是已經說過了?)
將您的安全計劃付諸實行 如本系列 第 2 部分 中所討論的,現在來將文檔化的安全計劃應用到已經安裝的系統。弄清楚哪些進程正在您的系統中實際地運行,并禁用不需要的那些。要定期地檢查不正常的行為;未知的進程可能會提供不必要的服務,預示著系統的受損。 本節向您介紹如何找出并禁用那些不必要的(潛在危險)進程,以及如何為系統準備定期審計。 找出并禁用不必要的進程 理想情況下,您應該明白在您的系統中運行的每一個進程。要獲得所有進程的列表,可以執行命令 ps -ef (POSIX 風格)或 ps ax (BSD 風格)。進程名有方括號的是內核級的進程,執行輔助功能(比如將緩存寫入到磁盤);所有其他進程都是使用者進程。您會注意到,就算是在您新安裝的(最小化的)系統中,也會有很多進程在運行。熟悉它們,并把它們記錄到文檔中。 網絡監控工具 這些工具可以幫助進行網絡監控: - Nmap(Network Mapper)是一個免費的開源工具,可用于網絡探察和安全審計。完成安裝和設置后使用它來檢查您的系統。
- IPTraf 是一個用于 Linux 的基于控制臺的網絡統計工具。它收集各種數據,比如 TCP 連接數據包和字節計數、接口統計和活動指示器、TCP/UDP 傳輸衰減、局域網工作臺數據包和字節計數。
- Multi Router Traffic Grapher(MRTG)是一個用于監控網絡鏈路上傳輸負載的工具。MRTG 會生成包含圖形的 HTML 頁面,為此傳輸提供生動的可視化描述。參見 MRTG 索引頁 上的示例。
|
現在讓我們來看那些開放網絡連接的進程;它們受到攻擊的潛在可能最大。要獲得所有 TCP 或 UDP 連接的列表,執行命令 netstat -atu (附帶名字解析,易讀)或者 netstat -atun (沒有名字解析,更快)。在這個列表中,特別要注意狀態為 LISTEN 的 TCP 連接和所有的 UDP 連接,因為服務器通過這些連接來接收到來的連接。 如果服務器偵聽 127.0.0.1/localhost,那么它只能由系統本身(環回接口)訪問到。因此它的暴露程度要遠低于偵聽外部可達接口甚至 0.0.0.0(= *,如果打開名字解析)的服務器,后者可以由任意網絡接口所訪問。 如果您使用過 netstat -atun ,那么您需要自己翻譯端口號?梢栽 /etc/services 中去查找它們。使用附加的參數 -p 來顯示相應的進程,如 清單 5 所示。 在這個示例中,您可以推斷出 portmapper 和 graphical user interface(X)是特定的服務器所不需要的。portmapper 為 NFS 等各種基于 RPC 的服務提供標準端點(endpoint);系統并不提供 NFS 共享。當系統用作工作站時 X 窗口是有用的,但在服務器上的使用受限。 確定這些進程是如何被啟動的(通過 /etc/inittab,通過引導腳本,等等)并如前所述的那樣禁用它們。如果程序是由另一個程序啟動的,那么這項任務可能會更具挑戰性:X 服務器很有可能是由顯示管理器啟動的,比如 xdm、kdm 或 gdm,其本身并不會出現在 inittab 或引導腳本目錄中。 netstat 所列出的連接并不是自動都可以由網絡上的所有計算機來使用。在任何數據包到達開放的連接之前,基于 Linux 內置功能的防火墻可以進一步控制訪問。 審計準備 安裝了基本的系統并安全地配置后,您的最終目標是保持系統的安全。為了識別出對系統的不必要修改,使用審計工具來記錄處于希望是已知且安全的狀態的系統的內存占用,并檢測對它的修改。 結束語 本期文章向您展示了如何加固您的 Linux 系統,即通過保護引導過程和本地文件系統、鎖定服務和后臺進程、強制實行配額和限制、啟用強制訪問控制、找出在使用新軟件版本更新安全性時可能會引入的安全漏洞。當配置安全性參數時,請遵循最小權限原則的概念。另外,要了解在您的系統中運行的 所有 進程,以使得您可以禁用不需要的那些,防止它們成為進入到您的 Linux 環境安全心臟的途徑。 下一期將深入研究 SELinux,為您給出關于如何使用它的概念資料和實踐資料。 參考資料 - 您可以參閱本文在 developerWorks 全球站點上的 英文原文。
- 閱讀 developerWorks 上此 讓 Linux 更安全 系列的其他各期文章。
- “解決 Linux 中的安全問題”(developerWorks,2001 年 6 月)為您給出了一個關于提供安全的 Linux 環境的全面概述和資源指南。
- “服務器診所: 實用 Linux 安全性”(developerWorks,2002 年 10 月)強調指出有效的安全首先要有有效的用戶管理。
- developerWorks 上的 安全編程 專欄是一個正在發展中的系列,致力于幫助您為 Linux 編寫安全的程序。
- LinuxLinks 的 安全發行版本列表 是一個已經加固的 Linux 發行版本的列表。
- ?leen Frisch 撰寫了一個關于 加固 Linux 系統 的專欄 —— 也在這個 hardening checklist 中。
- Linux Security HOWTO 是對 Linux 系統管理員所面臨的安全問題的全面概述。
- Jerry Peek 的 Sharing Files (Carefully) 提供了對 Linux 文件系統權限的全面理解。
- comptechdoc.org 提供了兩篇關于 inetd 的極好的文章:Inetd Services 和 Inetd and Network Services。
- LinuxPlanet 教程 Controlling Access to Your Services with xinetd 介紹了 xinetd,它是 inetd 的“安全”替代者。
- Red Hat Linux Reference Manual on TCP Wrappers 是關于 TCP 封裝器和 xinetd 的極好資源。
- IBM study tests Linux security (z+xSeries) 是一項計劃部署并比較各種開源安全工具的為期三個月的研究,基于研究過程中的經驗提供解決方案建議。
- Quota mini-HOWTO 描述了如何在 Linux 主機上啟用文件系統配額。
- 下面的資源可以幫助您了解 SELinux:
- SELinux History and Project FAQ
- SELinux unofficial technical FAQ
- SELinux play machines
- Writing a SELinux policy
- 在 developerWorks Linux 專區 可以找到更多為 Linux 開發者準備的參考資料。
- 通過參與 developerWorks blogs 加入 developerWorks 社區。
- 購買 Developer Bookstore Linux 區 打折出售的 Linux 書籍。
- 定購免費的 SEK for Linux,這套 DVD (兩張),包含了來自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的用于 Linux 的最新 IBM 試用軟件。
- 使用可以直接從 developerWorks 下載的 IBM 試用軟件 來改革您的下一個 Linux 開發項目。
作者簡介
Mario Eberlein 是一名致力于商務應用程序的 IT 架構師。他于 1998 年 10 月加入 IBM,當前在 IBM Global Services 從事客戶項目的工作。Mario 擁有科學學士學位,當前正在攻讀 Business Administration 碩士學位,并且具有 7 年的 Linux 經驗。他是 EMEA Central Region 的 IBM Linux Security Workgroup 的領導。您可以通過 m_eberlein@de.ibm.com 與 Mario 聯系。 |
Rene Auberger 是 IBM Software Group 的一名軟件 IT 設計師。他主要與來自德國的公共部門(一個對 Linux 有濃厚興趣的客戶)的客戶一起工作。1996 年 Rene 開始從事 Linux 方面的工作,從那里起就以各種形式為了不同的目的而使用 Linux。他是德國、奧地利和瑞典的 Software Group 的 Linux 專業領導,您可以通過 rene.auberger@de.ibm.com 與 Rene 聯系。
|
Wolfram Andreas Richter 是 IBM Software Group 的一名商務集成顧問和 IT 專家。自 1995 年加入 IBM 起,Wolfram 已經涉足了很多學科領域,范圍從應用程序開發到管理教育。他有 8 年的 Linux 經驗,擁有德國斯圖加特 University of Cooperative Education 的科學學士學位,以及英國 Henley Management College 的 Business Administration 碩士學位。在業余時間,Wolfram 喜歡進行運動、騎摩托車和外出。您可以通過 wrichter@de.ibm.com 與 Wolfram 聯系。
|
|