引言:網(wǎng)絡(luò)安全的問題日趨嚴峻,各種網(wǎng)絡(luò)應(yīng)用不得不越來越多地考慮安全問題。Linux作為互聯(lián)網(wǎng)上應(yīng)用得最廣泛的一種操作系統(tǒng),對安全問題也極為重視,并且隨著內(nèi)核的不斷升級,其安全性能也在不斷提升。
隨著Linux內(nèi)核不斷升級,其安全性能也在不斷提升。在內(nèi)核2.6及以后版本中增加的SELinux安全機制,更是添加了一道安全屏障。以vsftpd為例,vsftpd是提供FTP服務(wù)器的軟件,由以下三級安全策略來進行控制。
第一級安全控制是服務(wù)器的配置文件,即/etc/vs ftpd/vsftpd.conf。其中相應(yīng)配置項決定了哪些用戶能登錄,哪些不能登錄以及用戶登錄后能進行哪些操作。
anonymous_enable和local_enable兩個配置項分別控制著匿名用戶和本地用戶是否能登錄服務(wù)器。匿名用戶和本地用戶默認登錄點分別/var/ftp和用戶自己對應(yīng)的家目錄,登錄成功后默認的權(quán)限是只讀,即能從登錄目錄下完成資源下載。
如果要實現(xiàn)文件上傳、創(chuàng)建目錄等寫權(quán)限,還必須設(shè)置write_enable、anon_upload_enable和anon_mkdir_write_enalbe等 配置項。其中,write_enable控制著所有形式的寫開關(guān),如果是本地用戶登錄系統(tǒng)打開這個開關(guān),用戶即擁有所有形式的寫權(quán)限;如果是匿名登錄用戶,則還必須打開anon_upload_enable開關(guān)才能上傳文件,打開anon_mkdir_write_enalbe開關(guān)才能在主目錄下創(chuàng)建目錄。
僅僅考慮配置文件所設(shè)置的權(quán)限還不夠,在應(yīng)用過程中還應(yīng)兼顧登錄主目錄本地權(quán)限設(shè)置。如果本地權(quán)限相應(yīng)的用戶組沒有相應(yīng)權(quán)限,則登錄用戶仍然不能完成相應(yīng)的功能。
如在打開了配置文件中的write_enable和anon_mkdir_write_enable開關(guān)情況下,匿名用戶的登錄主目錄下的pub目錄的權(quán)限列表:dr-xr-xr-x5root root 4096 05-05 10:53 pub。
匿名的FTP用戶劃分到 了others組,由權(quán)限列表可知,F(xiàn)TP用戶對該目錄不具有寫權(quán)限,當進入該目錄執(zhí)行創(chuàng)建目錄的寫操作時,出現(xiàn)如下提示,說明創(chuàng)建目錄的動作失?。?/p>
若要成功創(chuàng)建目錄,需修改pub目錄權(quán)限為others組可寫:drwxrwxrwx5root root 4096 05-05 10:53 pub。
再到該目錄下可創(chuàng)建子目錄。可見配置文件的訪問權(quán)限設(shè)置項必須與登錄點的本地權(quán)限結(jié)合才可以讓登錄用戶有相應(yīng)操作權(quán)限。
以上兩級安全控制都屬于DAC(自主存取控制)范疇,即根據(jù)程序運行時的身份來決定其權(quán)限,對于通過setuid/setgid的程序就會產(chǎn)生嚴重的安全隱患,甚至一些錯誤的配置可引發(fā)巨大漏洞。在此情形下,SELinux應(yīng)運而生。
SELinux依據(jù)條件決定是否有存取權(quán)限。即使是root用戶,在使用不同程序時,所能取得的權(quán)限也未必是最高的,而要依據(jù)當時該程序的設(shè)定而定。這樣可以規(guī)范個別細致的項目進行存取控制,提供完整的徹底化規(guī)范限制。
SELinux的應(yīng)用將Linux的安全級別由C2級提升到了B1級。SELinux策略分為目標(targeted)策略和多層(MLS)策略,下面以目標策略為例來看SELinux如何保護FTP服務(wù)器上的資源。
在開啟SELinux策略,并且,F(xiàn)TP服務(wù)器的配置文件及登錄主目錄的本地權(quán)限允許匿名寫情況下,以匿名方式登錄FTP服務(wù)器并嘗試創(chuàng)建目錄,則出現(xiàn)之前創(chuàng)建目錄失敗的提示。進一步,查看目錄/var/log下的日志文件messages中的相關(guān)信息,得到如圖1的提示信息。
圖1 日志文件提示信息
圖2 共享目錄默認的SELinux權(quán)限
圖3 SELinux提示信息
日志文件中的提示信息說明 :SELinux策略阻止了FTP進程對共享目錄的寫操作,要想獲取完整的信息,運行sealert -l 0841a6cd-b35b-4859-908c-23df68777b55命令。
首先,用命令ls -lZ來看看默認的共享目錄/var/ftp默認的SELinux權(quán)限,結(jié)果如圖2所示。
共享目錄/var/ftp默認SELinux策略是系統(tǒng)public_content_t,即系統(tǒng)進程的只讀權(quán)限。
按照圖1的提示運行命令。將執(zhí)行結(jié)果的關(guān)鍵信息截取如圖3所示。詳細信息進一步說明,因ftpd進程對共享目錄沒有匿名寫權(quán)限,以上的寫操作則被當作一個入侵的企圖。要想讓ftpd進程對該目錄有寫權(quán)限,應(yīng)該改變共享目錄上下文為public_content_rw_t,并設(shè)置allow_ftpd_anon_write布爾值為1。改變上下文的命令為chcon –t public_content_rw_t
依據(jù)以上提示命令對共享目錄的SELinux策略進行修改,再以匿名登錄FTP服務(wù)器,然后創(chuàng)建目錄的寫操作,則可成功創(chuàng)建。
以上的操作都是匿名方式下在默認共享目錄/var/ftp中進行,如果在配置文件中通過配置項anony_root改變了匿名帳號的登錄點,則必須要改變目錄的上下文為 public_content_t(登錄后只讀)或public_content_rw_t(登錄后讀寫)。若是本地用戶登錄至個人家目錄,還需用命令setsebool -P ftp_home_dir=1來修改上下文的布爾值,讓用戶能通過FTP進程登錄至家目錄。