在過(guò)往實(shí)驗(yàn)中,為圖便捷曾關(guān)閉 SELinux 安全機(jī)制,但不可否認(rèn),SELinux 對(duì)于對(duì)外發(fā)布業(yè)務(wù)的服務(wù)器而言,是極為關(guān)鍵的安全防護(hù)屏障,開(kāi)啟狀態(tài)才是最佳實(shí)踐。
下面就帶大家一起學(xué)習(xí)一下什么SELinux以及如何使用它。
1. SELinux概述
SELinux(Security-Enhanced Linux) 是美國(guó)國(guó)家安全局(NSA)對(duì)于強(qiáng)制訪(fǎng)問(wèn)控制的實(shí)現(xiàn),是 Linux歷史上最杰出的新安全子系統(tǒng)。NSA是在Linux社區(qū)的幫助下開(kāi)發(fā)了一種訪(fǎng)問(wèn)控制體系,在這種訪(fǎng)問(wèn)控制體系的限制下,進(jìn)程只能訪(fǎng)問(wèn)那些在他的任務(wù)中所需要文件。SELinux 默認(rèn)安裝在 Fedora 和 Red Hat Enterprise Linux 上,也可以作為其他發(fā)行版上容易安裝的包得到。
2. 實(shí)驗(yàn)環(huán)境
Linux系統(tǒng)版本:Centos 7.4最小化安裝
3. SELinux狀態(tài)
三種配置狀態(tài):
enforcing:強(qiáng)制模式,SELinux已經(jīng)啟動(dòng)permissive:寬容模式,SELinux已經(jīng)啟動(dòng),但不會(huì)禁止,只是會(huì)提出警告信息disabled:關(guān)閉模式,關(guān)閉SELinux
3.1 查看當(dāng)前SELinux狀態(tài)

SELinux默認(rèn)狀態(tài)為enforcing。
3.2 修改SELinux狀態(tài)
3.2.1 臨時(shí)關(guān)閉,permissive狀態(tài)
語(yǔ)法:


3.2.2 永久關(guān)閉
vi /etc/selinux/config
將:SELINUX=enforcing
改為:SELINUX=disabled
或者在命令行使關(guān)閉SELinux:
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
臨時(shí)關(guān)閉不需要重啟服務(wù)器,永久關(guān)閉SELinux必須重啟服務(wù)器。
4. SELinux類(lèi)型
SELinux有三種類(lèi)型:
targeted - Targeted processes are protected,
minimum - Modification of targeted policy. Only selected processes are protected.
mls - Multi Level Security protection.
系統(tǒng)默認(rèn)是targeted類(lèi)型,可以更改類(lèi)型:
vi /etc/selinux/config
5. 實(shí)驗(yàn)操作
接下來(lái)我們通過(guò)一個(gè)實(shí)驗(yàn)來(lái)講解SELinux的作用。
5.1 安裝Apache
5.2 編輯測(cè)試頁(yè)
echo 'HTML TEST SELinux !' > /var/www/html/index.html
注意,新創(chuàng)建的index.html存儲(chǔ)在A(yíng)pache默認(rèn)路徑下。
5.3 啟動(dòng)Apache測(cè)試
systemctl start httpd #啟動(dòng)服務(wù)
打開(kāi)網(wǎng)頁(yè)測(cè)試,前提是配置好防火墻。
防火墻配置:
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
網(wǎng)頁(yè)測(cè)試:

可以看到SELinux在開(kāi)啟狀態(tài)下訪(fǎng)問(wèn)正常。
5.4 建立別名
什么是別名?就是在本地建立文件夾和網(wǎng)站根目錄,不直接把index.html創(chuàng)建到/var/www/html文件夾中,如下操作:
5.4.1 創(chuàng)建文件夾
5.4.2 創(chuàng)建測(cè)試頁(yè)
echo 'HTML LOCAL TEST SELinux!' > /local/index.html
5.4.3 創(chuàng)建軟鏈接
ln -s /local /var/www/html/local
5.4.4 重啟Apache測(cè)試
注意是在SELinux開(kāi)啟的情況下。
重啟Apache:
網(wǎng)頁(yè)測(cè)試:
訪(fǎng)問(wèn)被拒絕。

