Red Hat Training

A Red Hat training course is available for RHEL 8

1.4.3. Consideraciones especiales para los desarraigados

Aquí hay algunas cosas a tener en cuenta cuando se ejecutan contenedores como un usuario no root:

  • Como usuario no root del contenedor, las imágenes del contenedor se almacenan en su directorio principal ($HOME/.local/share/containers/storage/), en lugar de /var/lib/containers.
  • Los usuarios que ejecutan contenedores sin raíz tienen un permiso especial para ejecutarse como un rango de IDs de usuario y grupo en el sistema anfitrión. Sin embargo, no tienen privilegios de root en el sistema operativo del host.
  • Si necesitas configurar tu entorno de contenedores sin raíz, edita los archivos de configuración en tu directorio de inicio ($HOME/.config/containers). Los archivos de configuración incluyen storage.conf (para configurar el almacenamiento) y libpod.conf (para una variedad de configuraciones de contenedores). También podrías crear un archivo registries.conf para identificar los registros de contenedores disponibles cuando uses podman para extraer, buscar o ejecutar imágenes.
  • Un contenedor que se ejecuta como root en una cuenta sin root puede activar características privilegiadas dentro de su propio espacio de nombres. Pero eso no proporciona ningún privilegio especial para acceder a funciones protegidas en el host (más allá de tener UIDs y GIDs adicionales). Aquí hay ejemplos de acciones del contenedor que se podría esperar que funcionaran desde una cuenta sin raíz y que no funcionarán:

    • Cualquier cosa a la que quieras acceder desde un directorio montado desde el host debe ser accesible por el UID que ejecuta tu contenedor o tu solicitud para acceder a ese componente fallará.
    • Hay algunas características del sistema que no podrás cambiar sin privilegios. Por ejemplo, no puedes cambiar el reloj del sistema simplemente estableciendo una capacidad SYS_TIME dentro de un contenedor y ejecutando el servicio de tiempo de red (ntpd). Tendrías que ejecutar ese contenedor como root, saltándote tu entorno de contenedor sin root y utilizando el entorno del usuario root, para que esa capacidad funcione, como por ejemplo:

      $ sudo podman run -d --cap-add SYS_TIME ntpd

      Tenga en cuenta que este ejemplo permite a ntpd ajustar el tiempo para todo el sistema, y no sólo dentro del contenedor.

  • Un contenedor sin raíz no tiene capacidad para acceder a un puerto inferior a 1024. Dentro del espacio de nombres del contenedor sin raíz puede, por ejemplo, iniciar un servicio que exponga el puerto 80 de un servicio httpd desde el contenedor, pero no será accesible fuera del espacio de nombres:

    $ podman run -d httpd

    Sin embargo, un contenedor necesitaría privilegios de root, de nuevo utilizando el entorno de contenedores del usuario root, para exponer ese puerto al sistema anfitrión:

    $ sudo podman run -d -p 80:80 httpd
  • El administrador de una estación de trabajo puede configurarla para permitir a los usuarios exponer servicios por debajo de 1024, pero debe entender las implicaciones de seguridad. Un usuario normal podría, por ejemplo, ejecutar un servidor web en el puerto oficial 80 y engañar a los usuarios externos haciéndoles creer que fue configurado por el administrador. Esto generalmente está bien en una estación de trabajo, pero podría no estarlo en un servidor de desarrollo accesible por la red, y definitivamente no debería hacerse en servidores de producción. Para permitir que los usuarios se vinculen a los puertos hasta el puerto 80 ejecute el siguiente comando:

    # echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
  • Los contenedores sin raíz se basan actualmente en el establecimiento de rangos estáticos de subuid y subgid. Si se utiliza LDAP o Active Directory para proporcionar la autenticación de los usuarios, no hay una forma automatizada de proporcionar esos rangos de UID y GID a los usuarios. Una solución actual podría ser establecer rangos estáticos en los archivos /etc/subuid y /etc/subgid para que coincidan con los UIDs y GIDs conocidos en uso.
  • El almacenamiento del contenedor debe estar en un sistema de archivos local, porque los sistemas de archivos remotos no funcionan bien con los espacios de nombres de los usuarios sin privilegios.
  • En Shortcomings of Rootless Podman se encuentra una lista de las deficiencias de ejecutar podman y las herramientas relacionadas sin privilegios de root.