Después de muchas vueltas y dolores de cabeza con los contenedores no privilegiados os traigo mi solución basada en la web de Straber desarrollador de lxc https://www.stgraber.org/2014/01/17/lxc-1-0-unprivileged-containers/ .
Funcionan a la perfección con el kernel 3.13.0-37-generic , ha de ser en ubuntu porque aunque se puede en debian, (siempre todo se puede en debian), os va a dar algún que otro dolor de cabeza ya que debian no dispone de los ficheros: /etc/subuids /etc/subgids
Creamos nuestro usuario para los contenedores no privilegiados: será cajita
Configuramos el fichero /etc/sudoers
# Host alias specification # User alias specification User_Alias MYADMINS = kao , cajita # Cmnd alias specification Cmnd_Alias INSTALL = /usr/bin/aptitude, /usr/bin/dpkg Cmnd_Alias USERMOD = /usr/sbin/usermod Cmnd_Alias CHMOD = /bin/chmod Cmnd_Alias EDITORS = /usr/bin/nano, /usr/bin/vi, /usr/bin/touch Cmnd_Alias LXC = /usr/local/bin/lxc-info, /usr/local/bin/lxc-ls, /usr/local/bin/lxc-create, /usr/local/bin/lxc-start,/usr/local/bin/lxc-sto$ Cmnd_Alias ARCHIVOS = /bin/cp , /bin/mv, /bin/mkdir, /bin/ls Cmnd_Alias USERS = /usr/sbin/adduser, /usr/sbin/deluser # User privilege specification root ALL=(ALL:ALL) ALL MYADMINS ALL= INSTALL , USERMOD, CHMOD, EDITORS, LXC, ARCHIVOS, USERS
Reboot y accedemos a la máquina directamente como cajita, ¡nada de su - !
Averiguamos cuales son los valores de nuestro subuid y subgid:
grep cajita /etc/sub* 2>/dev/null /etc/subgid:cajita:100000:65536 /etc/subuid:cajita:100000:65536
Bien esos serán los valores que mapearemos en nuestro usuario y en nuestros contenedores, si nuestro usuario tubiese:
/etc/subgid:stgraber:100000:45536 /etc/subuid:stgraber:100000:45536
Mapearimos esos
Una vez aclarado este punto que es bastante importante, (si se mapean los valores incorrectos no funcionrán) continuamos:
Actualizamos el sistema e instalamos lxc systemd y uidmap
sudo aptitude update && aptitude upgrade sudo aptitude dist-upgrade sudo aptitude install lxc systemd-services uidmap
Mapeamos nuesto usuario
sudo usermod --add-subuids 100000-165536 $USER sudo usermod --add-subgids 100000-165536 $USER sudo chmod +x $HOME
Creamos los ficheros de configuración con la conf necesaria
Fichero ~/.config/lxc/default.conf con el siguiente contenido:
lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx lxc.id_map = u 0 100000 65536 lxc.id_map = g 0 100000 65536
Y en el fichero /etc/lxc/lxc-usernet le damos permiso para que use el bridge de red y decimos cuanto bidges puede levantar :
cajita veth lxcbr0 10
Lo vemos en la terminal:
cajita@hostingseguro:~$ sudo usermod --add-subuids 100000-165536 $USER cajita@hostingseguro:~$ sudo usermod --add-subgids 100000-165536 $USER cajita@hostingseguro:~$ sudo chmod +x $HOME cajita@hostingseguro:~$ nano /.config/lxc/default.conf cajita@hostingseguro:~$ mkdir -p .config/lxc/ cajita@hostingseguro:~$ nano .config/lxc/default.conf cajita@hostingseguro:~$ sudo nano /etc/lxc/lxc-usernet
Si en este momento hacemos cat /proc/self/cgroup veremos esto:
11:hugetlb:/ 10:perf_event:/ 9:blkio:/ 8:freezer:/ 7:devices:/ 6:memory:/ 5:cpuacct:/ 4:cpu:/ 3:cpuset:/ 2:name=systemd:/user/1000.user/2.session
Si intentamos crear así los contenedores nos dará error.
Reiniciamos
Una vez logueados con cajita:
Creamos el contenedor
lxc-create -t download -n p1 -- -d ubuntu -r trusty -a amd64
Y listo, ya tenemos contenedores no privilegiados.
Para crear contenedores con lvm:
lxc-create -t download -n primerlvm -B lvm --lvname primercontainer --vgname vg-lxc --fssize 30G --fstype ext4 --dir /home/contenedores
Los usuarios no privilegiados no pueden crear contenedores con lvm.
Os saluda como siempre Ada_Lovelance.
Publicado el 16/10/2014 a las 15:29