這一節和老師學習了selinux的基本知識。
selinux的全稱是security enhanced linux, 直譯就是安全加強的linux。在selinux之前,root賬号能夠任意的通路所有文檔和服務;如果某個檔案設為777,那麼任何使用者都可以通路甚至删除;這種方式稱為dac(主動通路機制),很不安全;selinux則是基于mac(強制通路機制),簡單的說,就是程式和通路對象上都有一個标簽進行區分,隻有對應的标簽才能允許通路。否則即使權限是777,也是不能通路的。
這個标簽在程式或者程序上叫做domain(域),在通路對象或者檔案上叫做context (上下文)。
檢視上下文可以通過ls -z,檢視域可以使用 ps z, 我高亮的部分就是他的上下文了
以httpd為例,這個httpd的程序隻能允許通路/var/www/html下的文檔對象。
下面做個小實驗,建立一個index.html文檔,打開沒有問題
在root的家目錄下建立一個index2.html文檔,并剪切到/var/www/html目錄下,可以發現其預設的上下文是繼承 /home的,标簽不比對,是以無法通路
我甚至收到了selinux的警告資訊,打開看看
在 /var/log/audit/audit.log 也可以檢視這個報錯
如何修複?有兩種方式,一種是通過restorerecon( restore context) 修複繼承目前目錄預設的上下文;一種是通過chcon (change context) 修改目前的上下文
自動恢複
或者強行指定另外一個檔案的上下文來設定
那麼這個預設的上下文是哪裡來的呢,我們可以通過semanage來配置
首先檢視一下預設的上下文
然後可以通過-a -t來強行修改,修改之後再restorecon一下,就變成了預設的context
selinux 裡面有3種模式,分别是enforcing, permissive, 和 disable。 enforing不比對的直接就報錯擋住了; permissive會報錯但是不會擋住, disable就直接關掉selinux
可以通過getenforce 檢視 setenfore 來設定。 注意他沒法直接設定 disable
disable 需要修改配置檔案來生效
修改之後重新開機就可以了
改回來,重新開機,開機會出現一個警告,selinux重新打标簽會花時間~~
進入系統,再看看最後一個概念,selinux的布爾值。這個布爾值類似一個開關,打開的話,他對應的一些服務就允許執行,否則的話就拒絕執行。
看看有哪些布爾值
知道了布爾值的名字,可以通過sesearch 來确認他關聯了哪些服務的域,比如httpd_enable_homedir允許下列規則,如果設定為off的話,那麼他們都是無法通路的
除了指令行,我們還可以通路圖形界面
總結一下,如果搭配了某個伺服器,然後用戶端無法正常通路,應該按照下面的順序進行排錯:
該服務的配置檔案中是否開啟了相關的權限 ,比如是否允許匿名使用者寫入等等;
檔案系統的權限,比如是否需要使用chmod修改權限
selinux的上下文和布爾值
例子(建立ftp通路,略)