如何限制用户应用程序始终在特定的网络命名空间中运行?

如何限制用户应用程序始终在特定的网络命名空间中运行?

我需要能够限制用户应用程序始终在特定的网络命名空间中运行。假设我之前已将网络配置设置为:

ip tuntap add name tap0 mode tap
ip link add veth0 type veth peer name veth1
ip netns add appns

ip link set dev tap0 netns appns
ip link set dev veth0 netns appns
ip netns exec appns ip addr add 10.0.0.254/24 dev tap0
ip netns exec appns ip link set dev tap0 up
ip netns exec appns ip addr add 10.20.30.1/24 dev veth0
ip netns exec appns iptables -t nat -A POSTROUTING -o veth0 -j SNAT --to 10.20.30.1

ip link add name br1 type bridge
# eth1 previously exists, maps to physical interface
ip link set dev eth1 master br1
ip link set dev veth1 master br1
ip link set dev eth1 up
ip link set dev br1 up

通过此设置,我希望任何非 sudo 用户 都能够运行,myapp以便在命名空间myapp内执行appns,就像用户已经运行一样

> sudo ip netns exec appns sudo -u ${USER} myapp

myapp将从tap0处的接口读取/写入10.0.0.x,并与 处的某物进行通信10.20.30.x

我无法使用setuidset 创建外壳包装器(每这个答案允许在 shell 脚本上使用 setuid)。我将如何始终myappappns网络命名空间中运行?我可以通过某些 .conf 文件来配置命名空间名称吗?

1 这些用户可以是运行应用程序所需的组的一部分(例如,类似于wireshark运行 Wireshark 的组)。

相关内容