SELinux 在 CentOS 7 上的 Anacron postrotate 腳本中使用時拒絕“systemctl kill”
我正在使用名為 UrBackup 的備份軟體,我已將其配置為每天通過 cron.daily 輪換其日誌一次。日誌輪換後,軟體使用 postrotate 腳本向正在執行的程序發送帶有“systemctl kill”的 HUP 信號。但是,SELinux 否認了這個操作,我不知道如何修復它。
這是來自 /etc/logrotate.d 的 UrBackup 的整個 logrotate 配置文件:
"/var/log/urbackup.log" { daily rotate 30 missingok create 640 urbackup urbackup compress postrotate test -e /var/run/urbackupsrv.pid && kill -HUP 'cat /var/run/urbackupsrv.pid' || /bin/systemctl kill -s HUP urbackup-server.service endscript }
正如我所發現的,系統上正在執行以下有問題的 postrotate 腳本:
/bin/systemctl kill -s HUP urbackup-server.service
SELinux 阻止了這一點。以下是來自 /var/log/messages 的相關日誌條目:
Nov 14 03:33:33 backup4 kernel: type=1107 audit(1510648413.518:4407695): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc: denied { stop } for auid=0 uid=0 gid=0 path="/usr/lib/systemd/system/urbackup-server.service" cmdline="/bin/systemctl kill -s HUP urbackup-server.service" scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=system_u:object_r:systemd_unit_file_t:s0 tclass=service#012 exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?' Nov 14 03:33:33 backup4 logrotate: ALERT exited abnormally with [1]
因為 HUP 信號沒有發送到服務,所以它不知道日誌文件已經被輪換,並且它繼續無限期地寫入舊的(輪換的)日誌。
我嘗試使用 sealert 實用程序對此進行故障排除,以解釋 /var/log/audit/audit.log 中的所有錯誤。但是,即使日誌條目出現在 audit.log 中,它似乎也忽略了此錯誤。
我還嘗試以 root 身份互動執行“systemctl kill”命令。它完成沒有任何錯誤。手動執行 logrotate 也是如此:
logrotate -f /etc/logrotate.d/urbackup-server
該命令也可以正常執行。我唯一一次看到 SELinux 拒絕是在日常 Anacron 程序觸發 logrotate 時。
SELinux明確不允許“systemctl kill”命令嗎?如果是這樣,為什麼我可以互動執行它,但不能通過 cron 啟動?有什麼方法可以為這種情況添加異常,或者我可以通過其他方式將 HUP 信號發送到程序,以便它將寫入正確的日誌文件?
非常感謝您提供的任何幫助。
具體來說, context
logrotate_t
是不允許systemd_unit_file_t
的。您對它的互動式執行是在不同的上下文中。好奇它通過了pid文件測試。如果該 pid 文件在服務執行時不存在,請嘗試添加
PIDFile=/var/run/urbackupsrv.pid
到該urbackup-server.service
單元。在 SELinux 中有很多方法可以定義域轉換,但首先要嘗試使用 pid 文件。