Esta pregunta es similar a No tun device in lxc guest for openvpn . El LXC ha evolucionado y los contenedores LXC sin privilegios se introdujeron recientemente que ofrecen otra capa de seguridad contra la ruptura de la cárcel.
Necesito crear un servidor OpenVPN dentro de uno de los contenedores sin privilegios. No sé cómo dejar que el contenedor cree un dispositivo de red tun privado.
Anexé lxc.cgroup.devices.allow = c 10:200 rwm
a la ~/.local/share/lxc/mylxc/config
.
Después de comenzar el contenedor, mknod /dev/net/tun c 10 200
regresa mknod: '/dev/net/tun': Operation not permitted
dentro del contenedor.
Utilizo un Ubuntu 14.04 de 64 bits de vainilla como host y un contenedor creado con
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a amd64
¿Alguien logró hacer que el /dev/tun
dispositivo se ejecute bajo LXC sin privilegios?
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
al archivo de configuración del contenedor, como se describe aquí: superuser.com/a/1205662/130915 Luego, ejecuté openvpn como root con sudo dentro del contenedor.Respuestas:
Debe agregar explícitamente la capacidad CAP_MKNOD a su contenedor .
También puede intentar automatizar esto (si lo usa
systemd
dentro del contenedor) usando:que puede apuntar a un script en ejecución
mknod
.Usar
docker
esto es muy fácil de lograr. Por defecto, los contenedores no tienen privilegios .En este ejemplo, estoy extrayendo un
trusty
contenedor del registro:Y lo estoy iniciando en modo interactivo informando sobre la capacidad que necesito dentro:
Opuesto a:
fuente
CAP_MKNOD
después del trabajo.lxc.cap.keep = CAP_MKNOD
configuración a hace un errorSimultaneously requested dropping and keeping caps
. He comprobado todas las configuraciones añadidas de forma recursiva (ubuntu.userns.conf
,ubuntu.common.conf
ycommon.conf
) y se encontró sólo una línea conlxc.cap.drop
:lxc.cap.drop = mac_admin mac_override sys_time sys_module
. Pero eso es irrelevante, ¿no?