Você pode atribuir diferentes configurações de rede a um processo usando namespaces de rede linux . Em teoria, deve ser possível configurar o PAM * para definir cada usuário em seu próprio espaço para nome de rede separado, mas provavelmente é mais simples iniciar o aplicativo em questão em seu próprio espaço para nome.
Uma configuração comum pode descrever a criação de uma interface de ponte do Linux para conectar os namespaces à rede. Uma configuração um pouco mais simples pode ser arquivada usando o ipvlan (incluído nas versões do kernel 3.19 e acima) ou o dispositivo macvlan (para conexão sem fio, você não pode usar o macvlan ). A documentação do kernel do Linux tem um exemplo detalhado para configurar o ipvlan no namespace da rede.
Seguindo o exemplo na documentação:
Criar um namespace de rede ns0
ip netns add ns0
Criar escravo ipvlan no eth0 (dispositivo mestre)
ip link add link eth0 ipvl0 type ipvlan mode l2
Atribuir escravos ao namespace da rede ns0
ip link set dev ipvl0 netns ns0
Configurar o dispositivo escravo no namespace da rede ns0
ip netns exec ns0 ip link set dev ipvl0 up
ip netns exec ns0 ip link set dev lo up
ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
Forneça endereços de host e roteador em $IPADDR
e $ROUTER
.
Execute seu aplicativo no namespace da rede usando ip exec
ip netns exec ns0 <command>
Para executar o comando como usuário diferente, use o habitual su <user> -c -- <command>
.
* EDIT: Da teoria à prática: escrevi um módulo PAM simples para demonstrar como alterar o namespace da rede por usuário. Você precisa configurar um namespace de rede com o exemplo ip netns
acima e mapear usuários específicos para namespaces específicos. Posteriormente, todos os processos do usuário estarão em seu espaço para nome configurado, em vez do padrão. O código está hospedado no github . Use por sua própria conta e risco.
ubuntu 14.04
que eu só obter:Garbage instead of arguments "mode ...". Try "ip link help"
.