Linux常見安全策略與實踐
操作系統的安全問題是信息安全領域最重要和最基本的問題之一。隨著近幾年國內互聯網技術和行業的迅猛發展,采用Linux網絡操作系統作為服務器的用戶也越來越多。Linux面臨著前所未有的發展機遇,同時Linux也面臨著越來越多的安全隱患。作為一個開放式系統,互聯網上有大量的Linux版本的開源軟件產品和工具。這既方便于滿足用戶使用需求,也給黑客提供了更多的途徑來攻擊服務器,甚至盜取服務器上的機密信息。因此,詳細分析Linux系統的安全機制,找出它可能存在的安全隱患,給出相應的安全策略和保護措施是十分必要的。
Linux操作系統提供了基本的安全機制。本文以Red Hat Enterprise Linux Server release 6.7為例介紹這些安全機制的基本原理及實施方法,主要包括以下內容:
- 系統帳號和密碼管理
- Linux網絡安全
- 文件系統的安全
- 系統日志的保存
- 內核更新及安全補丁安裝
1. 系統帳號和密碼管理
賬戶和密碼可以說是操作系統安全的第一道防線。其中賬戶用來確認系統訪問者的身份,密碼可以驗證系統訪問者是否有權使用此賬戶。密碼泄露就像是房門鑰匙被人竊取一樣危險。系統一旦被入侵,不只對使用者賬戶本身有影響,系統內的所有資料和文檔都有被竊取和損壞的風險,從而造成巨大的損失。所以,管理員應該采取必要的技術手段強制用戶使用強密碼并定期更改,定期驗證系統中賬號合法性,及時刪除不必要的賬戶、防止超級用戶被篡改等,保證系統用戶賬號和密碼的安全。
1.1. 及時刪除或禁用無用賬戶
Linux系統中所有的賬戶都存放在/etc/passwd文件中。系統管理員可以定期監控/etc/passwd文件,驗證系統中活動賬戶的合法性,及時刪除或禁用系統中不必要或不再使用的賬戶。此類賬戶主要分為以下兩種情況。
- 某些服務安裝時默認創建的執行賬戶,比如ftp、news、postfix、apache、squid等。
- 無人使用或者無業務需求的賬戶。
此類賬戶最好做刪除處理。如下示例所示:
如果因為特殊原因需保留賬戶,可以鎖定賬戶或者修改賬戶登錄shell為/sbin/nologin。如下示例所示:
1.2. 設置密碼復雜度策略
現在的計算機的計算能力越來越強,弱密碼很容易被破解。Linux有自定義密碼復雜度策略的機制,可以從以下幾個方面加強管理。
- 最短密碼長度為8。
- 包含一個字符或非字符(數字、標點或特殊字符)。
- 密碼中不允許包含賬戶。
- 每隔90天修改一次密碼。
- 密碼最短生命周期設置為1,防止惡意更改密碼。
- 8次修改密碼不可以重復并且加密保存。
- 連續5次輸入錯誤密碼,鎖定賬戶。
- 初次登錄強制修改密碼。
具體實現方式,如以下示例所示:
1.3. 保護shadow密碼文件
Linux中賬戶密碼叫做影子文件,存放在/etc/shadow里面。如果在/etc/pam.d/system-auth中設置了加密存儲,那在/etc/shadow中看到的將是加密后的密碼信息。雖然經過了加密處理,但這些加密信息仍然可以借助一些密碼破解程序進行強制破解。John the Ripper就是這樣的一個密碼破解程序,該程序的源代碼可以從http://www.openwall.com/john/網站上下載。經過實驗,通過John程序可以輕易的破解shadow中的加密密碼。所以系統管理員應保護好shadow文件,正常情況下應只有root用戶擁有該文件的訪問權限。此外,管理員不該在有其他人員在場的情況下隨便打開shadow文件,以免其中的內容被人竊取。
1.4. 防止root賬戶被篡改
在Linux系統中root賬戶是超級管理員賬戶。它可以執行所有的系統的命令,也具有系統中最高的權限。而且Linux系統中只有一個root超級賬戶。但是在Linux系統中,用戶是由UID來區分,而不是賬戶名。如果把一個普通賬戶的UID修改為0,即root賬戶的UID,則這個普通賬戶也將獲得root相同的超級管理員權限。如果這種賬戶,沒有經過正常的審批流程,或者不是系統管理員設置,這種賬戶很有可能是非法入侵者更改的。所謂管理員,應及時發現這種非法賬戶,并作相應的處理。
2. Linux網絡安全
相比于其它的操作系統,Linux操作系統更加安全和穩定,所以經常被用作網絡應用服務器。但是由于程序代碼的缺陷的難以避免,這些安裝在Linux系統上的網絡應用程序往往會存在著各種漏洞,而入侵者則是利用這些漏洞進行網絡攻擊,進入系統竊取數據、破壞系統或者使系統無法提供正常服務等等。針對入侵者進行網絡攻擊的常用手段,及早發現系統中的網絡安全漏洞并執行相應的防范措施非常重要。
2.1. ping入侵
ping是入侵者確認服務器是否開機的最快、最常用的方法。ping命令會發出一個ICMP echo請求,服務器接收到請求后會返回一個ICMP應答。Linux服務器管理員可限制服務器禁止其它用戶Ping。同時又保證Linux服務器又可以Ping其它服務器。
2.2. 端口安全
TCP/IP的各種Linux應用服務基本上都是采用服務器/客戶端的工作模式,這些服務在服務器端會監聽一些固定的服務端口,接受來自客戶端的請求。而入侵者往往會利用各種端口掃描工具對目標主機的端口進行探測和掃描。獲得目標主機上的服務和端口列表以后,入侵者就可以針對不同服務的漏洞進行相應的攻擊。為了阻止入侵者對主機端口的掃描。管理員可以采取以下措施:
- 關閉不必要的應用服務;
- 修改應用服務的默認端口。例如更改FTP服務的端口為31,那么即使入侵者獲得該端口號,也無法確定該端口號對應的是什么服務;
- 開啟防火墻,限制用戶訪問相應的服務端口。這樣,即使應用服務的端口泄漏,非法訪問也會被擋在防火墻之外。
2.3. 拒絕攻擊
拒絕攻擊是一種消耗服務器可用資源的攻擊方式,這些資源包括進程數、磁盤占用、CPU時間或者網絡帶寬等,被攻擊的服務器將會出現資源被不斷消耗的情況,最終喪失應用服務的能力。在Linux系統中提供了一種限制用戶資源使用的技術手段,管理員可以通過設置/etc/security/limits.conf的配置參數,限制用戶對內存空間、CPU時間以及進程數等資源的使用。防止負荷過載造成服務器宕機。用戶可以執行命令ulimit -a查看自己的的資源限制情況。
2.4. 加強Xinetd的安全
Xinetd是Linux系統一個傳統的網絡服務守護進程,它可以同時監聽多個制定的端口,在接收到用戶請求時,根據用戶請求端口的不同,啟動相應的網絡服務進程來處理這些用戶請求。因此,Xinetd也常被稱為“超級服務器”。像Telnet、rlogin、rcp、rsh等不安全網絡服務就是通過Xinetd進行啟動的。為了減少系統潛在漏洞,應該關閉Xinetd中無需使用的網絡服務。
可在xinetd的配置文件進行服務的禁用。
如果所有的Xinetd服務都已經禁用,那么就沒有必要再運行Xinetd。要禁止Xinetd啟動運行,可執行:chkconfig –level 345 xinetd off。
3. 文件系統的安全
Linux文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有文件系統的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。Linux文件系統的權限必須進行嚴格的控制,一個配置文件上的配置錯誤,比如不正確的文件權限,就可能會導致整個系統受到危害。
3.1. 全局可讀/寫文件
所謂全局可讀寫文件,是指所有用戶都有權限查看和修改的文件。如果這些文件中保存有重要的機密信息,如用戶口令,那么將可能會為系統帶來嚴重的后果。因為入侵者在獲得本地用戶權限之后,往往會去搜索系統中包含有某些關鍵信息的全球可讀文件以擴大他們的訪問權限。用戶用find命令可以搜索全球可讀寫文件#FormatImgID_20#。
管理員應定期使用find命令檢查系統中的全局可讀/寫文件。對于一些保存有重要信息的文件是不應該設置全球可讀/寫的。
3.2. 無宿主的文件管理
正常情況下,系統中的每一個文件都會有自己的文件所有者和屬組。如果系統中出現沒有所有者或屬組的文件,那么很可能是卸載程序后遺留或是由入侵者留下的。這些文件對于系統來說,是一個潛在的風險,所以應該及時把這些文件找出來,刪除或者更改訪問權限。
Linux的設備以文件的形式存放在/dev/目錄下,所以這些文件的權限控制同樣非常重要。例如,IDE硬盤在Linux中對應的設備文件為/dev/hdx,如果這些文件的權限被設置為全球可讀,那么所有用戶都可以通過一些命令讀取硬盤中所有的內容。用戶可以通過mount命令,查找出所有與目前掛載的文件系統相關的設備文件。此外,對于像/dev/console、/dev/dsp以及/dev/tty*等的設備文件也同樣需要重點關注,并定期檢查其權限設置。
3.4. 硬盤分區
惡意占用磁盤空間是造成拒絕攻擊的一種形式。由于Linux應用系統在運行過程中都會產生新的數據或文件。如果磁盤空間不足,會造成這些新的數據或文件無法保存。最后導致服務掛起,達到拒絕服務的目的。磁盤分區的合理規劃,可以有效的防止這種惡意攻擊。
- 利用Linux的磁盤配額管理,限制每個用戶的磁盤空間大小。
- 重要的文件系統掛載到單獨的磁盤分區上。例如:/; /boot/; /var/; /hone/; /tmp/。
- 劃分單獨的系統分區保存應用數據。
3.5. 設置grub密碼
如果能接觸到服務器主機,就算不知道root密碼,攻擊者可以重啟機器通過單用戶模式重置root密碼。那么服務器中的數據就會完全暴露給攻擊者。為了防止這種情況,可以考慮在grub上設置密碼。Linux每次重啟引導或更改grub配置時都要求輸入正確的密碼。
首先要生成MD5加密的密碼信息。
3.6. 限制su切換
通過su命令,普通用戶可以切換到其他用戶的環境包括超級管理員root賬戶的環境。可以通過限制su命令執行權限的方式降低普通用戶獲得管理員權限的風險。需要su權限的用戶,可以單獨放到一個group里,例如wheel。
4. 系統日志的保存
日志對于安全來說非常重要。日志里面記錄了系統每天發生的各種各樣的事情。可以通過日志來檢查系統發生錯誤的原因,或者系統遭受攻擊時留下的痕跡。日志的功能主要有:審計和監測。日志也可以實時的監測系統狀態,監測和追蹤入侵者。
4.1. 賬戶登錄記錄
使用who命令可以查看當前已經登錄操作系統的用戶信息,這些信息包括用戶名、登陸時間、客戶端的IP地址等。管理員可以隨時查看登錄系統的用戶是否合法、客戶端的IP地址是否合法。
Linux系統的用戶登錄歷史信息被分別保存在/var/log/wtmp和/var/log/btmp文件中,其中/var/log/wtmp保存了用戶成功登錄的歷史信息,而/var/log/btmp則保存了用戶登錄失敗的歷史信息。這兩個文件不是ASCII文件,所以必須分別要通過last和lastb命令來查看。
4.2. secure日志中的安全信息
該日志文件記錄與安全相關的信息。用戶驗證、su切換以及與用戶管理相關的日志信息都會寫到/var/log/secure文件中。打開/etc/syslog.conf配置文件可以看到此日志文件的設置,如“authpriv.* /var/log/secure”。如果系統有非法用戶登錄,可以通過查看此日志文件跟蹤非法用戶的信息。
4.3. message日志中的安全信息
messages 日志是核心系統日志文件。它包含了系統啟動時的引導消息,以及系統運行時的其他狀態消息。IO 錯誤、網絡錯誤和其他系統錯誤都會記錄到這個文件中。其他信息,比如某個人的身份切換為 root,也在這里列出。如果服務正在運行,比如 DHCP 服務器,您可以在 messages 文件中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的文件。
4.4. cron日志中的安全信息
該日志文件記錄crontab守護進程crond所派生的子進程的動作,前面加上用戶、登錄時間和PID,以及派生出的進程的動作。CMD的一個動作是cron派生出一個調度進程的常見情況。REPLACE(替換)動作記錄用戶對它的cron文件的更新,該文件列出了要周期性執行的任務調度。RELOAD動作在REPLACE動作后不久發生,這意味著cron注意到一個用戶的cron文件被更新而cron需要把它重新裝入內存。該文件可能會查到一些反常的情況。
4.5. history日志中的安全信息
默認情況下,在每個用戶的主目錄下都會生成一個.bash_history的日志文件,在該文件中保存了用戶輸入的所有命令,管理員可以通過該文件查看某個用戶登陸系統后進行了什么操作。
4.6. 日志文件的保存
日志文件是追蹤黑客行為和取證的重要線索,一個有經驗的黑客在入侵完系統后一般都會清除日志文件的內容,抹去自己的入侵痕跡。所以為了提供日志的安全性,可以定期對系統中重要的日志文件進行備份,并通過FTP或其他網絡手段把備份文件上傳到其他的備份服務器上保存,以作為日后跟蹤和分析黑客行為的依據。
5. 內核更新及安全補丁安裝
系統補丁,就是通過安裝相應的補丁軟件,補充系統中的漏洞,把“漏水”的地方補上,杜絕同類型病毒的入侵。作為系統管理員,及時發現并安裝新的補丁對保證系統安全非常重要。對于redhat,用戶可以在RHN上進行注冊,注冊后可以獲得Red Hat最新的軟件包和補丁。如果有公司內部的補丁源服務器,可以在目錄/etc/yum.repos.d/添加相應的補丁源配置文件。用戶可以執行yum update 命令升級安裝補丁包。
6. 結語
要保證Linux系統的安全,系統管理員必須綜合利用它提供的各種安全工具和技術,制定合理有效的安全策略。有效的安全策略應在安全成本、安全效益和本單位實際的安全需求之間實現平衡,在實際應用中制定嚴格的安全管理措施,按照安全管理措施和安全策略進行系統和安全的管理,才能保證系統的高可用性。
Linux系統安全工作是防守和進攻的博弈,是保證信息安全,工作順利開展的奠基石。及時,準確的審視自己信息化工作的弱點,審視自己信息平臺的漏洞和問題,才能在 這場信息安全戰爭中,處于先機,立于不敗之地。只有做到自身的安全,才能立足本職,保證公司業務穩健的運行,這是信息時代開展工作的第一步。