Como iniciar programas externos no contêiner “unshare”, com envio de descritores de arquivos?

2

Com unshare ou lxc-execute , posso criar ambientes com namespaces separados de rede / montagem / qualquer um. Mas iniciar programas lá de fora não é realmente direto. Normalmente, rede e sshd são usados, eu também uso o socket UNIX com socat executando shell para iniciar novos processos.

Já existe um programa que permite iniciar facilmente aplicativos dentro de compartilhamentos? Espera-se que o programa cliente conecte-se ao soquete UNIX e envie (SCM_RIGHTS) stdin / stdout / stderr para o servidor. Espera-se que o servidor seja iniciado dentro do compartilhamento não compartilhado e receba o argv, o ambiente e o fds e inicie-os.

Algo assim:

# unshare -nm /usr/local/bin/dived /var/run/myunshare.socket
# # (Non-abstract unix sockets are preserved across "unshare -m")
# dive /var/run/myunshare.socket ping 8.8.8.8
connect: Network is unreachable
    
por Vi. 18.05.2012 / 16:56

1 resposta

0

Programa criado para fazer isso sozinho:

link

Exemplo:

# umask 0000
# # Create no-network namespace
# unshare -n -- dived /var/run/no_network.socket -d

$ dive /var/run/no_network.socket bash
$ # Now inside unshare. Shell should work well, can start X apps, etc.
$ ping 127.0.0.1
connect: Network is unreachable
$ # actually no network
$ id
$ uid=1000(vi) gid=1000(vi) groups=1000(vi),20(dialout),21(fax),...
$ # dived set up groups for us
$ exit
exit
$ # "undove"

# killall dived
    
por 19.05.2012 / 03:17

Tags