紅帽SELinux資料-翻譯---第二章-SELinux安全上下文
紅帽企業 Linux 7 SELinux
用戶和管理員指南
翻譯者:李天聰
第一章 SELinux安全上下文
進程和文件標有包含附加信息的SELinux上下文,例如SELinux 用戶、角色、類型以及級別(可選)。運行 SELinux 時,所有這些信息都用于做出訪問控制決策。在紅帽企業Linux中,SELinux 提供了基于角色的訪問控制(RBAC)、類型強制(TE)和多級安全性(MLS)(可選)。
下面是一個展示SELinux上下文的示例。SELinux 上下文用于進程、Linux用戶和文件,在運行SELinux的Linux操作系統上??梢允褂靡韵旅畈榭次募湍夸浀?SELinux 上下文:

SELinux 上下文遵循 SELinux user:role:type:level 語法。字段如下:
- SELinux user
SELinux用戶身份是策略已知的身份,它被授權用于一組特定的角色,以及特定的MLS/MCS 范圍。基于SELinux策略,每個Linux用戶都映射到一個 SELinux 用戶,這允許Linux用戶繼承對 SELinux 用戶的限制。這個被映射的SELinux用戶標識在SELinux上下文中用于該會話中的進程,以便定義他們可以進入的角色和級別。以root身份輸入以下命令以查看SELinux和Linux用戶帳戶之間的映射(您需要安裝policycoreutils-python軟件包):

輸出可能因系統而異:
“Login Name”列,列出了 Linux 用戶。
“SELinux User”列,列出了Linux 用戶映射到哪個SELinux用戶。對進程來說,SELinux用戶限制了可訪問的角色和級別。
“MLS/MCS Range”列,是多級安全性 (MLS) 和多類別安全 (MCS)。
“Service”列,確定正確的SELinux上下文,其中Linux用戶應該登錄到系統。默認情況下,使用星號(*)字符,即代表任何服務。
原文為:“The Service column determines the correct SELinux context, in which the Linux user is supposed to be logged in to the system. By default, the asterisk (*) character is used, which stands for any service.”,翻譯可能不準確。
- Role
SELinux的一部分是基于角色的訪問控制(RBAC)安全模型。角色是RBAC的一個屬性。SELinux用戶被授權使用角色,角色被授權用于域。角色服務作為域和SELinux用戶之間的中介??梢赃M入哪個角色決定了可以進入哪些域;最終,這將控制可以訪問哪些對象類型。這幫助減少權限升級攻擊的漏洞。
- Type
類型是類型強制的一個屬性。類型定義進程的域,或文件的類型。SELinux策略規則定義了類型如何相互訪問,無論是一個域訪問一個類型,或一個域訪問另一個域。僅當存在特定的允許SELinux策略規則時才允許訪問。
- Level
級別是MLS和MCS的屬性。一個MLS范圍是一對級別(也就是由開始級別到結束級別的一個范圍),如果(開始和結束)級別不同,則寫為“低級別-高級別”;如果(開始和結束)級別相同,則為“低級別”(或“高級別”,反正相同)( S0-S0 與 S0 相同)。每個級別是一個敏感度類別對,類別是可選的。
如果有類別,則級別為寫為“敏感度:類別集”。如果沒有類別,則寫為“敏感度”。
如果類別集是連續集合,則可以縮寫。例如,c0.c3 與C0,C1,C2,C3相同。/etc/selinux/targeted/setrans.conf文件將級別(s0:c0)映射為人類可讀的表格(即公司機密)。在紅帽企業Linux中,目標策略強制實施MCS,而在 MCS 中,只有一個靈敏度:s0。紅帽企業Linux 中的 MCS 支持 1024 種不同的類別:C0 到 C1023。S0-S0:C0.C1023是靈敏度S0,授權用于所有類別。
MLS 強制執行Bell-La Padula強制訪問模型,并用于標記安全性保護配置文件(LSPP)環境。要使用MLS限制,需要安裝 “selinux-policy-mls”軟件包,并將MLS配置為默認的SELinux策略。紅帽企業Linux附帶的MLS策略省略了許多不屬于評估項的進程域,因此,桌面工作站上的MLS是不可用的(不支持 XWindow系統);但是,來自上游SELinux參考策略的MLS策略可以構建包括所有程序域。有關MLS配置的更多信息,請參見第4.13節,“多級安全性(MLS)”。
原文為:“however, an MLS policy from the upstream SELinux Reference Policy can be built that includes all program domains.”,翻譯可能不準確。
2.1 域轉換
一個域中的進程通過執行一個具有新域入口點(entrypoint)類型的應用來進入這個新的域。SELinux 策略中的入口點(entrypoint)許可用于控制哪些應用程序可以進入一個域。下面是一個域轉換的例子:
- 一個用戶想要更改密碼。為此,他要運行passwd程序。/usr/bin/passwd 可執行文件被標記為passwd_exec_t類型:

