
我有一個需要在網路命名空間(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 網域設定為授權的情況下實現此功能的最佳方法是什麼?