Aislamiento de contenedores por namespaces
Esta pagina indica los pasos adicionales necesarios para aislar los contenedores con los user namespace de Linux.
Asegurarse de que Docker y Cyberwatch están instalados
Crear el usuario
cyberwatch:sudo useradd --create-home --shell /bin/bash cyberwatchEditar el archivo
/etc/subuid:cyberwatch:231072:65536 cyberwatch:1001:1La primera linea permite definir el mapeo de user/groups ids en un user namespace. Esta linea generalmente se agrega automáticamente por el sistema al crear el usuario, pero algunos sistemas no lo hacen automáticamente (algunas versiones de CentOS, por ejemplo).
Por ejemplo,
cyberwatch:231072:65536significa que el usuariocyberwatchpuede usar 65536 user ids a partir del id 231072.La linea
cyberwatch:1001:1permite que los archivos creados porrootpertenezcan al usuario con el id1001(reemplazar por el id del usuariocyberwatch).Editar el archivo
/etc/subgid:cyberwatch:231072:65536 cyberwatch:1001:1Reiniciar el servidor para que los cambios se tengan en cuenta:
sudo rebootConfigurar Docker para activar la opción
userns-remap:cat >> /etc/docker/daemon.json <<EOL { "userns-remap": "cyberwatch" } EOLReiniciar Docker:
systemctl restart docker
Carpeta de certificados nginx (Cyberwatch 5.31 y versiones posteriores)
A partir de Cyberwatch 5.31, los certificados de nginx se almacenan en la carpeta /etc/cyberwatch/ssl del host en lugar de un volumen Docker. Al arrancar, Cyberwatch asigna esta carpeta al usuario root (UID y GID 0) y restringe el acceso únicamente a su propietario.
Con userns-remap, el UID 0 del host no corresponde a root dentro de los contenedores. El contenedor nginx ya no puede leer sus certificados, lo que le impide arrancar (reinicios en bucle del contenedor, interfaz HTTPS no disponible).
Para corregir este comportamiento, hay que indicar a Cyberwatch el UID y el GID del host que corresponden a root en los contenedores.
Identificar el UID y el GID del host que corresponden a
rooten los contenedores. Cuandouserns-remapestá activo, Docker los muestra en el nombre de su directorio de datos activo:docker info --format ''El comando devuelve una ruta con la forma
/var/lib/docker/<uid>.<gid>, por ejemplo/var/lib/docker/165536.165536:rooten los contenedores corresponde entonces al UID165536y al GID165536en el host.Indicar estos valores en el archivo
/etc/cyberwatch/config.env:CBW_NGINX_UID=165536 CBW_NGINX_GID=165536Reiniciar Cyberwatch para aplicar los nuevos permisos:
sudo cyberwatch restart
Troubleshooting
Los problemas que pueden derivar de la activación de userns-remap suelen estar relacionados con los permisos en los volumenes.
Puede ser útil consultar los logs del contenedor de base de datos para descartar problemas de permisos:
sudo cyberwatch logs db
Desde Cyberwatch 5.31, si el contenedor nginx no arranca o si la interfaz HTTPS no está disponible tras la activación de userns-remap, comprobar la configuración de CBW_NGINX_UID y CBW_NGINX_GID (ver la sección Carpeta de certificados nginx más arriba). Los logs del contenedor nginx ayudan al diagnóstico:
sudo cyberwatch logs nginx