SElinux(Security Extend linux)
Red hat Enterprise 5支持內核實施的一項新的安全策略:SElinux.SElinux是由美國國防部讓安全局針對計算機基礎結構開發的,SElinux允許管理員定義高度靈活的策略,讓linux內核把它作為日常操作的一部.
SElinux將每個程序都編入到SElinux域內,同時將每個資源放在SElinux安全上下文中,然後根據SElinux策略定義哪個進程可以訪問哪些資源.
Redhat 5支持的SElinux策略叫做目標策略,隻影響指定的網路守護進程.在目標策略中,只有目標進程受到SElinux的限制,其它進程則不受限制,目標策略隻影響常用的網路應用程序,在RHEL5中,受限制的網路服務程序數量在200個以上,SElinux限制的典型應用程序如下:
SElinux的三種狀態模式:
1、 Enforcing:強制模式,此模式情況下,任何違反SElinux策略的行為都被禁止,並被作為內核信息記錄下來,圖形界面下會跳出來一個黃色五角星提醒你,並提供解決辦法,命令行下運行tail /var/log/messages |grep run命令,將過濾出來的內容複製run後面的內容運行.
2、 Permissive:警告模式,此模式情況下,任何違反SElinux策略的行為都不會被阻擋,只是會提醒警告用戶,這個模式可以排錯用.
3、 Disabled:關閉模式,此模式是不啟用SElinux,和沒有它是一樣的.
可以通過修改它改變SElinux狀態;SELINUXTYPE參數用於指定SElinux使用什麼策略模塊保護系統,在RHEL5中默認使用的為targeted模塊,這個模塊是由redhat開發的策略模塊,只對Apache、sendmail、bind等網路服務進行保護,不屬於這些服務的就都屬於unconfined_t,該模塊可導入性高,可用性好,但不能對整體進行保護.
也可以在圖形化界面下打開終端輸入system-config-securitylevel,通過圖形界面改變它的工作狀態,如圖:
需要注意的是:SElinux狀態在強制模式和警告模式之間切換是不用重啟計算機的,如果改成禁止模式后則必須要重啟計算機才能生效.
getenforce:判斷SElinux現在處於什麼狀態
setenforce:轉換成強制或警告模式(setenforce 1轉換成強制模式,setenforce 0轉換成警告模式),如圖:
每個進程都屬於一個SElinux域(domain),而每一個文件都被賦予一個SElinux上下文的context值,那麼如何查看它們的contex值呢?
使用命令ls -Z 或ps -Z查看上下文contex值,如圖:
上面紅色方框中的文件SElinux上下文或SElinux域格式字元串以冒號作為欄位分隔,第一個欄位為用戶標識第二個欄位為角色(role),root和user_u表示文件是根用戶或普通用戶建立的,第三個欄位為類型,第四個為擴展的MIS或MCS,這裡我們只關心第三個欄位就可以了.
這裡我們還可以看到,大部分的網路守護進程與系統進程都屬於特定的域類型,而sshd和ps ax -Z命令的進程域的類型確都是unconfined_t,說明它們的進程不受任何SElinux上下文的限制,特別是用戶互動式shell,任何用戶互動式shell開始的進程(除了一些特例外)都不受SElinux目標策略的影響.
下面來舉例說明文件上下文contex值的定義與SElinux的訪問控制:
如圖分別為不同目錄下的文件context值:
仔細看上圖就會發現tmp目錄下的index.html文件context值第三個欄位是tmp_t,而html目錄下的index.html文件context值第三個欄位為httpd_sys_content_t,下面我們在分別來看它們兩個文件的上一級目錄context值,如圖:
這個是安裝httpd軟體包后的www目錄context值:
通過上面的兩個截圖你會看出來由服務定義的目錄文件context值是不繼承它們的上一級目錄的.
我們知道了文件的context值是怎麼定義的了,那麼到底context值會給我們帶來什麼影響,它是怎麼控制服務以及我們怎麼解決呢?下面就以http服務來舉例說明.
我們把/var/www/html目錄下的index.html文件的context值第三段改為tmp_t,至於怎麼更改會在後面說明,如圖:
在沒有更改前我們是能夠正常訪問網站的,如圖:
當我們更改了此文件的context值后,網站就會變得的不能正常訪問,並且會跳出一個黃色五角星提示你SElinux設置有誤,如圖:
這裡跳出黃色五角星提示你錯誤,並且提供解決辦法,你點擊黃色五角星會出來一個對話框,裡面有詳細的說明信息以及解決辦法,按照提示修改後即可訪問,如圖:
知道了SElinux上下文文件context值的作用后就要了解怎麼修改文件的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值)
運行提示命令恢復文件的context值后網站訪問即可恢復正常!
運行tail /var/log/messages |grep run,如圖:
然後根據提示運行run後面的內容就會出來解決辦法,如圖:
看到了吧,與圖形界面下出來的解決辦法一模一樣,呵呵,這下不管在什麼界面下都能解決問題了吧!
如果這個軟體包沒有安裝怎麼辦呢?使用rpm -qf查看這個服務是屬於哪個軟體包,之後再使用yum安裝上,/etc/init.d/setroubleshoot restart重啟服務即可,如圖:
有的人或許會問了,我要查看每個文件的context值怎麼辦呢?總不能一個個文件查看吧,呵呵,大可不必,所有文件的context值都存放在/etc/selinux/targeted/contexts/files目錄下,你可以用cat查看!
圖形化界面下運行system-config-selinux查看,如圖:
如果標籤被你修改混亂無法解決后,可在這裡勾上一個選項使系統在重新啟動后重打標籤,如圖:
勾上這個勾之後你之前所做的操作都將被清除,那麼我們如何讓系統在重打標籤后不改變你之前定義的文件context值呢?
你可以通過以上圖形化界面將該文件context值添加進去,若是在字元界面下可運行semanage fcontext -a -t httpd_sys_content_t ‘/myweb/html(/.*)?’命令添加進去,這樣在系統重啟重打標籤后就不會改變你自己定義的文件或目錄context值了!
Managing Boole(管理SElinux布爾值)
什麼是SElinux布爾值呢?SEliux布爾值就相當於一個開關,精確控制SElinux對某個服務的某個選項的保護,比如ftp服務,如圖:
說明:getsebool -a //查看sebool值
setsebllo -P //設置sebool值
舉例:getsebool -a |grep ftp
setsebool
更詳細的說明可以man ftpd_selinux來獲取幫助!
註:sebool值出新問題后同樣的也無法訪問相關的服務,系統也會跳出黃色五角星說明並提供解決辦法,與上述文件context值出現的提示一樣,這裡就不截圖說明了,自己試下吧!
補充知識
圖形化界面下打開SElinux配置工具里boolean選項參數說明:
1、 Admin:在Admin類下,可以允許系統使用未分配的終端(ttys),允許對root目錄進行寫操作,從非標準位置讀取文件,禁止任何進程載入內核模塊,禁止任何對SElinux策略的修改,以及提供對緩衝區溢出保護的支持.
2、 Cronn:在Croon類下,可以啟用額外的規則以支持fcron調度命令,以及禁用SElinux對cron服務的保護.
3、 CVS:在使用CVS版本控制系統的情況下,可以關閉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
(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支持內置腳本
(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)也是如此.
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的保護.
(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的保護.
21、 Spam Protection:Spam Protection類作用於SpamAssassin服務,對於常規用戶需要進入家目錄,當然依然可以禁用.
22、 SQUID:如果需要設置squid代理的緩存,將需要允許它訪問網路,也可以禁止SElinux保護.
23、 Universal SSL Tunnel:在Universal SSL Tunnel類中可以為網路配置一個安全通道,通過SElinux添加保護,可以使用此工具允許stunnel作為單獨的服務運行,也可以禁用SElinux的保護.
24、 Zebra:可以利用這一工具讓Zebra路由服務隊路由表進行寫入.
文件上下文context值說明:
1、 用戶:指的是SElinux用戶,root表示root賬戶身份,user_u表示普通用戶無特權用戶,system_u表示系統進程,通過用戶可以確認身份類型,一般搭配角色使用.身份和不同的角色搭配時有許可權不同,雖然可以使用su命令切換用戶但對於SElinux的用戶並沒有發生改變,賬戶之間切換時此用戶身份不變,在targeted策略環境下用戶標識沒有實質性作用.
2、
3、 類型(進程的類型又可以稱為域):文件和進程都有一個類型,SElinux依據類型的相關組合來限制存取許可權.
2010年12月20日更改,以前的學習筆記了,現在看到了貼出來供大家參考,寫的不好大家多多包涵,如有錯誤請通知我我會改正的,謝謝啦同志們!系統環境RHEL5.4!
本文出自 「路漫漫修遠兮」 博客,請務必保留此出處http://xinghen.blog.51cto.com/1080189/722082
[火星人 ] selinux學習筆記已經有794次圍觀