5.4.5 關(guān)閉SELinux再測(cè)試
網(wǎng)頁(yè)測(cè)試:
訪(fǎng)問(wèn)正常。

6. 配置SELinux文件上下文
我們還是有Apache為例,接著第5點(diǎn)繼續(xù)操作。
6.1 查看上下文
6.1.1 查看Apache默認(rèn)文件上下文
ls -lZ /var/www/html/index.html

上下文屬性為:httpd_sys_content_t
6.1.2 查看軟鏈接的文件上下文
ls -lZ /var/www/html/local/index.html

上下文屬性為:default_t
6.1.3 區(qū)別
可以清楚的看到,Apache默認(rèn)的文件目錄上下文是httpd_sys_content_t,而在系統(tǒng)本地新建文件目錄的上下文是default_t。
6.2 修改上下文
方法一:
chcon -R -t httpd_sys_content_t /local
或是
chcon -R --reference /var/www/html /local
說(shuō)明:
-R:遞歸的意思
-t:類(lèi)型
httpd_sys_content_t:在SELinux中代表Apache目錄的類(lèi)型,所以要設(shè)置成這個(gè)
--reference:參數(shù)一個(gè)目錄設(shè)置另一個(gè)目錄的類(lèi)型
注意,以上兩種方式都是臨時(shí)修改,重啟服務(wù)器后會(huì)失效,我們需要的是永久生效,把配置寫(xiě)入內(nèi)核,需要使用到semanage命令工具。需要先安裝一下:
安裝:
yum install policycoreutils-python
配置:
semanage fcontext -a -t httpd_sys_content_t "/local(/.*)?"
restorecon -R -v -F /local #刷新完才能生效
說(shuō)明:
-R:遞歸的意思
-v:可視化
-F:強(qiáng)制
7. 測(cè)試SELinux基于端口上下文
在第6節(jié)中配置完了文件級(jí)別的SELinux配置,接下來(lái)我們?cè)僬f(shuō)一下基于端口的上下文。
7.1 創(chuàng)建測(cè)試頁(yè)
echo 'HTML TEST PORT 80 !' > /var/www/html/index.html
mkdir /var/www/8899
echo 'HTML TEST PORT 8899 !' > /var/www/8899/index.html
7.2 配置Apache虛擬主機(jī)
vi /etc/httpd/conf.d/0.conf
<virtualhost 192.168.64.138:80>
servername 192.168.64.138
documentroot /var/www/html
</virtualhost>
vi /etc/httpd/conf.d/8899.conf
<virtualhost 192.168.64.138:8899>
servername 192.168.64.138
documentroot /var/www/8899
</virtualhost>
vi /etc/httpd/conf/httpd.conf
#增加一個(gè)監(jiān)聽(tīng)端口8899
Listen 8899
7.3 配置防火墻
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8899/tcp
firewall-cmd --reload
7.4 查看SELinux端口上下文
semanage port -l | grep http

我們自定義的8899端口默認(rèn)不是SELinux端口上下文中。
7.5 配置SELinux端口上下文
semanage port -a -t http_port_t -p tcp 8899
7.6 重啟Apache測(cè)試
在沒(méi)有配置SELinux之前(7.5小節(jié))是無(wú)法重啟的HTTP服務(wù),可以自行測(cè)試一下。
測(cè)試80端口:

測(cè)試8899端口:

8. 總結(jié)
到此,SELinux基本的配置及使用就差不多了,更多的配置在用到時(shí)再使用。
SELinux日志默認(rèn)存儲(chǔ)文件:/var/log/audit/audit.log;
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫(kù)可供參考,大家可自行查閱,更多技術(shù)問(wèn)題,也可以直接咨詢(xún)。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢(xún)。更多技術(shù)知識(shí),藍(lán)隊(duì)云期待與你一起探索,助力你在 Linux 運(yùn)維之路上穩(wěn)步前行。