使用 systemd 和 selinux 強制在網路命名空間中執行 bash 腳本?

使用 systemd 和 selinux 強制在網路命名空間中執行 bash 腳本?

我有一個需要在網路命名空間(ip netns exec)中運行的腳本,並且我已經編寫了一個 systemd 服務檔案。

然而它無法啟動,journalctl -xe 報告:

ip[7918]:執行「/usr/share/stats/run_collect.sh」失敗:權限被拒絕

服務文件正在執行命令(它是一個實例化服務)

ExecStart=/sbin/ip netns exec ns%i /usr/share/stats/run_collect.sh %i

Selinux 處於強制模式,為了讓它工作,我必須運行semanage permissive -a ifconfig_t.
如果沒有的話,腳本就不會被執行,

在我的不同嘗試中,我遇到了無法重現的情況,腳本啟動但隨後失敗,因為腳本啟動的 tcpdump 進程錯過了正確的 selinux 上下文以寫入 /var/log/stats/ 中的日誌檔案。 (我想當我發布 semanage fcontext -a -t ifconfig_exec_t /usr/share/stats/run_collect.sh並應用它時我就遇到了這種情況restorecon -Frvv /usr/share/stats/。儘管重複這個不起作用......)

在不將 ifconfig_t 網域設定為授權的情況下實現此功能的最佳方法是什麼?

相關內容