10.3 SELinux安全子系統(tǒng)

2023-05-12 10:23 更新

SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區(qū)的幫助下開發(fā)的一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統(tǒng)。RHEL 7系統(tǒng)使用SELinux技術(shù)的目的是為了讓各個服務(wù)進程都受到約束,使其僅獲取到本應(yīng)獲取的資源。

例如,您在自己的電腦上下載了一個美圖軟件,當您全神貫注地使用它給照片進行美顏的時候,它卻在后臺默默監(jiān)聽著瀏覽器中輸入的密碼信息,而這顯然不應(yīng)該是它應(yīng)做的事情(哪怕是訪問電腦中的圖片資源,都情有可原)。SELinux安全子系統(tǒng)就是為了杜絕此類情況而設(shè)計的,它能夠從多方面監(jiān)控違法行為:對服務(wù)程序的功能進行限制(SELinux域限制可以確保服務(wù)程序做不了出格的事情);對文件資源的訪問限制(SELinux安全上下文確保文件資源只能被其所屬的服務(wù)程序進行訪問)。

劉遄老師經(jīng)常會把“SELinux域”和“SELinux安全上下文”稱為是Linux系統(tǒng)中的雙保險,系統(tǒng)內(nèi)的服務(wù)程序只能規(guī)規(guī)矩矩地拿到自己所應(yīng)該獲取的資源,這樣即便黑客入侵了系統(tǒng),也無法利用系統(tǒng)內(nèi)的服務(wù)程序進行越權(quán)操作。但是,非??上У氖?,SELinux服務(wù)比較復雜,配置難度也很大,加之很多運維人員對這項技術(shù)理解不深,從而導致很多服務(wù)器在部署好Linux系統(tǒng)后直接將SELinux禁用了;這絕對不是明智的選擇。

SELinux服務(wù)有三種配置模式,具體如下。

enforcing:強制啟用安全策略模式,將攔截服務(wù)的不合法請求。

permissive:遇到服務(wù)越權(quán)訪問時,只發(fā)出警告而不強制攔截。

disabled:對于越權(quán)的行為不警告也不攔截。

本書中的所有實驗都是在強制啟用安全策略模式下進行的,雖然在禁用SELinux服務(wù)后確實能夠減少報錯幾率,但這在生產(chǎn)環(huán)境中相當不推薦。建議大家檢查一下自己的系統(tǒng),查看SELinux服務(wù)主配置文件中定義的默認狀態(tài)。如果是permissive或disabled,建議趕緊修改為enforcing。

    [root@linuxprobe ~]# vim /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    # enforcing - SELinux security policy is enforced.
    # permissive - SELinux prints warnings instead of enforcing.
    # disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    # targeted - Targeted processes are protected,
    # minimum - Modification of targeted policy. Only selected processes are protected. 
    # mls - Multi Level Security protection.
    SELINUXTYPE=targeted

SELinux服務(wù)的主配置文件中,定義的是SELinux的默認運行狀態(tài),可以將其理解為系統(tǒng)重啟后的狀態(tài),因此它不會在更改后立即生效??梢允褂胓etenforce命令獲得當前SELinux服務(wù)的運行模式:

    [root@linuxprobe ~]# getenforce 
    Enforcing

為了確認圖10-6所示的結(jié)果確實是因為SELinux而導致的,可以用setenforce [0|1]命令修改SELinux當前的運行模式(0為禁用,1為啟用)。注意,這種修改只是臨時的,在系統(tǒng)重啟后就會失效:

    [root@linuxprobe ~]# setenforce 0
    [root@linuxprobe ~]# getenforce
    Permissive

再次刷新網(wǎng)頁,就會看到正常的網(wǎng)頁內(nèi)容了,如圖10-7所示。可見,問題確實是出在了SELinux服務(wù)上面。

    [root@linuxprobe wwwroot]# firefox

圖10-7 頁面內(nèi)容按照預(yù)期顯示

現(xiàn)在,我們來回憶一下前面的操作中到底是哪里出問題了呢?

