為課程學生準備的文章翻譯
SELinux或SecurityEnhancedLinux是美國國家安全局(NSA)為防止惡意入侵而開發的增強存取控制機制。它在現有的自主(或選擇性)模型(英文Discretionary Access Control,DAC)之上實現了強制(或強制)存取控制模型(英文Mandatory Access Control,MAC),即讀取、寫入、執行的權限。
SELinux 有三種模式:
- 強制執行 — 基於策略規則的存取拒絕。
- 允許的 — 記錄違反政策的行為,這在強制模式下是被禁止的。
- 殘疾人 — 完全停用 SELinux。
預設情況下,設定位於 /etc/selinux/config
更改 SELinux 模式
若要找出目前模式,請執行
$ getenforce
若要將模式變更為寬容,請執行以下命令
$ setenforce 0
或者,更改模式 寬容 上 強制執行, 執行
$ setenforce 1
如果需要完全停用SELinux,那麼只能透過設定檔來完成
$ vi /etc/selinux/config
若要停用,請變更 SELINUX 參數,如下所示:
SELINUX=disabled
設定 SELinux
每個檔案和程序都標有 SELinux 上下文,其中包含使用者、角色、類型等附加資訊。如果這是您第一次啟用 SELinux,您首先需要設定上下文和標籤。分配標籤和上下文的過程稱為標記。要開始標記,在設定檔中我們將模式變更為 寬容.
$ vi /etc/selinux/config
SELINUX=permissive
設定模式後 寬容,在根目錄中建立一個空的隱藏文件,名稱為 autorelabel
$ touch /.autorelabel
並重新啟動計算機
$ init 6
注意:我們使用的模式 寬容 用於標記,因為使用該模式 強制執行 可能會導致系統在重新啟動時崩潰。
如果下載卡在某些文件上,請不要擔心,標記需要一段時間。標記完成並且系統啟動後,您可以轉到設定檔並設定模式 強制執行並且還運行:
$ setenforce 1
您現在已成功在電腦上啟用 SELinux。
監控日誌
您可能在標記過程中或系統運行時遇到了一些錯誤。要檢查您的 SELinux 是否正常工作以及它是否沒有阻止對任何連接埠、應用程式等的訪問,您需要查看日誌。 SELinux 日誌位於 /var/log/audit/audit.log
,但您不需要閱讀整篇文章來尋找錯誤。您可以使用audit2why實用程式來尋找錯誤。運行以下命令:
$ audit2why < /var/log/audit/audit.log
結果,您將收到錯誤清單。如果日誌中沒有錯誤,則不會顯示任何訊息。
配置 SELinux 策略
SELinux 策略是一組管理 SELinux 安全機制的規則。策略定義了針對特定環境的一組規則。現在我們將學習如何設定策略以允許存取禁止的服務。
1.邏輯值(開關)
開關(布林值)可讓您在執行時間變更策略的部分內容,而無需建立新策略。它們允許您無需重新啟動或重新編譯 SELinux 策略即可進行更改。
例子
假設我們想透過 FTP 讀取/寫入共享使用者的主目錄,並且我們已經共享了它,但是當我們嘗試存取它時,我們什麼也看不到。這是因為 SELinux 策略阻止 FTP 伺服器讀取和寫入使用者的主目錄。我們需要更改策略,以便 FTP 伺服器可以存取主目錄。讓我們看看是否有任何開關可以這樣做
$ semanage boolean -l
此命令將列出可用開關及其當前狀態(開啟或關閉)和說明。您可以透過新增 grep 來尋找僅限 ftp 的結果來最佳化搜尋:
$ semanage boolean -l | grep ftp
你會發現以下內容
ftp_home_dir -> off Allow ftp to read & write file in user home directory
該開關已停用,因此我們將啟用它 setsebool $ setsebool ftp_home_dir on
現在我們的 ftp 守護程式將能夠存取使用者的主目錄。
注意:您也可以透過執行以下操作來取得沒有說明的可用開關列表 getsebool -a
2. 標籤和上下文
這是實作 SELinux 策略最常見的方式。每個檔案、資料夾、進程和連接埠都標有 SELinux 上下文:
- 對於檔案和資料夾,標籤作為擴充屬性儲存在檔案系統上,可以使用以下命令檢視:
$ ls -Z /etc/httpd
- 對於進程和端口,標籤由核心管理,您可以按如下方式查看這些標籤:
過程
$ ps –auxZ | grep httpd
端口
$ netstat -anpZ | grep httpd
例子
現在讓我們看一個範例以更好地理解標籤和上下文。假設我們有一個 Web 伺服器,而不是目錄 /var/www/html/ использует /home/dan/html/
。 SELinux 會認為這違反了政策,您將無法查看您的網頁。這是因為我們尚未設定與 HTML 檔案關聯的安全性上下文。若要查看預設安全上下文,請使用以下命令:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
在這裡我們得到了 httpd_sys_content_t
作為 html 檔案的上下文。我們需要為目前目錄設定此安全上下文,目前目錄具有以下上下文:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
檢查檔案或目錄的安全上下文的替代命令:
$ semanage fcontext -l | grep '/var/www'
一旦找到正確的安全上下文,我們也會使用 semanage 來更改上下文。若要變更 /home/dan/html 的上下文,請執行下列命令:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
使用 semanage 更改上下文後,restorecon 命令將載入檔案和目錄的預設上下文。我們的網頁伺服器現在可以從該資料夾中讀取文件 /home/dan/html
因為該資料夾的安全上下文已變更為 httpd_sys_content_t
.
3.制定地方政策
在某些情況下,上述方法可能對您沒有用,並且您會在audit.log 中收到錯誤(avc/denial)。發生這種情況時,您需要建立本機原則。您可以使用audit2why 找到所有錯誤,如上所述。
您可以建立本機原則來解決錯誤。例如,我們收到與 httpd (apache) 或 smbd (samba) 相關的錯誤,我們 grep 錯誤並為它們建立策略:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
這裡 http_policy
и smb_policy
是我們建立的本機策略的名稱。現在我們需要將這些已建立的本機策略載入到目前的 SELinux 策略中。這可以如下完成:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
我們的本機策略已下載,我們不應再在audit.log 中收到任何avc 或denail。
這是我試圖幫助您了解 SELinux 的嘗試。我希望讀完這篇文章後您會對 SELinux 感到更加得心應手。
來源: www.habr.com