SELinux

studywell發表於2015-10-29
selinux
 
 轉自:http://blog.csdn.net/xyz846/article/details/8042878
      
            
 
 
一、什麼是SELinux?
   SELinux 全稱 Security Enhanced Linux (安全強化 Linux),由美國國家安全部(National Security Agency)領導開發的GPL專案,是MAC (Mandatory Access Control,強制訪問控制系統)的一個實現,目的在於明確的指明某個程式可以訪問哪些資源(檔案、網路埠等)。強制訪問控制系統的用途在於增強系統抵禦 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。所以它不是網路防火牆或 ACL 的替代品,在用途上也不重複。舉例來說,系統上的 Apache 被發現存在一個漏 洞,使得某遠端使用者可以訪問系統上的敏感檔案(比如 /etc/passwd 來獲得系統已存在使用者),而修復該安全漏洞的 Apache 更新補丁尚未釋出。此時 SELinux 可以起到彌補該漏洞的緩和方案。因為 /etc/passwd 不具有 Apache 的訪問標籤,所以 Apache 對於 /etc/passwd 的訪問會被 SELinux 阻止。

SELinux on Redhat Linux在RHEL4.0或FC3以上的版本中,可以在安裝時就選擇是否啟用SELinux,系統自動會安裝相應的核心、工具、程式等。由於 SELinux的MAC機制將極大的影響了現有應用,因此RHEL4/FC3中已預配置了大量相容現有應用的安全策略。SELinux的配置相關檔案都在 /etc/selinux下,其中/etc/selinux/targeted目錄裡就包含了策略的詳細配置和context定義,以下是主要檔案及功用:
/etc/selinux/targeted/contexts/*_context 預設的context設定
/etc/selinux/targeted/contexts/files/* 精確的context型別劃分
/etc/selinux/targeted/policy/* 策略檔案
使用Redhat預設的策略對正常應用帶來的影響比較小,相容性相對比較好。對於需要提供虛擬主機或大量應用的使用者而言,則會帶來不小的麻煩,需要仔細閱讀SELinux 的手冊進行調整。


特點:
控制策略是可查詢而非程式不可見的。
可以熱更改策略而無需重啟或者停止服務。
可以從程式初始化、繼承和程式執行三個方面透過策略進行控制。
控制範圍覆蓋檔案系統、目錄、檔案、檔案啟動描述符、埠、訊息介面和網路介面。


二、啟動和關閉SELinux的方法:

配置檔案# cat /etc/sysconfig/selinux
selinux可調的三種狀態
# 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 被禁用

修改/etc/selinux/config檔案中的SELINUX="" 為 disabled ,然後重啟。
  如果不想重啟系統,使用命令setenforce 0
注:
setenforce 1 設定SELinux 成為enforcing模式
setenforce 0 設定SELinux 成為permissive模式
  在lilo或者grub的啟動引數中增加:selinux=0,也可以關閉selinux

該命令可以立刻改變 SELinux 執行狀態,在 Enforcing 和 Permissive 之間切換,結果保持至關機。若是想要永久變更系統 SELinux執行環境,可以透過更改配置檔案 /etc/sysconfig/selinux 實現。注意當從 Disabled 切換到 Permissive 或者 Enforcing模式後需要重啟計算機。若要判斷某一程式無法執行是否是selinux所致可以先將其設定為permisive再執行,如仍無法執行表明與其無關


 SELinux 執行策略:
配置檔案# cat /etc/sysconfig/selinux
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
透過改變變數 SELINUXTYPE 的值實現修改策略,targeted 代表僅針對預製的幾種網路服務和訪問請求使用 SELinux 保護,mls代表所有網路服務和訪問請求都要經過SELinux。RHEL預設設定為targeted,包含了對幾乎所有常見網路服務的SELinux 策略配置,已經預設安裝並且可以無需修改直接使用。


三、檢視selinux狀態:

檢視selinux的工作模式
[root@rhel ~]# getenforce
Enforcing

四、selinux簡單實用

 每個程式都屬於一個SElinux域(domain),而每一個檔案都被賦予一個SElinux上下文的context值,那麼如何檢視它們的contex值呢?
使用命令ls  -Z 或ps  -Z檢視上下文contex值,如圖:
[root@rhel ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
[root@rhel ~]# ps -Z
LABEL                             PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2452 pts/1 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2472 pts/1 00:00:00 ps

上面紅色方框中的檔案SElinux上下文或SElinux域格式字串以冒號作為欄位分隔,第一個欄位為使用者標識第二個欄位為角色(role),root和user_u表示檔案是根使用者或普通使用者建立的,第三個欄位為型別,第四個為擴充套件的MIS或MCS,這裡我們只關心第三個欄位就可以了。
 檔案上下文context值說明:
1、使用者:指的是SElinux使用者,root表示root賬戶身份,user_u表示普通使用者無特權使用者,system_u表示系統程式,透過使用者可以確認身份型別,一般搭配角色使用。身份和不同的角色搭配時有許可權不同,雖然可以使用su命令切換使用者但對於SElinux的使用者並沒有發生改變,賬戶之間切換時此使用者身份不變,在targeted策略環境下使用者標識沒有實質性作用。
2、角色:object_r一般為檔案目錄的角色、system_r一般為程式的角色,在targeted策略環境中使用者的角色一般為system_r,在strict策略中使用者的角色被細分為sysadm_r、system_r、user_r、staff_r角色。使用者的角色類似使用者組的概念,不同的角色具有不同的身份許可權,一個使用者可以具備多個角色,但是同一時間只能使用一個角色。在targeted策略環境下角色沒有實質作用,在targeted策略環境中所有的程式檔案的角色都是system_r角色,在strict策略中一般使用者登入時角色是user_r,root使用者登入時角色是staff_r,但是沒有特殊權切換到sysadm_r角色才具備超級使用者的許可權,只有staff_r角色才可以切換成sysadm_r角色。
3、 型別(程式的型別又可以稱為域):檔案和程式都有一個型別,SElinux依據型別的相關組合來限制存取許可權。

這裡我們還可以看到,大部分的網路守護程式與系統程式都屬於特定的域型別,而sshd和ps ax -Z命令的程式域的型別確都是unconfined_t,說明它們的程式不受任何SElinux上下文的限制,特別是使用者互動式shell,任何使用者互動式shell開始的程式(除了一些特例外)都不受SElinux目標策略的影響。

由此可以看出檔案的context值是受上一級目錄影響的,一般情況下它們會繼承上一級目錄的context值,一些安裝服務產生的檔案context值會例外,不繼承上級目錄的context值,服務會自動建立它們的context值,比如沒有裝http服務的時候/var/目錄下時沒有www目錄的,安裝httpd服務後該服務會自動建立出所需的目錄,並定義與服務相關的目錄及檔案才context值,它們並不會繼承上級目錄的context值,如圖是var目錄的context值:

修改檔案的context值;
chcon  -t  tmp_t  /var/www/html/index.html //修改檔案的context值
restorecon  -v  /var/www/html/index.html//根據SElinux的目標策略恢復檔案的安全上下文(context值)
restorecon  -R(recursion)  -v  /var/www/html//根據SElinux的目標策略恢復html目錄下所有檔案的安全上下文(context值)

大多數情況下,我們新建一個服務相關檔案,通常是會被SElinux攔截的,這時可檢視這個檔案或者檔案者所在目錄所有的檔案的content,進行對比,檢視相同作用的檔案,然後更改檔案content和它一樣.
chcon -t named_cache_t 某個檔案
chcon -u system_u 某個檔案


如因為selinux的問題,導致網站訪問異常,可以檢視日誌:tail  /var/log/messages  |grep  run
setroubleshoot是檢視SElinux日誌報錯的命令
# yum install setroubleshoot.x86_64

檢視setroubleshoot軟體提示的報錯
cat    /var/log/messages |grep setroubleshoot
注:若軟體包安裝上了,可使用sealert  -b命令讓詳細的提示資訊對話方塊彈出來!


所有檔案的context值都存放在/etc/selinux/targeted/contexts/files目錄下.




 Managing  Boole(管理SElinux布林值)
什麼是SElinux布林值呢?SEliux布林值就相當於一個開關,精確控制SElinux對某個服務的某個選項的保護,比如ftp服務,如圖:
[root@rhel files]# getsebool -a |grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

說明:getsebool -a  //檢視sebool值
     setsebllo  -P  //設定sebool值
舉例:getsebool-a |grep  ftp
  setsebool -P ftp_home_dir=1 //設定sebool值,1為on,不保護,0為off,保護

注:sebool值出新問題後同樣的也無法訪問相關的服務,系統也會跳出黃色五角星說明並提供解決辦法,與上述檔案context值出現的提示一樣,

 補充知識
圖形化介面下開啟SElinux配置工具裡boolean選項引數說明:

1、 Admin:在Admin類下,可以允許系統使用未分配的終端(ttys),允許對root目錄進行寫操作,從非標準位置讀取檔案,禁止任何程式載入核心模組,禁止任何對SElinux策略的修改,以及提供對緩衝區溢位保護的支援。
2、 Cronn:在Croon類下,可以啟用額外的規則以支援fcron排程命令,以及禁用SElinux對cron服務的保護。
3、 CVS:在使用CVS版本控制系統的情況下,可以關閉SElinux對密碼檔案的保護。
4、 Databases:在使用MySQL或PostgreSQL資料庫系統的情況下,可以關閉SElinux對它們的保護。
5、 FTP:在FTP類下游6個配置項,RHEL5中的SElinux允許FTP作為獨立於超級服務的服務(即支援vsftpd作為常規服務執行,而不與inetd或xinetd有關聯)。允許目錄上傳,需使用public_content_rw_t標籤,同樣支援使用CIFS或NFS進行檔案傳輸,允許讀寫家目錄或禁用SElinux對FTP伺服器的保護。
6、 HTTPD Service:HTTPD Service類是一些SElinux指令以增強Apache伺服器的安全性,主要包括以下內容:
(1) 允許apache使用mod_auth_pam
(2) 允許httpd支援CGI指令碼
(3) 允許httpd守護程式對有public_content_rw_t標籤的目錄與檔案寫入
(4) 允許httpd指令碼和模組連線到網路
(5) 允許httpd指令碼和模組透過網路連線到資料庫
(6) 允許httpd指令碼對有public_content_rw_t標籤的目錄與檔案寫入
(7) 允許httpd讀取家目錄
(8) 允許httpd作為ftp伺服器執行
(9) 允許httpd執行SSL與CGI在同一域中
(10) 允許httpd支援內建指令碼
(11) 禁止SElinux對httpd守護程式的保護
(12) 禁止SElinux對httpd suexec(可允許httpd服務的可執行檔案)的保護
(13) 統一httpd處理的所有內容檔案
(14) 統一httpd連線終端需要處理的證照
7、 Kerberos:在Kerberos類下有3個配置項,一個選項允許其它程式使用Kerberos檔案(預設啟用),其它兩個選項禁止SElinux對Kerberos管理程式(kadmind)和Kerberos鍵盤控制程式(krb5kdc)的保護
8、 Memory Protection:在目前版本的RHEL中,記憶體保護選項不與任何服務或系統關聯。
9、 Mount:在Mount類中是一些與自動掛載服務有關的控制,可以透過配置它以允許掛載者掛載任何目錄或檔案,同樣也可以禁用SElinux的保護。
10、 Name Service:名稱伺服器程式(named)指的是RHEL中的DNS服務,如果維護一個區域,一般會希望允許named程式可以覆蓋主域檔案,也可以禁用SElinux的保護,名稱伺服器的快取程式(ncsd)也是如此。
11、 NFS:在NFS啟用SElinux之前,至少需要啟用NFS檔案系統的讀許可權。如果使用NFS共享系統,可能在NFS檔案系統上啟用讀、寫、建立功能。如果配置某個伺服器上的家目錄作為NFS共享,可能想讓NFS支援家目錄,這些都有通常安全管理服務程式(gssd)提供支援。
12、 NIS:如果在SElinux系統上執行NIS,可能想允許NIS執行程式,可以取消SElinux對NIS密碼和NIS傳輸程式的保護,如果還有問題,可以取消SElinux對相關程式(ypbind)的保護。
13、 Other:在Other類中可以允許完整檔案的訪問,透過FTP和未標籤的包,Other類同樣可以禁止SElinux對PC讀卡器和特殊時區資料的保護。
14、 Polyinstation:使用者在相同的目錄下可能會看到不同的東西(比如/tmp),可以使用SElinux工具啟用這一支援。
15、 Pppd:這一程式使用電話調變解調器進行通訊,可以允許pppd在核心中插入支援通訊的模組或禁用SElinux保護。
16、 Printing:在Printing類中可以允許禁用SElinux對於不同CUPS程式的保護,包括CUPS後臺服務、cupsd程式、cupsd-lpd服務和HP印表機程式(hplip)。甚至可以用LPD代替CUPS。
17、 Rsync:在rsync類中可以允許標籤為public_content_rw_t目錄配置寫許可權或禁用SElinux的保護。
18、 Samba:在Samba類中可以使用SElinux保護samba,主要包括以下內容:
(1) 允許samba共享nfs目錄
(2) 允許samba共享使用者家目錄
(3) 允許samba對標籤為public_content_rw_t的目錄檔案進行寫操作
(4) 允許使用者登入到CIFS家目錄
(5) 禁止SElinux對nmbd程式(NetBIOS程式)的保護
(6) 禁止SElinux對smbd程式(samba程式)的保護
(7) 禁止SElinux對winbind程式(WINS服務程式)的保護
19、 SASL Authentication Server:簡單的身份驗證和安全層(SASL)伺服器是另一個驗證方法,透過安全級別配置工具,可以允許它進入/etc/shadow驗證資料庫,以及禁用SElinux的保護。
20、 SElinux Server Protection:在SElinux Server Protection類中允許為大範圍的程式禁用SElinux保護(比如從amanda到zebra),這些服務不包含在其它類中。
21、 Spam Protection:Spam  Protection類作用於SpamAssassin服務,對於常規使用者需要進入家目錄,當然依然可以禁用。
22、 SQUID:如果需要設定squid代理的快取,將需要允許它訪問網路,也可以禁止SElinux保護。
23、 Universal  SSL  Tunnel:在Universal SSL Tunnel類中可以為網路配置一個安全通道,透過SElinux新增保護,可以使用此工具允許stunnel作為單獨的服務執行,也可以禁用SElinux的保護。
24、 Zebra:可以利用這一工具讓Zebra路由服務隊路由表進行寫入。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1818281/,如需轉載,請註明出處,否則將追究法律責任。

相關文章