- 論壇徽章:
- 0
|
什么是Security-Enhanced Linux
英文原文來自www.RedHat.com
by Russell Coker
翻譯:胡智江
主要內(nèi)容
介紹:
SELinux概覽:
SELinux深入研究:
Fedora中策略的實現(xiàn):
Fedora的缺省SELinux策略:
更多關(guān)于SELinux的資料:
關(guān)于作者和譯者:
介紹:
當(dāng)今世界,無處不在高速互聯(lián)網(wǎng)連接、如備有無線接入點的咖啡館和在網(wǎng)上到處傳播的各種黑客工具使得出于對計算機安全的考慮成為老生常談。出于解決安全問題,NSA在Linux社區(qū)的幫助下開發(fā)了一種訪問控制體系,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務(wù)中所需要文件。這種體系叫做 Security-Enhanced Linux或簡化為SELinux。
SELinux概覽:
SELinux是一種基于 域-類型 模型(domain-type)的強制訪問控制(MAC)安全系統(tǒng),它由NSA編寫并設(shè)計成內(nèi)核模塊包含到內(nèi)核中,相應(yīng)的某些安全相關(guān)的應(yīng)用也被打了SELinux的補丁,最后還有一個相應(yīng)的安全策略。
眾所周知,標(biāo)準(zhǔn)的UNIX安全模型是"任意的訪問控制"DAC。就是說,任何程序?qū)ζ滟Y源享有完全的控制權(quán)。假設(shè)某個程序打算把含有潛在重要信息的文件仍到/tmp目錄下,那么在DAC情況下沒人能阻止他!
而MAC情況下的安全策略完全控制著對所有資源的訪問。這是MAC和DAC本質(zhì)的區(qū)別。
SELinux里實現(xiàn)的MAC允許程序在/tmp目錄下建立文件,也允許這個文件按照UNIX權(quán)限字的要求對全世界可讀,但是當(dāng)UNIX許可檢查應(yīng)用后, SELinux許可檢查還要進一步判斷對資源的訪問是否被許可。
換句話說,盡管某些UNIX文件的權(quán)限被設(shè)定為0777但是你也許仍然會被禁止讀,寫和執(zhí)行該UNIX文件。在只有DAC的情況下,用戶可以查看或更改屬于他的任何文件。SELinux則可以限制每一個進程對各種資源的訪問,和訪問的權(quán)級。就是說當(dāng)一個程序在使用含有敏感數(shù)據(jù)時,這些數(shù)據(jù)會被禁止寫入那些低權(quán)級進程可讀的文件中。
SELinux提供了比傳統(tǒng)的UNIX權(quán)限更好的訪問控制。
例如,管理員可以只允許一個應(yīng)用程序添加記錄到一個日志文件但不允許其重寫或者刪除該日志文件的內(nèi)容。雖然ext2和ext3文件系統(tǒng)有一個append-only標(biāo)簽(使用chattr設(shè)置),但是這屬性不區(qū)分某一個進程(不能在為一個訪問 append-only的同時,又允許另一個進程據(jù)有完全可寫的權(quán)利);另一方面,一個應(yīng)用程序可以被允許在一個文件夾中建立文件和向其寫入數(shù)據(jù),但不能刪除文件:這種特性是沒有SELinux的普通的Linux內(nèi)核所不能做到的。還有,網(wǎng)絡(luò)應(yīng)用程序可以綁定到其需要的端口上(如BIND的53端口),但不能綁定其它端口。
域-類型模型意味著在安全域中運行著的每一個進程和每一個資源(一般文件、目錄文件和套接字等)都有一個與之相聯(lián)系的"類型"(type)。
在這基礎(chǔ)之上建立了一系列規(guī)則,這些規(guī)則列出了某個域可以在每一個類型上執(zhí)行的所有動作。 域-類型模型的一個優(yōu)點就是我們可以對策略進行分析,從而判斷出哪些信息有可能外溢。在標(biāo)準(zhǔn)的UNIX環(huán)境中,用戶一般可以使用ps命令來互相查看彼此的進程列表,然而這也會為攻擊者提供有價值的信息。甚至就算完全阻止用戶使用ps命令,信息還是會意外的或故意的泄露,其實在一個給定的UNIX環(huán)境中,哪些信息會發(fā)生泄露是無法判斷的。
而在SELinux情況下,我們會有很多工具用來分析SELinux策略并判斷哪些信息泄露是可能的。舉個例子,假如有兩個應(yīng)用程序被允許向一個日志文件添加數(shù)據(jù),且他們互相不能直接通信。那么如果一個其中進程又獲得了對該日志的讀權(quán)限的話,那么一個單方通信就有可能形成。
對訪問/etc/shadow文件做訪問限制是個很好的例子,通過該例子我們可以看出策略分析的好處。
如果你裝了Fedora Core 3,并且選擇了嚴(yán)格的SElinux策略配置,那么將會有17個域被允許訪問shadow_t(/etc/shadow的type),其中有9個域據(jù)有寫權(quán)利。這17個域中有2個可以從用戶域(user domain)進入,他們是/usr/bin/passwd和 /sbin/unix_chkpwd(一個為無特權(quán)應(yīng)用程序提供密碼檢查的輔助程序,比如向鎖屏程序就需要使用到unix_chkpwd)。這17個域中的某些域是為一些不常見的應(yīng)用程序準(zhǔn)備的(如radius_t域就是為RADIUS服務(wù)器準(zhǔn)備的),所以,也就是說,就算除去這個不常用的域,一般的系統(tǒng)中還有16個可訪問的域能夠訪問/etc/shadow呢!
值得注意的是,F(xiàn)edora發(fā)型版的SELinux策略已經(jīng)變得越來越靈活;未來版本的策略也許會使何以訪問/etc/shadow的域超過17個,這取決于可調(diào)節(jié)選項的實際配置。還要注意的是,17這個數(shù)字是基于嚴(yán)格的策略設(shè)定之后而得出的,實際上一個默認(rèn)的安裝會大于這個數(shù)字。
在一個沒有SE的機器上,任何以root身份運行的進程都可以訪問/etc/shadow文件。這意味著任何被"SETUID root"的二進制代碼或以root身份運行的網(wǎng)絡(luò)服務(wù)守護進程,它們所產(chǎn)生的任何安全問題都將會是災(zāi)難性的。
SELinux允許我們限制這些守護進程只訪問其所需:
BIND只能在53端口提供服務(wù)、DHCP服務(wù)器可以使用原始套接字(raw network access)、DHCP客戶端也可以使用原始套接字并可以改變網(wǎng)絡(luò)接口,但是它們誰都別想訪問/etc/shadow,/home,/root等等這些重要的資源。
所以,在SElinux的情況下,如果BIND受到了危害,它最多也就是發(fā)送一些偽造的報文罷了。如果DHCPD受到了危害,最壞的可能就是你的ip地址分配被搞亂。這比root權(quán)力被遠程濫用好多了!
大家很清楚,一個進程可以援引另一個進程。
在這種情況下,拿DHCPD為例,DHCPD也許會嘗試援引 /sbin/unix_chkpwd對密碼進行強力攻擊。(But even that potential vulnerability is closed):SELinux能夠提供"過渡"規(guī)則,這種規(guī)則可以用來判斷各種域間過渡是否合法。有了"過渡"規(guī)則以后,由用戶執(zhí)行的屏幕保護程序可以順利過渡到/sbin/unix_chkpwd這樣一個特權(quán)域,然而DHCPD就別想了。
上述這些限制功能可以使你對系統(tǒng)的狀態(tài)了如指掌。如果你發(fā)現(xiàn)你的DHCP服務(wù)器有BUG,那你只要簡單的升級DHCP服務(wù)器到新版本并且確定每一個客戶端都能正常獲得IP地址就可以了?墒侨绻麤]有SE的話,你還要考慮你的新服務(wù)器是否已被黑客入侵并擦除了痕跡。
SElinux 對不同的域做了嚴(yán)格的隔離。我以前運行一個Debian系統(tǒng)有兩年時間,在這期間我開放了他的root密碼。最近兩個月我在一個Fedora系統(tǒng)上做同樣的事情。但這兩個系統(tǒng)已經(jīng)抵抗住了很多次以root身份的攻擊(見httphttp://www.coker.com.au/selinux/play.html)。(譯者注:這里有一些作者對其playmachine的介紹被忽略了)
為了給RHEL4做代碼測試,F(xiàn)edora core 2已經(jīng)嘗試集成了SELinux,但是默認(rèn)是關(guān)閉的。而且將來RHEL和Fedora Core的SE還會有非常大的差別的。我們計劃在RHEL中,將把SELinux的策略設(shè)置的比Fedora Core要嚴(yán)格,我們相信這樣做也符合用戶的要求。未來的Fedora版本的SELinux策略將會越來越嚴(yán)格,但再嚴(yán)格也不會超過RHEL。
SELinux深入研究:
SELinux的策略數(shù)據(jù)庫控制著SELinux的方方面面。它可以判斷一個程序可能會運行在哪個域中,還可以說明某個域可以訪問哪些資源。這種規(guī)定被叫做規(guī)則,一個典型的策略往往擁有100,000條規(guī)則。別被這數(shù)字嚇壞,我們根本不必去關(guān)心它,因為當(dāng)我們撰寫策略時,我們可以使用高級宏,這些高級宏的一行就能生成10,000條規(guī)則。除了宏以外,還有一些工具,使用他們可以分析這些生成的規(guī)則是否能達到你對安全的要求。其實再和設(shè)置每個文件的UNIX 權(quán)限位這樣的工作比起來,這100,000個規(guī)則也是相當(dāng)小的工作量了。
Fedora Core 2安全策略的目標(biāo)是滿足大多數(shù)用戶無需改動就可以工作的要求,但也有一些普通的簡單的選項可以調(diào)節(jié)策略,一般都是簡簡單單的一行選項。比如是否允許用戶通過dmesg閱讀內(nèi)核的日志,是否允許管理員(sysadm_r)直接通過SSH登陸或登陸圖形會話,還有是否允許用戶綁定TCP套接字。
那100,000個左右的規(guī)則存儲在一個大約2.6MB的文件中,當(dāng)系統(tǒng)啟動時隨內(nèi)核一起裝入內(nèi)存并占用同樣大小(大約2.6MB)的內(nèi)核空間。 Fedora Core 3默認(rèn)的strict策略有著多余290,000條規(guī)則,占用7MB的內(nèi)核空間。Fedora Core 3默認(rèn)的target策略有大約5,000條規(guī)則,占用150K的內(nèi)核空間。
目前,SELinux并沒有在內(nèi)存使用方面進行優(yōu)化;但現(xiàn)在對這些優(yōu)化工作已經(jīng)有了計劃和一些降低內(nèi)存使用的方法。如果你不打算使用某些守護進程,你可以簡單的將其對應(yīng)的策略文件刪除以便獲得占用空間更少的策略。2003年,在Ottawa舉辦的一次Linux討論會上,我提交過一篇文章,那是關(guān)于我在把 SELinux移植到HP iPAQ PDA上所做的工作的文章(在http //archive.linuxsymposium.org/ols2003/Proceedings/可以獲得)。
證明我可以使SELinux(且選擇 strict策略)很好的工作在一臺只有 64 MBs的RAM 和32 MBs 存儲空間的小平臺上,并且我相信我還可以使它運行在更小的平臺上。針對Fedora Core2系統(tǒng),我們只把目光定位在目前最常見的硬件平臺,從而得出了默認(rèn)的策略配置。但那些使用老機器的用戶們也許會希望配置出最小限度的策略以便減少內(nèi)存使用和提高性能。
在使用了SELinux的系統(tǒng)中,每一個進程的上下文都包含三個組成部分:一個ID(identity),一個角色(role)和一個域(domain)
ID是指這個進程的所有者,就是UNIX賬戶,但前提是這個賬戶必須被預(yù)先編譯到SELinux策略中去使SELinux認(rèn)識這個賬戶,不然的話SELinux默認(rèn)地將那些未知的系統(tǒng)進程ID記為 system_u ,將那些未知的用戶進程ID記為 user_u;角色用來判斷某個處于此角色的ID可以進入哪些域,還用來防止某個處于此角色的ID進入其它不該進入的域。比如, user_r角色就不允許進入 sysadm_t (重要的系統(tǒng)管理域)。
換句話說就是,那些只有 user_u ID的進程只能扮演 user_r 這個角色,而 user_r 這個角色 永遠不能被許可進入 sysadm_t 域。從而,那些只有 user_u 這個ID的人是別想進入 sysadm_t 域的。這些特色在缺省的Fedora Core2策略中并沒有完全使用,當(dāng)前我們只是把努力花在制定守護進程上,而對用戶域的策略限制的很少(targeted策略沒有對用戶登陸做任何限制)。
一個安全上下文可以像 identity:role:domain 這樣一種描述符的方式簡明的表現(xiàn)出來。
比如,典型的系統(tǒng)管理上下文可以表示成 root:sysadm_r:sysadm_t 。任何可以被訪問的對象都可以這樣來表示。值得注意的是,"域"其實也是和一個進程相對應(yīng)的一個"類型"。所以當(dāng)檢查某個進程是否有權(quán)向另一個進程發(fā)送信號(比如為ps命令檢閱/proc文件系統(tǒng))時,接受信號的進程的"域"就會充當(dāng)"域-類型"模型中的"類型"的角色,從而完成"域-類型"的規(guī)則檢查。即完成了進程間通信權(quán)限的檢查。由于對于文件還沒有使用角色這個機制,所以目前每個文件都被規(guī)定為object_r 角色(這個角色只是占個位置罷了,對策略沒有任何影響)。
文件的ID就是文件創(chuàng)建者的ID。constraints 策略源文件中使用這個方式來判斷一個訪問是否有權(quán)改變某個文件的上下文描述符。除非被訪問的文件的描述符中的ID字段和訪問該文件的進程的所有者ID字段相同,無論是改變前還是改變后,否則進程無權(quán)改變一個文件的上下文描述符。
例如,一個擁有 rjc:user_r:user_t 描述符的進程可以將一個擁有 rjc:object_r:user_games_rw_t 描述符的文件的描述符改為rjc:object_r:user_games_ro_t ,但是它無權(quán)改變一個擁有 john:object_r:user_games_rw_t 描述符的文件的任何屬性。
要想查看當(dāng)前運行的進程的上下文描述符,可以使用ps命令并加入 "-Z"選項,如例一:"ps ax -Z的輸出":
PID CONTEXT COMMAND
1634 root:user_r:user_t -bash
1662 root:user_r:user_t ps ax -Z
Example 1. Example Output of ps ax -Z
要想查看目錄下的文件的上下文描述符,可以使用ls命令并加入 "-Z"選項,如例一:"ls -Z的輸出":
drwxr-xr-x root root system_u:object_r:bin_t bin
drwxr-xr-x root root system_u:object_r:boot_t boot
drwxr-xr-x root root system_u:object_r:device_t dev
drwxr-xr-x root root system_u:object_r:etc_t etc
drwxr-xr-x root root system_u:object_r:home_root_t home
drwxr-xr-x root root system_u:object_r:root_t initrd
drwxr-xr-x root root system_u:object_r:lib_t lib
drwx------ root root system_u:object_r:lost_found_t lost+found
drwxr-xr-x root root system_u:object_r:default_t misc
drwxr-xr-x root root system_u:object_r:mnt_t mnt
drwxr-xr-x root root system_u:object_r:usr_t opt
?--------- ? ? oracle
dr-xr-xr-x root root proc
drwxr-x--- root root system_u:object_r:user_home_dir_t root
drwxr-xr-x root root system_u:object_r:sbin_t sbin
drwxr-xr-x root root selinux
drwxr-xr-x root root system_u:object_r:default_t srv
drwxr-xr-x root root sys
drwxrwxrwt root root system_u:object_r:tmp_t tmp
drwxr-xr-x root root system_u:object_r:usr_t usr
drwxr-xr-x root root system_u:object_r:var_t var
Example 2. Example Output of ls -Z
值得注意的是:對于那些沒有指定上下文的文件(一般是指那些不支持rwx標(biāo)簽的文件系統(tǒng),如/sys、/proc、/selinux),ls命令就不會顯示其上下文。對于不能用stat命令查看當(dāng)前狀態(tài)的那些文件系統(tǒng)。ls命令返回"?---------",其所有者和所有組也被標(biāo)記為"?",同樣的,他的上下文也不會顯示。
如例三所示,id命令將返回當(dāng)前shell的上下文
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:user_r:user_t
Example 3. Example Output of the id Command
如果你的SELinux系統(tǒng)使用了strict 策略,你會發(fā)現(xiàn)應(yīng)用程序做一些不正常的事情是很容易發(fā)生的。你經(jīng)常會發(fā)現(xiàn)某些程序中會有些bug,這些bug使程序做那些你的SELinux策略不允許其做的其它事情。
SELinux要求進程的上下文只有在被執(zhí)行的"那一刻"才允許改變。新進程的域和角色信息可以從exec系統(tǒng)函數(shù)的上下文和文件類型中自動獲得。進程也可以在執(zhí)行exec之前被指明上下文。這些過程自然受SELinux策略的控制,因為ID,角色和域都受SELinux策略的控制。
Fedora中策略的實現(xiàn):
從 Fedora Core 3 開始,SELinux的策略數(shù)據(jù)存儲于/etc/security/selinux/X/src/policy/目錄下(X指你選則的策略,可以是 "strict" 或者 "targeted")。在這個目錄中,你可以使用"make load"來編譯并裝在策略。也就是用那個命令將策略編譯成二進制格式并裝在到內(nèi)核中,并立即生效。除了裝如內(nèi)核,該命令還將策略的二進制格式存儲到 /etc/selinux/X/policy/policy.YY文件中,這里X指你選則的策略,可以是"strict" 或者 "targeted",YY是策略的版本號(Fedora Core 3支持最新的版本是18)。這是為了在系統(tǒng)開機的第一時間,init可以迅速裝載策略到內(nèi)核。/etc/selinux/config這個配置文件用來告訴init那些策略需要裝載。
當(dāng)你啟動一個SELinux時,init所做的第一件事就是掛載/proc文件系統(tǒng),并判斷SELinux是否被激活。init通過selinuxfs文件系統(tǒng)類型來判斷內(nèi)核中是否有SELinux,如果內(nèi)核中沒有SELinux或者內(nèi)核參數(shù)中 selinux=0 這一項,那么系統(tǒng)就會以一種叫做 non-SE的狀態(tài)被繼續(xù)引導(dǎo)啟動。如果發(fā)現(xiàn)了SELinux,那么/selinux虛擬文件系統(tǒng)將被創(chuàng)建,然后,init通過 /selinux/policyvers來檢查內(nèi)核所支持的SELinux版本。最后,相應(yīng)的策略數(shù)據(jù) /etc/selinux/X/policy/policy.YY就會被裝在到內(nèi)核中去了。
當(dāng)策略被裝載完之后,所有正在運行著的進程(指的就是init和內(nèi)核的所有線程)都將被指定 system_u:system_r:kernel_t 這樣一種上下文(內(nèi)核線程其實無論在什么時間被創(chuàng)建,其上下文都是system_u:system_r:kernel_t )。當(dāng)init裝載完策略之后,它還要重新執(zhí)行自己。策略中有一個規(guī)則叫domain_auto_trans(kernel_t, init_exec_t, init_t)。他的意思就是當(dāng) kernel_t 域執(zhí)行了一個據(jù)有 init_exec_t 類型的可執(zhí)行文件(如/sbin/init),那么該執(zhí)行文件對應(yīng)的進程的域就會自動過渡到 init_t 域(這是/sbin/init正確的所在域)。當(dāng)這些都完成之后,init就繼續(xù)完成那些通常的任務(wù)來完成機器的啟動。內(nèi)核線程自始至終都以 kernel_t 這個類型運行。
文件和目錄的上下文存儲于擴展屬性當(dāng)中 (XATTRs)。更多關(guān)于XATTRs的信息請參考attr(5), getfattr(1) 和 setfattr(1)的manpage。
簡單的說,一個XATTR就是硬盤上某個文件的所有權(quán),它由文件名和其它一些信息組成。對于每個 persistent 文件系統(tǒng)來說,它的每個文件或目錄的SELinux上下文就存儲在 security.selinux屬性當(dāng)中。雖然/proc文件系統(tǒng)不是persistent 文件系統(tǒng),但SELinux還是在幕后為其文件和目錄做了上下文標(biāo)記,只是不能用getxattr獲得罷了。和它對比,devpts文件系統(tǒng)(應(yīng)用于/dev/pts Unix98偽終端)中各個文件(各個偽終端)的上下文是可以通過getxattr來獲得的,并可以通過 setxattr 來更改每個設(shè)備的上下文(以便sshd等類似程序可以更改tty設(shè)備的上下文)。對于那些擁有固定存儲的文件系統(tǒng)(ext2, ext3, Reiserfs, XFS, vfat, 等等) 有兩種選擇用于設(shè)定文件上下文:
第一種:文件系統(tǒng)的類型就規(guī)定了其內(nèi)部每一個文件英據(jù)有統(tǒng)一的上下文;
第二種:使用 XATTRs 為每個文件標(biāo)記不同上下文。例如,在iso9660(CD-ROM)文件系統(tǒng)中的每一個文件的上下文都是system_u:object_r:iso9660_t ,這被稱做 genfs標(biāo)記。
Ext2, ext3 和XFS支持 XATTRs 而且 Fedora 系統(tǒng)也支持安全標(biāo)記名字空間,所以Fedora默認(rèn)使用 XATTRs 來標(biāo)記文件的上下文,但這也是可選方法之一。因為 直到 Reiser4發(fā)布之前 ,Hans Reiser對 支持XATTR沒多大興趣,所以Fedora的 ReiserFS 文件系統(tǒng)不能很好的支持SELinux標(biāo)記操作。也就是說,使用 ReiserFS 文件系統(tǒng)作為SELinux的根文件系統(tǒng)是不可能的事情。
XFS有一個與XATTRs相關(guān)的重要的問題:如果XATTRs不能被裝入超級塊(inode),那么它們就會被裝入數(shù)據(jù)塊,每一個超級塊就要使用一個數(shù)據(jù)塊用來裝 SELinux XATTR 。建立XFS時,mkfs.xfs在默認(rèn)情況下創(chuàng)建的數(shù)據(jù)塊大小為4096,超級塊大小為256(要是用于安裝 SELinux XATTR ,大約缺少30字節(jié))。這就是說,默認(rèn)的XFS文件系統(tǒng)中,每一個超級塊要占用4096字節(jié)用來裝載 SELinux XATTR ,這對于磁盤空間來說是嚴(yán)重的浪費!當(dāng)你使用"-i size=512"選項創(chuàng)建一個XFS文件系統(tǒng)時,超級塊的大小就變成了512字節(jié),這樣就可以將SELinux XATTR 裝入超級塊,即節(jié)省了空間,又提高的性能。512字節(jié)的超級塊也有可能給其它操作帶來好處。所以,如果你使用XFS并且打算將來使用 SELinux 的話,將超級塊的大小規(guī)定為512字節(jié)肯定是個好主意。
如果你使用的是較新的內(nèi)核(如最新的Fedora內(nèi)核或標(biāo)準(zhǔn)2.6.8.1內(nèi)核)并且使用最新的mount工具,那么當(dāng)你掛載一個文件系統(tǒng)時,有一個選項可以用來為整個文件系統(tǒng)指定上下文標(biāo)簽。比如你要掛載的文件系統(tǒng)是一個郵件池(mail spool),你可以使用"-o context=system_u:object_r:mail_spool_t"選項來掛載他,這樣會將其內(nèi)部的全部文件的上下文標(biāo)記為 system_u:object_r:mail_spool_t。如果你的這個郵件池很大,而且還是XFS文件系統(tǒng),這個方法還可以避免上一段所討論的 inode大小的問題。甚至對于ext3那樣的對XATTRs 開銷較小的文件系統(tǒng)來說,使用context=選項掛載文件系統(tǒng)也會進一步減少開銷,也可以避免為已經(jīng)建立的文件系統(tǒng)重新設(shè)置 SElinux上下文(如果文件系統(tǒng)中文件較多的話,會浪費很長的時間)。
Fedora的缺省SELinux策略:
在Fedora Core 3系統(tǒng)中,缺省的策略是"targeted "策略。對于此種選擇人們議論紛紛,問題在于我們希望能使盡可能多得人使用SELinux。如果人們覺得這玩意太可怕并且妨礙了人們做他們想做的事,那么人們會把它關(guān)掉。所以我們在這個時候?qū)幵笧榇蠖鄶?shù)人提供適量的保護策略,也不會為了少部分人而提供嚴(yán)格的保護策略。缺省的Fedora Core 3安裝會激活 SELinux 并使用"targeted "策略,你也可以通過運行 system-config-securitylevel 這個程序?qū)⒉呗愿臑楦訃?yán)格的 "strict "策略。
如果你安裝了策略的源文件包,那么策略的源文件就在/etc/selinux/X/src/policy/目錄里面(X指你選則的策略,可以是 "strict" 或者 "targeted")在這個目錄下有一個叫作domains/program/的子目錄,里面為每一個守護進程對應(yīng)了一個.te文件。你可以刪去那些你不使用也不打算使用的守護進程所對應(yīng)的.te文件,從而減少內(nèi)核內(nèi)存空間的使用,并提高性能。比如,你的系統(tǒng)沒有BIND服務(wù),你完全可以刪掉 named.te 文件。然后如果你使用"make load"命令重新裝載策略到內(nèi)核的話,內(nèi)核對內(nèi)存的使用量就會減少。然而也要小心,如果你誤刪了其它文件,那么你的系統(tǒng)將不能正常啟動進入 enforcing模式。所以目前,這種調(diào)節(jié)最好還是由內(nèi)行來做。
剛開始接觸SElinux的你,要注意一個內(nèi)核參數(shù),它用來決定你系統(tǒng)的內(nèi)核運行于 強制(enforcing )模式還是自由(permissive)模式,那就是"enforcing"參數(shù)。在自由模式下SELinux只是記錄他該做什么,而事實上并不做任何動作。在強制模式下SElinux會來真格的。如果你的策略有錯誤,在強制模式下系統(tǒng)可能會阻止你登陸!所以正常情況下你應(yīng)改在啟動時傳 enforcing=1 給內(nèi)核,當(dāng)你的SELinux策略有問題時,你可以臨時傳enforcing=0給內(nèi)核來查錯。在/etc/selinux/config這個init的配置文件中相應(yīng)的有一個選項,通過設(shè)置它,也可以使系統(tǒng)進入自由模式。
如果你打算中止使用SELinux,你可以使用 selinux=0 這個內(nèi)核參數(shù)。這會關(guān)閉SELinux的全部功能,就好像你的內(nèi)核并沒有把SElinux機制編譯進去一樣。所以當(dāng)系統(tǒng)出了問題時,比如系統(tǒng)崩潰,有些人就用此方法進行理事的恢復(fù)工作,但是我并不贊成這種做法。當(dāng)你臨時使用 selinux=0 進入系統(tǒng)后,你所建立的任何文件將不會擁有SELinux上下文標(biāo)記。這就意味著,如果你替換了諸如/etc/passwd 或/etc/shadow等重要文件,那么下一次進入SELinux時,系統(tǒng)就不會正常的工作。這不是嚴(yán)重的問題,當(dāng)你從CD引導(dǎo)時,做系統(tǒng)恢復(fù)時,或使用一個不支持 XATTRs備份軟件恢復(fù)系統(tǒng)時,同樣的問題也會發(fā)生。這個問題雖然可以通過為受到影響的文件系統(tǒng)重新標(biāo)記上下文來解決,但是使用 enforcing=0 來代替 selinux=0 不是更好嗎?
你可以編輯/etc/selinux/config來臨時關(guān)閉SELinux。
Fedora Core 2的釋放是SELinux一次重要的發(fā)展。他是第一套提供對SELinux完整支持的主流Linux發(fā)行版本。Fedora Core 3 也是一個重要的里程碑,因為他是第一套將SELinux作為默認(rèn)安裝選項的Linux發(fā)行版本。
Red Hat Enterprise Linux 4 見會跟隨 Fedora Core 的開發(fā)步伐,其對SELinux的支持也會得到進一步的發(fā)展。當(dāng) RHEL 4 發(fā)布時,她將會從 Fedora Core 系統(tǒng)和在Fedora 上學(xué)習(xí)SELinux的用戶那里獲得非常大的益處。
你可以在 irc.freenode.net的 IRC服務(wù)器上的#fedora-selinux頻道找到對SELinux的支持。還有 Fedora SELinux郵件列表 http://www.redhat.com/mailman/listinfo/fedora-selinux-list 。我經(jīng)常掛在#fedora-selinux上面,并也訂閱了郵件列表,我期望著在那里回答您提出的任何問題。
更多關(guān)于SELinux的資料:
NSA site for Security-Enhanced Linux: http://www.nsa.gov/selinux/
Fedora Core SELinux FAQ: http://people.redhat.com/kwade/fedora-docs/selinux-faq/
IRC channel for SELinux in Fedora Core: irc.freenode.net, #fedora-selinux
Mailing list for SELinux in Fedora Core: http://www.redhat.com/mailman/listinfo/fedora-selinux-list
SELinux play machine: http://www.coker.com.au/selinux/play.html
關(guān)于作者和譯者:
Russell Coker 從2003年就為RedHat的 SELinux 工程工作。在那之前他是一個獨立的顧問并在閑暇時間研究SELinux。他第一次了解SELinux 是在 2001 年Ottawa Linux 討論會上,當(dāng)時 NSA 的Pete Loscocco 針對SELinux做了一個演講。在2002 的OLS 上他介紹了他如何將SELinux移植到Debian Linux上. 作為移植工作的一部分, 他還撰寫了用于支持所有他使用的程序的策略, 這些策略后來成為了SELinux策略的主要來源. 在OLS2003 和 Linux Kongress 2002上他也發(fā)表了文章。
譯者:胡智江,就讀于江蘇大學(xué)通信工程系。從1999年開始使用Linux,2003年通過了RHCT認(rèn)證。對Linux系統(tǒng)和嵌入式系統(tǒng)都很感興趣。翻譯這篇文章主要是為了學(xué)習(xí)SELinux,然后和大家分享成果。希望大家對譯文的錯誤作出批評和指正。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/33629/showart_465118.html |
|