CentOS7 SELinux 似乎不遵守 MCS 類別

CentOS7 SELinux 似乎不遵守 MCS 類別

問題

指派給某個 SELinux MCS(多類別安全)類別的檔案可以由未指派給該類別的使用者讀取,這表示 MCS 無法在我的系統上運作(執行 CentOS7,具有最小安裝,SELinux強制執行有針對性的政策 )。

背景

我最近為自己購買了一台小型虛擬伺服器,這激發了我第一次深入研究安全系統設定和處理 SELinux。我打算透過在 docker 容器中運行它們來分離將在伺服器上運行的應用程式(主機本身在 CentOS7 上運行)。我很高興得知每個 docker 容器(預設)在啟動時都會分配隨機 SELinux MCS 類別,以便為分離提供額外的安全層。為了讓自己熟悉 SELinux 的一般情況和 MCS 的具體工作原理,我在我的一台家用電腦上設定了一個虛擬機器並進行了一些嘗試。這樣做時,我注意到 MCS 沒有按我的預期工作,所以要么我遺漏了一些重要的東西,要么某處存在配置問題。

我做了什麼

為了測試 MCS,我遵循 [0] 和 [1] 中的說明。首先,我確保 SELinux 確實運行在執行模式並與有針對性的政策使用sestatus.遵循[0],我創建了一個mcsuser_uSELinux 用戶和 CentOS 用戶約翰,,約翰簡,然後我將其映射到mcsuser_u使用semanage login。我還將類別分配給 [0] 中列出的用戶,最終得到:

Login Name | SELinux User | MLS/MCS Range

john | mcsuser_u | s0-s0:c122
jane | mcsuser_u | s0-s0:c123
johnjane | mcsuser_u | s0-s0:c122,123

semanage login -l

mcsuser_u | MLS/MCS Level: s0 | MLS/MCS Range: s0-s0:c0.c1023 | SELinux Roles: user_r

semanage user -l

我製作了使用者的主目錄約翰世界可讀 ( chmod 707),登入為約翰並創建了一個文字文件約翰文本。然後我指定了類別c122到該文件(仍然以約翰)。我還可以分配類別c120到文件中,即使約翰不屬於c120他自己,根據[0]這是不可能的(我隨後刪除了c120再次)。ls -lZ johntext顯示輸出

-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext

按照上述步驟,我以使用者身分登入,並嘗試讀取該文件約翰文本使用cat命令,我能夠做到這一點。

對我來說,這清楚地表明 MCS 沒有按照我的預期工作(僅當請求存取的使用者俱有相同類別時才允許存取特定類別的物件)。

解決方案?

我現在有點困惑,不知道錯誤出在哪裡,所以向大家尋求建議。這可能只是我的誤會或誤解,但我現在無法弄清楚,這對我來說沒有意義。就我看來,有以下幾種可能:

1. 我必須手動啟動 MCS 檢查或使用不同的策略

我沒有找到任何關於是否必須手動啟動 MCS 支援的信息,因此假設如果我分配標籤(基於 [1])它就可以工作。其他來源 [2] 建議在以下位置啟用 MCS有針對性的(至少)Fedora 和 RHEL 上的政策,我認為 CentOS 上的政策沒有什麼不同。

2.我這邊配置有誤

我在設定使用者類別semanage login或為文件分配類別時可能犯了一些錯誤。

3.它剛剛壞了

..這會很糟糕

參考連結

0:https://selinux-mac.blogspot.de/2009/06/multi-category-security.html

1:https://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html

2:http://selinuxsymposium.org/2006/slides/08-mcs.pdf

滿sestatus輸出

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

[編輯]:

我剛剛在運行 CentOS 6.9 的虛擬機器上測試了相同的步驟,一切都按預期運行。現在,我因此假設 CentOS 上的 SELinux 中存在一些有關 MCS 的錯誤,或者需要調整的策略/配置的一些未記錄的變更。我仍然懷疑下一步應該採取什麼明智的步驟才能使其按預期工作。

答案1

顯然,SELinux 策略從 CentOS6 到 CentOS7 發生了變化,MCS 約束不再適用於所有類型。對於要遵守 MCS 的給定類型,mcs_constrained_type必須透過自訂策略將屬性新增至該類型。有關如何執行此操作(以及預設情況下哪些類型受 MCS 約束(以及原因))的更多詳細信息,請參閱丹·沃爾什的部落格文章

相關內容