httpd服務(wù)程序的功能是允許用戶訪問網(wǎng)站內(nèi)容,因此SELinux肯定會默認放行用戶對網(wǎng)站的請求操作。但是,我們將網(wǎng)站數(shù)據(jù)的默認保存目錄修改為了/home/wwwroot,而這就產(chǎn)生問題了。在6.1小節(jié)中講到,/home目錄是用來存放普通用戶的家目錄數(shù)據(jù)的,而現(xiàn)在,httpd提供的網(wǎng)站服務(wù)卻要去獲取普通用戶家目錄中的數(shù)據(jù)了,這顯然違反了SELinux的監(jiān)管原則。

現(xiàn)在,我們把SELinux服務(wù)恢復到強制啟用安全策略模式,然后分別查看原始網(wǎng)站數(shù)據(jù)的保存目錄與當前網(wǎng)站數(shù)據(jù)的保存目錄是否擁有不同的SELinux安全上下文值:

    [root@linuxprobe ~]# setenforce 1
    [root@linuxprobe ~]# ls -Zd /var/www/html
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
    [root@linuxprobe ~]# ls -Zd /home/wwwroot
    drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot

在文件上設(shè)置的SELinux安全上下文是由用戶段、角色段以及類型段等多個信息項共同組成的。其中,用戶段system_u代表系統(tǒng)進程的身份,角色段object_r代表文件目錄的角色,類型段httpd_sys_content_t代表網(wǎng)站服務(wù)的系統(tǒng)文件。由于SELinux服務(wù)實在太過復雜,現(xiàn)在大家只需要簡單熟悉SELinux服務(wù)的作用就可以,劉遄老師未來會在本書的進階篇中單獨拿出一個章節(jié)仔細講解SELinux服務(wù)。

針對當前這種情況,我們只需要使用semanage命令,將當前網(wǎng)站目錄/home/wwwroot的SELinux安全上下文修改為跟原始網(wǎng)站目錄的一樣就可以了。

semanage命令

semanage命令用于管理SELinux的策略,格式為“semanage [選項] [文件]”。

SELinux服務(wù)極大地提升了Linux系統(tǒng)的安全性,將用戶權(quán)限牢牢地鎖在籠子里。semanage命令不僅能夠像傳統(tǒng)chcon命令那樣—設(shè)置文件、目錄的策略,還可以管理網(wǎng)絡(luò)端口、消息接口(這些新特性將在本章后文中涵蓋)。使用semanage命令時,經(jīng)常用到的幾個參數(shù)及其功能如下所示:

-l參數(shù)用于查詢;

-a參數(shù)用于添加;

-m參數(shù)用于修改;

-d參數(shù)用于刪除。

例如,可以向新的網(wǎng)站數(shù)據(jù)目錄中新添加一條SELinux安全上下文,讓這個目錄以及里面的所有文件能夠被httpd服務(wù)程序所訪問到:

    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

注意,執(zhí)行上述設(shè)置之后,還無法立即訪問網(wǎng)站,還需要使用restorecon命令將設(shè)置好的SELinux安全上下文立即生效。在使用restorecon命令時,可以加上-Rv參數(shù)對指定的目錄進行遞歸操作,以及顯示SELinux安全上下文的修改過程。最后,再次刷新頁面,就可以正常看到網(wǎng)頁內(nèi)容了,結(jié)果如圖10-8所示。

    [root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
    restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    [root@linuxprobe ~]# firefox

圖10-8 正??吹骄W(wǎng)頁內(nèi)容

真可謂是一波三折!原本認為只要把httpd服務(wù)程序配置妥當就可以大功告成,結(jié)果卻反復受到了SELinux安全上下文的限制。所以,建議大家在配置httpd服務(wù)程序時,一定要細心、耐心。一旦成功配妥httpd服務(wù)程序之后,就會發(fā)現(xiàn)SELinux服務(wù)并沒有那么難。

因為在RHCSA、RHCE或RHCA考試中,都需要先重啟您的機器然后再執(zhí)行判分腳本。因此,建議讀者在日常工作中要養(yǎng)成將所需服務(wù)添加到開機啟動項中的習慣,比如這里就需要添加systemctl enable httpd命令。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號