Esta pergunta é semelhante ao No tun device no lxc guest para openvpn . O LXC evoluiu e os contêineres LXC sem privilégios foram introduzidos recentemente, oferecendo outra camada de segurança contra a quebra da prisão.
Preciso criar um servidor OpenVPN dentro de um dos contêineres sem privilégios. Não sei como deixar o contêiner criar um dispositivo de rede tun privado.
Anexei lxc.cgroup.devices.allow = c 10:200 rwm
ao ~/.local/share/lxc/mylxc/config
.
Após iniciar o contêiner, mknod /dev/net/tun c 10 200
retorna para mknod: '/dev/net/tun': Operation not permitted
dentro do contêiner.
Eu uso um Ubuntu 14.04 64bit de baunilha como host e um contêiner criado com
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a amd64
Alguém conseguiu fazer o /dev/tun
dispositivo rodar sob LXC sem privilégios?
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
ao arquivo de configuração do contêiner, como descrito aqui: superuser.com/a/1205662/130915 Em seguida, executei o openvpn como root com sudo dentro do contêiner.Respostas:
Você precisa adicionar explicitamente o recurso CAP_MKNOD ao seu contêiner .
Você também pode tentar automatizar isso (se você usar
systemd
dentro do contêiner) usando:o que pode apontar para um script em execução
mknod
.Usar
docker
isso é muito fácil de realizar. Por padrão, os contêineres não têm privilégios .Neste exemplo, estou puxando um
trusty
contêiner do registro:E estou iniciando no modo interativo, informando sobre a capacidade de que preciso dentro:
Ao contrário de:
fonte
CAP_MKNOD
depois do trabalho.lxc.cap.keep = CAP_MKNOD
configuração comete um erroSimultaneously requested dropping and keeping caps
. Eu verifiquei todas as configurações de forma recursiva adicionado (ubuntu.userns.conf
,ubuntu.common.conf
ecommon.conf
) e encontrou apenas uma linha comlxc.cap.drop
:lxc.cap.drop = mac_admin mac_override sys_time sys_module
. Mas isso é irrelevante, não é?