Linux Containers lxc No privilegiados howto paso a paso


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

Paso 1

Creamos nuestro usuario para los contenedores no privilegiados: será cajita

Paso 2

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

Paso 3

Reboot y accedemos a la máquina directamente como cajita, ¡nada de su - !

Paso 4

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:

Paso 5

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

Paso 6

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

Paso 6

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

Comentarios en el post


Esta web utiliza cookies, puedes ver nuestra la política de cookies, aquí Si continuas navegando estás aceptándola
Política de cookies +