chroot - procesos y uid/gid

chroot - procesos y uid/gid

de Lucas Helguera Zanotta -
Número de respuestas: 1

Buenas, tenía unas dudas sobre el comando chroot dir command:

  1. El sandbox que crea, ¿es similar al de una máquina virtual o un container como los que usa docker?
  2. Afecta a todos los procesos o sólo a los que inicien a partir del parámetro command
  3. Un proceso en el sandbox, ¿se le puede cambiar el par UID/GID efectivo?
  4. Que quiere decir o a que se refiere la diapo 38/39 con que los procesos pueden ejecutar con un eUID de la aplicación?
En respuesta a Lucas Helguera Zanotta

Re: chroot - procesos y uid/gid

de Alejandro Blanco -

Hola Lucas.

Paso a responder los distintos puntos.

  1. chroot ejecuta el proceso que se pasa como parámetro command con un directorio raiz dir. Mientras se ejecute el proceso y todos los subprocesos de command solo se tendrá acceso al file system bajo dir. Es una forma de limitar los archivos a los que puede acceder el proceso (y todos los procesos hijos). No hace nada más.

    Muchas veces se suele usar el mecanismo de chroot con el de SUID, de forma que el proceso command ejecute con el effective uid del dueño.

    En forma resumida, chroot + SUID es una forma de bajo costo y performante de implementar un sandbox, pero con limitaciones. Limitado ya que no se restringe el espacio de memoria al que se accede y tampoco a nivel del espacio de procesos. Más aún, no es correcto decir que chroot + SUID es un mecanismo de virtualización, como si lo es docker.

    docker es un mecanismo de virtualización "ligera" en sus inicios asociado a Linux Containers (LXC). Mientras que los contenedores de LXC ejecuta sobre el kernel del sistema operativo los contenedores docker ejecutan sobre el docker engine. Además, a diferencia de LXC, docker incorpora mecanismos adicionales para facilitar su creación y gestión.

  2. Si, todos los procesos hijos de command se ejecutan con la misma raíz, así como también heredan el effective <uid, gid>

  3. Si, como ya mencioné en el primer punto, si el archivo command tiene la flag de SUID o SGID (Set user o group ID) ese proceso y todos los hijos van a ejecutar con el UID/GID del dueño del archivo.

    En la práctica algunos procesos o servicios que se los quiere asegurar, se los ejecuta con chroot y modificando el SUID/GID efectivo. Un ejemplo de esto es la implementación del servidor DNS implementado por el BIND del Internet System Consortium (ISC).

  4. Suponiendo que estas haciendo referencia a la diapo 30, creo que se aclara con los ejemplos que mencioné en los puntos anteriores. Si no es así avísame que es lo que no queda claro y amplio.

Saludos

Alejandro Blanco