RH134-第二十一節-selinux對文件的控制

SELinux 的運作模式

    主體 (Subject):SELinux 主要想要管理的就是程序,因此你可以將『主體』跟 process 劃上等號;

    目標 (Object): 主體程序能否存取的『目標資源』一般就是文件系統。因此這個目標項目可以等文件系統劃上等號;

    政策 (Policy): 由於程序與檔案數量龐大,因此 SELinux 會依據某些服務來制訂基本的存取安全性政策。這些政策內還會有詳細的規則 (rule) 來指定不同的服務開放某些資源的存取與否。在目前的 CentOS 6.x 裏面僅有提供兩個主要的政策如下,一般來說,使用預設的 target 政策即可。
        targeted:針對網絡服務限制較多,針對本機限制較少,是預設的政策;
        mls:完整的 SELinux 限制,限制方面較爲嚴格。

   安全性本文 (security context): 我們剛剛談到了主體、目標與政策面,但是主體能不能存取目標除了要符合政策指定之外,主體與目標的安全性本文必須一致才能夠順利存取。 這個安全性本文 (security context) 有點類似文件系統的 rwx 啦!安全性本文的內容與設定是非常重要的! 如果設定錯誤,你的某些服務(主體程序)就無法存取文件系統(目標資源),當然就會一直出現『權限不符』的錯誤訊息了!

(1)主體程序必須要通過 SELinux 政策內的規則放行後,就可以與目標資源進行安全性本文的比對
(2)若比對失敗則無法存取目標,若比對成功則可以開始存取目標。


安全性本文 (Security Context)



身份識別 (Identify): 相當於賬號方面的身份識別!主要的身份識別則有底下三種常見的類型:
        root:表示 root 的賬號身份,如同上面的表格顯示的是 root 家目錄下的數據啊!
        system_u:表示系統程序方面的識別,通常就是程序囉;
        user_u:代表的是一般使用者賬號相關的身份。

    角色 (Role): 透過角色字段,我們可以知道這個數據是屬於程序、檔案資源還是代表使用者。一般的角色有:
        object_r:代表的是檔案或目錄等檔案資源,這應該是最常見的囉;
        system_r:代表的就是程序啦!不過,一般使用者也會被指定成爲 system_r 喔!

    類型 (Type): 在預設的 targeted 政策中, Identify 與 Role 字段基本上是不重要的!重要的在於這個類型 (type) 字段! 基本上,一個主體程序能不能讀取到這個檔案資源,與類型字段有關!而類型字段在檔案與程序的定義不太相同,分別是:
        type:在檔案資源 (Object) 上面稱爲類型 (Type);
        domain:在主體程序 (Subject) 則稱爲領域 (domain) 了!
    domain 需要與 type 搭配,則該程序才能夠順利的讀取檔案資源啦!


SELinux 的啓動、關閉與觀察

查看並永久修改selinux的啓動和政策






  注:如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他兩個,那也必須要重新啓動。

SELinux type 的修改

    注:單純的複製文件時,SELinux 的 type 字段是會繼承目標目錄的(即會變成和所到的目錄的一樣); 如果是移動,那麼連同 SELinux 的類型也會被移動過去。



    復原成原有的 SELinux type:


默認目錄的安全性本文查詢與修改

    semanage(需要安裝:yum install policycoreutils-python):



    利用 semanage 設定 /srv/vbird 目錄的默認安全性本文爲 public_content_t(修改的就是默認值):



政策查詢:seinfo(需要安裝:yum install setools-console



    政策爲targeted時,針對httpd制定的規則爲:


如果你想要找到有 httpd 字樣的安全性本文類別時, 就可以使用『 seinfo -t | grep httpd 』來查詢了!如果查詢到相關的類別或者是布爾值後,想要知道詳細的規則時, 就得要使用 sesearch 這個指令了!
    sesearch:



布爾值的查詢與修改:(getsebool,setsebool)







整篇最重要的內容

    setroubleshoot --> 錯誤訊息寫入 /var/log/messages
    需要軟件:setroublshoot 與 setroubleshoot-server
    原本的 SELinux 信息本來是以兩個服務來記錄的,分別是 auditd 與 setroubleshootd。既然是同樣的信息, 因此 CentOS 6.x 將兩者整合在 auditd 當中啦!所以,並沒有 setroubleshootd 的服務存在了喔!因此, 當你安裝好了 setroubleshoot-server 之後,請記得要重新啓動 auditd,否則 setroubleshootd 的功能不會被啓動的。

    演示:




    讓 setroubleshoot 主動的發送產生的信息到我們指定的 email:



SELinux 錯誤克服的總結:
         1、在服務與 rwx 權限都沒有問題,卻無法成功的使用網絡服務時;
         2、先使用 setenforce 0 設定爲寬容模式;
         3、再次使用該網絡服務,如果這樣就能用,表示 SELinux 出問題,請往下繼續處理。如果這樣還不能用,那問題就不是在 SELinux 上面!請再找其他解決方法,底下的動作不適合你;
         4、分析 /var/log/messages 內的信息,找到 sealert -l 相關的信息並且執行;
         5、找到 Allow Access 的關鍵詞,照裏面的動作來進行 SELinux 的錯誤克服;
         6、處理完畢重新 setenforce 1 ,再次測試網絡服務吧!

##selinux:
selinux
是進程,文件等權限設置依據的一個內核模塊。

   selinux
的啓動關閉與查看:
   模式:vim/etc/sysconfig/selinux
     enforceing:強制模式

     permissive:警告模式
     diabled:關閉,selinux並沒有實際運行

   查看:

     getenforce        ##顯示selinux模式
     setenforce 0|1    ##更改selinux模式
     0:表示permissive警告模式
     1:表示enforceing強制模式
  

 顯示進程的selinux的安全上下文:
     ps axuZ |  grep vsftpd   ##-Z參數可以查詢進程的安全上下文

測試

    touch file
    mv file /var/ftp/pub
   1)enforceing
