SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區的幫助下開發的一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統。Linux系統使用SELinux技術的目的是爲了讓各個服務進程都受到約束,使其僅能獲取到本應獲取的資源。
例如,你在電腦上安裝了一個美圖軟件,當你在全神貫注地使用它給照片進行美顏時,它卻在後臺默默監視着你的QQ聊天記錄,而這顯然不該該是它應作的事情,若是是監視電腦中的圖片資源還說的過去。SELinux安全子系統就是爲了杜絕此類狀況而設計的,它可以從多方面監控違法行爲:對服務程序的功能進行限制(SELinux域限制能夠確保服務程序作不了出格的事情);對文件資源的訪問限制(SELinux安全上下文確保文件資源只能被其所屬的服務程序進行訪問)。「SELinux域」和「SELinux安全上下文」是SELinux的雙保險,使服務程序沒法進行越權操做。
SELinux服務有三種運行模式,具體以下:html
selinux的配置文件位置:/etc/selinux/config,連接文件位置:/etc/sysconfig/selinux
本人的機器環境python
ip地址 | 操做系統 | 安裝軟件 |
---|---|---|
192.168.2.211 | Centos 7 64位 | yum方式安裝httpd |
一、查詢selinux服務的工做狀態sestatus
二、查看selinux的運行模式getenforce
三、修改selinux的運行模式linux
setenforce 0 #將運行模式設置爲Permissive,即臨時關閉selinux,重啓系統後失效 setenforce 1 #將運行模式設置爲Enforcing,若是配置文件裏是Permissive,重啓系統後失效
四、修改配置文件,使其永久關閉selinux,重啓系統後生效
注:配置文件裏定義的是selinux的默認運行狀態,能夠理解爲系統重啓後的狀態web
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config sed -i 's/SELINUXTYPE=targeted/#&/' /etc/selinux/config setenforce 0
五、查詢安全上下文相關命令,使用-Z參數
查看目錄的安全上下文,使用ls -Z
查看文件的安全上下文
查看進程的安全上下文,使用ps -Z
查看selinux用戶的安全上下文,使用id -Z
六、使用selinux須要記住的四個命令vim
七、修改httpd服務的默認網站目錄,來配置selinux
(1)安裝httpd服務,並設置firewalld防火牆容許http服務瀏覽器
yum -y install httpd firewall-cmd --permanent --add-service=http firewall-cmd --reload
(2)將網站數據目錄修改成/home/wwwroot目錄,並建立首頁文件安全
mkdir /home/wwwroot echo "The New Web Directory" > /home/wwwroot/index.html
(3)修改httpd服務的配置文件vim /etc/httpd/conf/httpd.conf
(4)啓動httpd服務,並驗證效果systemctl start httpd
經過瀏覽器訪問發現顯示上圖頁面,而這正是selinux在搗鬼。
(5)查看selinux運行狀態,並關閉它tcp
getenforce setenforce 0
再次刷新頁面,就會看到正常的網頁內容了。
咱們把httpd服務的網站數據默認保存目錄修改成/home/wwwroot,這顯然違反了selinux的監管原則,/home目錄是用來存放普通用戶的家目錄數據的,而如今httpd服務卻要去獲取普通用戶家目錄中的數據,selinux天然是不容許了。咱們如今把selinux服務恢復到強制啓用安全策略模式,而後修改selinux的安全上下文便可。
(6)啓用selinux,而且對比/var/www/html和/home/wwwroot目錄的安全上下文有什麼區別ide
setenforce 1 ls -Zd /var/www/html/ ls -Zd /home/wwwroot/
selinux安全上下文是由用戶段、角色段和類型段等多個信息項組成的,用戶段system_u表示系統進程的身份,角色段object_r表示文件目錄的角色,類型段httpd_sys_content_t表示網站服務的系統文件。即然如此,那咱們只將/home/wwwroot目錄的安全上下文修改成跟原始網站目錄同樣就好了。
(7)安裝所需命令軟件包yum -y install policycoreutils-python.x86_64
(8)將/home/wwwroot目錄添加一條安全上下文網站
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
咱們再經過瀏覽器訪問一下,能正常顯示網頁內容,OK。
八、開啓httpd服務的我的用戶主頁功能,來配置selinux
(1)修改配置文件,開啓我的用戶主頁功能vim /etc/httpd/conf.d/userdir.conf
(2)切換到普通用戶,而且建立網站目錄及首頁文件
useradd xuad su - xuad mkdir public_html echo "This is user's website" > public_html/index.html chmod -Rf 755 /home/xuad/ exit systemctl restart httpd
在瀏覽器地址欄裏輸入「http://192.168.2.223/~xuad」,不出所料,報錯了。
httpd服務既然提供了我的用戶主頁功能,那麼用戶的網站目錄天然是存在在用戶的家目錄中,因此應該不是selinux安全上下文的問題。咱們前面有提到過selinux域,那麼是否是被它給阻止了呢?
(3)查看與http協議相關的安全策略getsebool -a | grep http
這麼多的安全策略規則,咱們不必逐個理解它們,只須要經過名字大體猜想出相關的策略用途就能夠了。那麼經過名字咱們很容易能發現應該是httpd_enable_homedirs規則,而此規則是off,咱們應該將其修改成on。
(4)修改selinux域策略規則,該操做永久生效,而且當即生效setsebool -P httpd_enable_homedirs=on
而後刷新一下頁面,能正常顯示首頁內容了。
九、配置基於端口號的多站點,來配置selinux
(1)建立網站目錄及首頁文件
mkdir -p /home/wwwroot/8111 mkdir -p /home/wwwroot/8222 echo "port:8111" > /home/wwwroot/8111/index.html echo "port:8222" > /home/wwwroot/8222/index.html
(2)修改配置文件,增長兩個監聽端口,而且添加兩個虛擬站點配置vim /etc/httpd/conf/httpd.conf
(3)查看selinux安全上下文
ls -Zd /home/wwwroot/8111/ ls -Zd /home/wwwroot/8222/
前面咱們修改了/home/wwwroot目錄的安全上下文,此時咱們新建的兩個目錄默認繼承了上層目錄的安全上下文,這裏無須再修改了。如今重啓httpd服務systemctl restart httpd
奇怪,啓動時竟然報錯了。由於8111和8222端口不屬於httpd服務,但如今卻被httpd服務監聽使用了,因此selinux會拒絕httpd服務使用這兩個端口。
(4)查看與http協議相關的selinux服務容許的端口列表semanage port -l | grep http
顯然http_port_t規則裏沒有8111和8222這兩個端口號。
(5)往http_port_t規則裏添加端口號
semanage port -a -t http_port_t -p tcp 8111 semanage port -a -t http_port_t -p tcp 8222
此操做當即生效,且永久生效,無須使用restorecon命令。
(6)配置firewalld防火牆容許8111和8222端口
firewall-cmd --permanent --add-port=8111/tcp firewall-cmd --permanent --add-port=8222/tcp firewall-cmd --reload firewall-cmd --list-ports
(7)重啓httpd服務,並經過瀏覽器驗證systemctl restart httpd
網站頁面正常顯示,OK。