在网络命名空间中运行 bash 脚本并强制执行 systemd 和 selinux?

在网络命名空间中运行 bash 脚本并强制执行 systemd 和 selinux?

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

相关内容