Instalando docker en modo rootless en Debian
Qué é o modo rootless de docker?
Pois o modo rootless permite executar docker sen permisos de administrador. Con isto redúcense as vulnerabilidades que poidamos ter por algún erro nun contenedor en tempo de execución. Reducindo unha posible escalada de privilexios.
Por qué?
Pois a seguridade é importante, polo que aos poucos é bo incrementala nos nosos equipos.
Cómo funciona?
Os contenedores en modo rootless executaranse dentro do namespace do usuario. Polo que se este usuario non é administrador, tanto o daemon como os contenedores correrán sen privilexios de root.
Prerrequisitos
Para poder facer esta instalación precisaremos:
- Os comandos newuidmap e newgidmap, que veñen ao instalar uidmap.
- /etc/subuid e /etc/subgid deben conter alomenos 65.536 UIDs e GIDs subordinados para o usuario. Por exemplo
$id -u 1001 $whoami testuser $grep ^$(whoami): /etc/subuid testuser:231072:65536 $grep ^$(whoami): /etc/subgid testuser:231072:65536
Neste exemplo o primer díxito 231072 sería o UID e o GID principais do usuario e o segundo díxito 65536 sería o rango ou cantidade de subordinados asignados.
- dbus-user-session no meu caso este paquete xa estaba instalado na distro.
- fuse-overlayfs recomendado pero non obrigatorio.
- slirp4netns cunha versión superior á v0.4.0
No caso de Debian temos que dar este paso, para outras distros pódese ver na documentación da web:
Engadir esta liña kernel.unprivileged_userns_clone=1
en /etc/sysctl.conf (ou /etc/sysctl.d) e executar sudo sysctl --system
.
Instalación
Se xa estivese instalado e o demo estivese en execución, teríamos que deshabilitalo.
$ sudo systemctl disable --now docker.service docker.socket
Se non estivese instalado executamos sudo apt get install docker docker-compose
E instalamos o modo rootless, o script de instalación obtémolo e executámolo, sen sudo, con curl -fsSL https://get.docker.com/rootless | sh
Nota: se nos dá un erro porque xa está correndo e nos pide que forcemos a instalación, podemos volver a correr $ sudo systemctl disable --now docker.service docker.socket
e pode que reiniciar o equipo.
Uso
Nota: No caso de que noso usuario non esté no grupo de docker, teremos que engadilo. Co seguinte comando usermod -aG docker user_name
Para executar o servizo farémolo con systemctl --user start docker
Para executalo no inicio do sistema precisaremos executar systemctl --user enable docker
e sudo loginctl enable-linger $(whoami)
Notas adicionais
Ao tentar levantar un contenedor na Raspbian con docker en modo rootless, lanzábame o seguinte erro, cousa que non me ocorreu en Debian:
$ docker-compose up
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
A solución a isto foi prober ao sistema, tal e como indica o erro, a variable de entorno DOCKER_HOST. Co seguinte comando export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
Despois diso o contenedor levantou sen problemas.
Fontes
- A web de docker: https://docs.docker.com/engine/security/rootless/
- Fio onde atopei a solución ao erro: https://forums.docker.com/t/problems-running-docker-daemon-as-non-root-user/123366/3
Artigos Relacionados:
- Instalar Fedora con BTRFS, cifrado e Snapshots activos
- AWK
- Mudar as DNS en Fedora
- Distrobox
- Instalar Fedora en VirtualBox
- Eliminar liñas nun ficheiro con sed
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Configurar acceso SFTP a un directorio
- Inicio de sesión automático en Alpine linux
- Crear un usuario con permisos restrinxidos para backups
- error: gpg failed to sign the data
- Xestionar varias claves ssh
- Cómo instalar Traefik con docker
- Configurar sshfs para acceder al sistema de ficheros de forma segura
- Securizar sudo no noso sistema
- Cómo instalar Raspberry OS
- Configuración e uso de GPG en linux
- Actualizar Invidious despois de que me dese erro bastante tempo
- Instalación de News en Nextcloud
- Instalación de GPodder Sync en Nextcloud
- Actualizar Nextcloud en Docker
- Configuración de Calibre web auto aloxado con Traefik
- Configuración de Jellyfin auto aloxado con Traefik
- Copias de seguridade con Borgbackup
- Controlar la temperatura del equipo con bash y telegram
- Instalación de Nextcloud
- Instalación de Pi-hole
- Configuración de Invidious auto aloxado con Traefik
- Configuración de SearXNG auto aloxado con Traefik
- Cómo instalar Traefik con docker
- Instalando Jekyll con Docker