我需要能够限制用户应用程序始终在特定的网络命名空间中运行。假设我之前已将网络配置设置为:
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
。
我无法使用setuid
set 创建外壳包装器(每这个答案允许在 shell 脚本上使用 setuid)。我将如何始终myapp
在appns
网络命名空间中运行?我可以通过某些 .conf 文件来配置命名空间名称吗?
1 这些用户可以是运行应用程序所需的组的一部分(例如,类似于wireshark
运行 Wireshark 的组)。