RHEL 5上的SELinux配置
本文的主題是RHEL 5上的SELinux配置。RHEL同時(shí)提供了圖形用戶界面(GUI)和命令行兩種方式配置SELinux。為了表現(xiàn)SELinux的簡單易用,本文使用RHEL的GUI來啟用SELinux。
要從RHEL的GUI啟用SELinux,依次點(diǎn)擊系統(tǒng)(system)>管理(Administration)>安全級(jí)別和防火墻(Security Level and Firewall)。進(jìn)入SELinux選項(xiàng)卡,將SELinux設(shè)置為“允許模式(permissive mode)”,然后重啟服務(wù)器。

以允許模式啟動(dòng)SELinux是(學(xué)習(xí)配置使用SELinux的)不錯(cuò)的實(shí)踐。在這種模式下,你可以近距離感受和接觸SELinux,但不影響服務(wù)器和應(yīng)用程序/數(shù)據(jù)庫中的任何東西。測試期間,你必須仔細(xì)查看日志信息,檢查所有的警告以及所有由程序和數(shù)據(jù)庫在操作期間產(chǎn)生的拒絕錯(cuò)誤。
設(shè)置SELinux為允許模式并重啟我的RHEL后,我沒有發(fā)現(xiàn)任何不同。我以根賬戶登入系統(tǒng),然后使用sestatus命令查看SELinux環(huán)境的運(yùn)行狀況。

既然SELinux已經(jīng)啟動(dòng)并在允許模式下運(yùn)行,那么是時(shí)候?qū)ELinux進(jìn)行管理了。RHEL提供了一個(gè)GUI來進(jìn)行SELinux的策略管理,根用戶可以使用system-config-SELinux命令對(duì)這個(gè)GUI進(jìn)行初始化。該命令將打開GUI的主界面,在RHEL或Fedora Linux中你都可以看到如下的窗口:

上圖中,你可以在左邊框中找到SELinux管理的主要選項(xiàng)。第二個(gè)選項(xiàng)“Boolean”包含了SELinux管理中大部分默認(rèn)服務(wù)和進(jìn)程的布爾條件。同樣的條件也可以使用getsebool命令列出。舉個(gè)例子,如果你只想知道已有的關(guān)于ftpd守護(hù)進(jìn)程的布爾條件,那么你可以使用如下的命令:

要改變布爾條件,如allow_ftpd_use_cifs=off——該條件意味著FTP進(jìn)程不能使用cifs協(xié)議進(jìn)行公共文件傳輸——我們可以在system-config-SELinux界面中單擊“Boolean”選項(xiàng)卡下對(duì)應(yīng)的條件(條目),如下圖所示。此項(xiàng)操作將允許FTP服務(wù)使用cifs協(xié)議進(jìn)行公共文件傳輸。你可以針對(duì)ftpd進(jìn)程執(zhí)行g(shù)etsebool和grep命令,確認(rèn)剛才的操作是否生效。

使用SELinux的安全上下文保護(hù)Web服務(wù)器
假設(shè)我們想要在Linux服務(wù)器上運(yùn)行Apache Web服務(wù)器程序,由于這臺(tái)服務(wù)器會(huì)運(yùn)行一些關(guān)鍵應(yīng)用,并暴露在互聯(lián)網(wǎng)上,所以我們想確保這臺(tái)Web服務(wù)器受到盡可能多的保護(hù)。
如果你啟動(dòng)Web服務(wù)并嘗試配置你的Web服務(wù)器允許執(zhí)行某些CGI腳本,如hello.pl,那么如果不改變SELinux的配置,Linux系統(tǒng)日志和SELinux審計(jì)日志都會(huì)記錄到錯(cuò)誤。要在SELinux審計(jì)日志中查看這些錯(cuò)誤,執(zhí)行sealert –b。這會(huì)打開SELinux審計(jì)日志,如下所示:

現(xiàn)在的問題是,為什么會(huì)出現(xiàn)這種情況?答案很簡單,因?yàn)閔ello.pl是一個(gè)CGI可執(zhí)行程序,它應(yīng)該被歸為httpd_sys_script_exec_tdomain上下文,而不是httpd_sys_content_t。
我們可以使用chcon命令解決這個(gè)問題:
root@test3 cgi-bin]# ls -lZ *.pl -rwxr-xr-x apache apache root:object_r:httpd_sys_content_t hello.pl [root@test3 cgi-bin]# chcon -v --type=httpd_sys_script_exec_t hello.pl context of hello.pl changed to root:object_r:httpd_sys_script_exec_t[root@test3 cgi-root@test3 cgi-bin] # ls -lZ *.pl -rwxr-xr-x apache apache root:object_r:httpd_sys_script_exec_t hello.pl
現(xiàn)在我們應(yīng)該能夠看到,我們的Web服務(wù)器執(zhí)行了hello.pl,而且在SELinux日志中也沒有產(chǎn)生任何警告或者錯(cuò)誤。

以這種方式配置SELinux,入侵者很難通過使用未授權(quán)的CGI或perl腳本來獲得系統(tǒng)的控制。同樣地,任何想要更改文件根目錄到系統(tǒng)其他用戶的子目錄的行為都會(huì)失敗,除非該子目錄及子目錄下的索引文件已被添加到httpd域。
那么,讓我們來假設(shè),我們的Linux服務(wù)器上的用戶John創(chuàng)建了名為html的子目錄。完成該目錄和index.html文件的創(chuàng)建后,你會(huì)發(fā)現(xiàn),該目錄和文件被默認(rèn)歸入user_home_t上下文,如下所示:

直到且除非該上下文被修改為正確的httpd上下文域,否則任何試圖通過Web服務(wù)器訪問這個(gè)index.html的操作都會(huì)被SELinux拒絕,并在審計(jì)日志當(dāng)中留下錯(cuò)誤記錄。你可以使用chcon命令(如下圖)或者semanage命令來改變上下文。

原文鏈接:http://www.searchsv.com.cn/showcontent_45356.htm
【編輯推薦】