SELinux:允許程序在某個目錄中創建任何文件
我有一個腳本,當被呼叫時,會導致 的內容
dmesg
被寫入文件,文件名基本上是時間戳。SELinux 可以防止這種情況。按照 Fedora 的 SELinux 故障排除應用程序的建議,我嘗試了:grep dmesg /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp
但是,這似乎不起作用,可能是因為它創建的文件的名稱每次都不同。那麼我如何告訴 SELinux 允許
dmesg
在某個目錄中創建(和寫入)任何文件?或者告訴它有問題的腳本(以及它產生的所有程序)可以做到這一點?
您需要了解如何過濾 AVC 拒絕以及如何編寫自定義策略模組以允許訪問特定操作(在這種情況下是您編寫腳本)。
我將首先刪除您在上面插入的模組,開始一個新的:
# semodule -r mymodule.pp
之後,執行您的腳本:
# date && ./my_script.sh
該
date
呼叫對於根據時間戳過濾 AVC 拒絕很有用。接下來,使用通常的方法來調試 AVC 拒絕,它使用以下
ausearch(8)
命令:# ausearch -m avc -ts $timestamp | audit2allow
查看手冊頁以獲取有關您可以使用的開關的更多資訊,特別是
-ts
標誌。借助此資訊,您將了解根據現有政策被拒絕的內容。
現在您應該確定是否授予此訪問權限。假設您要授予訪問權限。您需要創建一個自定義策略模組來描述定義您要授予的訪問權限的規則。根據腳本的複雜性,這或多或少很簡單:
# ausearch -m avc -ts 10:40:00 | audit2allow -m my_script > my_script.te
這將產生一個
type enforcement
描述。您應該繼續檢查程式碼以確保其正確性並將
type enforcement
程式碼編譯為module
:# checkmodule -M -m -o my_script.mod my_script.te
模組必須打包成a
policy package
,你才能隨意載入和解除安裝:# semodule_package -o my_script.pp -m my_script.mod
現在,您可以使用以下命令載入策略:
# semodule -i my_script.pp
檢查它是否正確載入:
# semodule -l | grep my_script
然後,嘗試再次觸發拒絕,並查看審計日誌中是否有更多(不同)警報與同一程序有關。
程式碼的其他版本
type enforcement
將需要更新version
(1.0
) ,否則載入包將失敗。一旦編譯和打包,更新policy package
就完成了:# semodule -u my_script.pp
從 SELinux 開始有很多東西要學。一些有用的參考:
- 命令的聯機幫助頁。
- 還要檢查
apropos selinux
.來自 RHEL 文件
Dave Quigley 的精彩介紹: