問題
指派給某個 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 約束(以及原因))的更多詳細信息,請參閱丹·沃爾什的部落格文章。