passwd程序會訪問/etc/shadow文件,它被標記為shadow_t類型:

- SELinux策略規則規定允許在passwd_t域中運行的進程讀取和寫入被標記為 shadow_t 類型的文件。shadow_t類型僅適用于密碼更改所需的文件,包括/etc/gshadow、/etc/shadow和他們的備份文件。
- SELinux策略規則聲明passwd_t域擁有passwd_exec_t類型的入口點(entrypoint)權限
- 當用戶運行passwd程序時,用戶的shell進程將轉換為passwd_t域。使用SELinux,由于默認操作是拒絕,并且存在策略允許(以及其他一些內容)在passwd_t域中運行的進程訪問shadow_t類型的文件,所以passwd應用程序是被允許訪問/etc/shadow,并更新用戶密碼的。
此示例并非詳盡無遺,只是一個用作解釋域轉換的基本示例。雖然有一個實際的規則允許在passwd_t域中運行的進程訪問標記為shadow_t類型的文件,但是在進程可以轉換為新域之前,依然有一些其他的SELinux規則需要設置好。在此示例中,需要確保以下幾條:
- passwd_t域只能通過執行passwd_exec_t類型的程序來進入;只能從授權的共享庫執行,例如lib_t類型;并且無法執行任何其他應用程序。
- 只有被授權的域(如 passwd_t)才能寫入類型為shadow_t的文件。即使其他進程以超級用戶權限運行,只要它們不在passwd_t域中運行,這些進程也無法寫入類型為shadow_t的文件。
- 只有被授權的域才能轉換到passwd_t域。例如,sendmail程序在sendmail_t域中運行,它沒有正當理由去執行passwd,因此,它永遠無法轉換到passwd_t域。
- 在passwd_t域中運行的進程只能讀取和寫入被授權類型,例如etc_t或shadow_t類型的文件。這可以防止passwd應用程序被誘騙讀取或寫入任意文件。
2.2 進程的SELinux安全上下文
用“ps -eZ”命令,可以查看進程的SELinux安全上下文,下面是一個例子:
- 查看passwd進程的 SELinux 上下文
1) 打開一個終端。
2) 執行passwd程序,然后不要輸入新密碼。

3) 此時打開一個新的終端,然后輸入下面的命令,輸出將是下面這樣:

4) 然后再回到第一個終端窗口,按下“Ctrl+C”來結束passwd進程。
在這個例子中,當我們執行passwd程序時(這個程序文件是被標記為passwd_exec_t類型的),用戶的shell進程轉換成了passwd_t域,值得注意的是:進程的type被稱為“域”,文件的type被稱為“類型”。
要看所有進程的SELinux安全上下文,只要執行“ps -eZ”即可。注意,下面是輸出的一部分,并且可能跟你的系統上執行的結果不一樣。

其中的“system_r”是用于系統進程的,比如守護進程。類型強制(TE)會將每個域都分離開。
2.3 用戶的SELinux安全上下文
運行下面的命令可以查看與你的linux用戶相關的安全上下文:

在紅帽企業Linux中,Linux用戶的運行不受限制。這條SELinux上下文表Linux用戶映射到SELinux 用戶unconfined_u,以unconfined_r角色運行,并且在unconfined_t域中運行。s0-s0是一個 MLS 范圍,在本例中,它與s0相同。用戶有權訪問的類別由c0.c1023 定義,即所有類別(c0到c1023)。

浙公網安備 33010602011771號