模式
     ls ##不能看到從別處轉移過來的文件
  

2)permissive模式
     ls ##可以看到從別處轉移過來的文件

     ls -Z ##查看文件selinux的安全上下文,本地文件和從別處轉移過來的文件的selinux安全上下文是不一樣的



    chcon -t public_content_t/var/ftp/pub/file    更改文件的selinux安全上下文,與本地文件一樣,此時在enforcing模式下也可以看到從別處移過來的文件


  

1.selinux的永久設定:
selinux=Enforcing:
   mkdir /westos                 
   touch /westos/file{1..10}      
   ls /westos/
   vim /etc/vsftpd/vsftpd.conf          ##將匿名用戶的家目錄設置爲/westos:
anon_root=/westos

   systemctl restart vsftpd.service     ##重啓服務

  lftp 172.25.254.122                 ##匿名用戶登陸的家目錄/westos,用ls進行查看看不到之前新建的10個文件
   ps auxZ | grep vsftpd                ##顯示vsftpd進程的安全上下文
   ls -lZ /var/ftp                      ##查看/var/ftp文件selinux的安全上下文
   ls -Zd /westos/                      ##查看/westos目錄selinux的安全上下文
   semanage fcontext -l | grepwestos      ##查詢/westos的默認安全上下文設置
   semanage fcontext -l | grep/var/ftp/   ##查看/var/ftp文件的默認安全上下文設置
   semanage fcontext -a -tpublic_content_t '/westos(/.*)?'  ##永久更改目/westos的selinux安全上下文和/var/ftp中的文件一樣
  semanage fcontext -l | grep /var/ftp/   
   semanage fcontext -l | grepwestos
   ls -Zd /westos/
   restorecon -RvvF /westos/           ##
恢復更改後的/westos的selinux的安全上下文
   lftp 172.25.254.122         
   touch /westos/file11                ##
在目錄中新建文件
   lftp 172.25.254.122                 ##用ls進行查看可以看到新建的file11文件,證明新建文件的安全上下文和目錄保持一致
   ls -Z /westos/                      ##查詢新建文件之後的目錄中所有文件的安全上下文,
   ##目錄的安全上下文被更改之後,目錄下新建文件的安全上下文和目錄保持一致



 



selinux=Permissive時:


  ##在selinux=Permissive時,不用修改/westos的安全上下文,用lftp連接之後直接可以看到/westos下建立的文件
.
 
selinux默認關閉服務開啓:(selinux內核防火牆在enforcing狀態下會自動關閉一些不安全的服務)

   getenforce                                 ##查詢selinux狀態
   vim /etc/vsftpd/vsftpd.conf                ##默認情況下本地用戶具有寫的權限

   lftp 172.25.254.122 -u student             ##student用戶登陸,不能上傳文件

   ls -ld /home/student/                      ##查詢/home/student目錄權限
   chmod u+w /home/student/                   ##給/home/student增加寫的權限
   lftp 172.25.254.122 -u student             ##student用戶登陸,增加權限後依然不能上傳文件
   getsebool -a | grep ftp                    ##查看所有ftp服務設定狀態
   setsebool -P ftp_home_dir 1                ##直接將設置 寫入配置文件,修改之後會生效
   參數P必須是大寫,否則命令無法執行
   getsebool -a | grep ftp                    ##檢查是否開啓
   lftp 172.25.254.122 -u student             ##student用戶登陸,上傳文件成功


   ##由於進程的文件數量龐大,因此selinux服務會依據某些服務來制定基本的訪問安全性策略,這些策略裏還會有詳細的規則來制定不同的服務開放某些資源的訪問與否。
發佈了66 篇原創文章 · 獲贊 25 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章