![使用 systemd 和 selinux 強制在網路命名空間中執行 bash 腳本?](https://rvso.com/image/1520732/%E4%BD%BF%E7%94%A8%20systemd%20%E5%92%8C%20selinux%20%E5%BC%B7%E5%88%B6%E5%9C%A8%E7%B6%B2%E8%B7%AF%E5%91%BD%E5%90%8D%E7%A9%BA%E9%96%93%E4%B8%AD%E5%9F%B7%E8%A1%8C%20bash%20%E8%85%B3%E6%9C%AC%EF%BC%9F.png)
我有一個需要在網路命名空間(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 網域設定為授權的情況下實現此功能的最佳方法是什麼?