
Mi equipo tuvo un show-n-tell recientemente y presenté mis hallazgos sobreEstibador. Te expliqué cómo puedes instalar Docker con:
curl -sSL https://get.docker.com/ | sh
Luego le expliqué que, con esta instalación, debe anteponer a todos los comandos de Docker sudo
(por ejemplo sudo docker info
), a menos que ejecute:
sudo usermod -aG docker myUser
Una vez que hagas esto, puedes simplemente ejecutar, digamos, docker info
.
Otro ingeniero junior me preguntó cómo usermod
funcionaba este comando y se lo expliqué tal como entiendo a los usuarios/grupos de Linux:
- Todos los binarios de Docker están instalados en el sistema y pertenecen a un grupo llamado
docker
- Dado que
myUser
no es miembro de forma predeterminadadocker
, no tiene permisos rwx para hacer nada con los archivos binarios de Docker. - Entonces, la solución es usar lo
sudo
que le otorga permiso de root para el comando dado o otorgarmyUser
membresía aldocker
grupo .
Cuando lo expliqué de esta manera, un ingeniero superior me dijo muy bruscamente que estaba equivocado y que "es un poco más complicado que eso."
Entonces pregunto: ¿estoy entendiendo mal el modelo de seguridad de Linux? ¿Tiene razón el ingeniero senior? Si es así, ¿qué me estoy perdiendo (y qué diablos es "tan complicado")? ¿O estoy en lo cierto, en cuyo caso, alguien puede indicarme alguna documentación sólida para probarlo?
Respuesta1
Todos los binarios de Docker están instalados en el sistema y pertenecen a un grupo llamado Docker.
Incorrecto. El docker
binario es propiedad de root:root
:
$ stat `which docker`
File: ‘/usr/bin/docker’
Size: 16296881 Blocks: 31832 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 143202 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Dado que myUser no es miembro predeterminado de Docker, no tiene permisos rwx para hacer nada con los archivos binarios de Docker.
Los binarios son legibles y ejecutables por todos.
Entonces, la solución es usar sudo, que le otorga permiso de root para el comando dado, o otorgarle membresía a myUser en el grupo acoplable.
El servicio Docker utiliza un socket para escuchar comandos. El enchufe suele ser:
- situado en
/var/run/docker.sock
- propiedad de
root:docker
- y escribible en grupo, pero no legible ni escrito por otros:
Por ejemplo:
$ stat /var/run/docker.sock
File: ‘/var/run/docker.sock’
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 10h/16d Inode: 13619 Links: 1
Access: (0660/srw-rw----) Uid: ( 0/ root) Gid: ( 997/ docker)
EsoEs por eso que ser miembro del docker
grupo te permite ejecutar docker
comandos.
Tenga en cuenta que puede especificar qué grupo se debe utilizar como parámetro del docker
servicio. De man docker
:
-G, --group=""
Group to assign the unix socket specified by -H when running in dae‐
mon mode.
use '' (the empty string) to disable setting of a group. Default is
docker.
Entonces, notenerser docker
, pero lo es docker
por defecto.
Respuesta2
Si estás hablando de qué tan seguro es Linux y la vulnerabilidad que puede tener, sí. Si entiendo lo que estás preguntando con suficiente claridad, la respuesta es sí y mi explicación es que Linux, independientemente de la distribución que yo sepa, puede contraer virus como cualquier otro sistema operativo dependiendo de lo que instales o no. Tome Flash Player como ejemplo, incluso en Windows, presenta muchas fallas de seguridad en el sistema operativo, lo que lo hace más vulnerable que antes, cuando recién estaba listo para usar.
Si ejecutara Linux sin escritorio y todos esos otros privilegios sofisticados, si no me equivoco, sería más seguro que con todas nuestras aplicaciones favoritas y demás. No sé si mi respuesta ayudó, pero espero que así sea.