Selinux
為什麼 selinux 策略適用於從 cronjobs 執行的命令(例如:logrotate),而不適用於直接從命令行執行的命令?
為什麼 selinux 策略適用於從 cronjobs 執行的命令(例如:logrotate),而不適用於直接從命令行執行的命令?
當我從命令行手動執行 logrotate 時,它執行良好。但是當它從 cronjob 執行時,我在 audit.log 中收到一個錯誤,提醒我 selinux 阻止了對 www 等的訪問。
這是為什麼?以及如何模擬它從 cronjob 執行以進行測試?
cron
執行時logrotate
,SELinux 將其限制為 logrotate_t “類型”。該“類型”被限制修改其他文件類型(也稱為“逃避限制”)。當您執行 logrotate 時,您(很可能)從“無限制”類型開始,這意味著它所說的 -
logrotate
允許該程序修改文件。您可能還想logrotate
重新啟動或發出信號(例如,通過 postrotate);SELinux 也可能限制該活動。我在這裡的建議是告訴 SELinux 允許(“允許”)logrotate_t 類型以逃避限制,其中:
semanage permissive -a logrotate_t
這樣做是一種適度的解決方案,介於關閉 SELinux和微調允許您需要的限制逃逸的策略(可能使用自定義標籤)之間。要恢復此更改,請使用
semanage permissive -d logrotate_t
.模擬 cron 啟動的程序的最佳方法是將作業放入 cron。或者,我知道
runcon
,儘管我無法成功使用它。