Como posso restringir um aplicativo de usuário para sempre executar em um namespace de rede específico?

4

Eu preciso ser capaz de restringir um aplicativo de usuário para sempre executar em um namespace de rede específico. Supondo que eu tenha configurado minha configuração de rede como tal:

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

Com esta configuração, eu gostaria que qualquer usuário não-sudo¹ pudesse executar myapp de modo que myapp estivesse sendo executado dentro do namespace appns , como se o usuário tivesse executado

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

myapp lerá / gravará da interface tap0 em 10.0.0.x , comunicando-se com algo em 10.20.30.x .

Não consigo criar um wrapper de shell com setuid set (por esta resposta para permitir que o setuid seja ativado scripts de shell). Como eu iria sempre ter myapp sempre executado no namespace de rede appns ? Eu poderia tornar o nome do namespace configurável através de algum arquivo .conf?

¹ Esses usuários podem fazer parte de um grupo que é necessário para executar o aplicativo (por exemplo, semelhante a estar no grupo wireshark para executar o Wireshark).

    
por scottbb 27.02.2016 / 02:13

0 respostas