ユーザーアプリケーションが常に特定のネットワーク名前空間で実行されるように制限できる必要があります。以前にネットワーク構成を次のように設定したとします。
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(per) を使用してシェルラッパーを作成することはできません。この回答シェルスクリプトで setuid の使用を許可します。ネットワークネームスペースmyapp
で常にどのように実行しますか?appns
いくつかの.confファイルで名前空間名を設定できますか?
1これらのユーザーは、アプリケーションを実行するために必要なグループ(wireshark
Wiresharkを実行しているグループと同様)の一部である可能性があります。