我有一个需要在网络命名空间(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 域设置为允许的情况下,实现这个工作的最佳方法是什么?