lunes, 22 de abril de 2013

Cambiando contexto de usuario con sudo y chroot

chroot

Supongamos que desea ejecutar un comando dentro de un chroot como otro usuario. ¿Cómo se hace? En este artículo exploraremos el camino para lograrlo . No es algo evidente . Por tanto iré explicando paso a paso pues lo más importante es familiarizarse con los comandos de los sistemas Unix y entender porqué se hace lo que se hace cuando se hace. Si desea conocer acerca de otros comandos le sugiero leer también otros artículos acerca de comandos Unix . Si este tutorial le resulta interesante le invito a suscribirse a este blog mediante RSS . ¿Listos? ¡ Comenzamos !

Comenzamos echando un vistazo a man chroot . La sinopsis dice que el modo de uso es

$ chroot /new-root-path`

Bien , ya podemos ejecutar un comando dentro de un chroot como root . ¿Cómo hacemos para que cambie de usuario? Para eso está el comando su .

$ chroot /new-root-path su - user

Por ahora todo bien . Ya logramos ejecutar su dentro del chroot como user , pero ... se nos presenta un prompt interactivo . Al leer la documentación de man su la sinopsis dice

$ su - user cmd

¡Perfecto! Combinandolo todo nos queda :

$ chroot /new-root-path su - user sh

Sin embargo todavía nos quedamos dentro de un shell interactivo . ¿Como nos deshacemos del prompt? Al leer man sh aparece la opción sh -c "command args args..." , que lanzará un shell no interactivo y ejecutará el comando con ciertos argumentos . Exaxtmente lo que se buscaba . Combinandolo todo nos queda :

$ chroot /new-root-path su - user sh -c "command args"

Podría parecer que ya está todo bien , pero hay un detalle . Si el usuario tiene un [entorno personalizado] entonces el mismo no se inicializará automáticamente . Hay que hacerlo manualmente .

$ chroot /new-root-path su - user sh -c ". ~/.profile; command args"

Esto hace lo que se pide :

  1. crea un chroot en /new-root-path
  2. ejecuta el comando con ciertos argumentos en ese contexto
  3. devuelve el control a la sesión activa del shell

Pero ... bueno ... como no es aconsejable estar trabajando como root de forma cotidiana , ejecutamos todo esto con sudo

$ sudo chroot /new-root-path su - user sh -c ". ~/.profile; command args"

De esta forma es posible ejecutar ejecutables de fuentes desconocidas y codificar en un entorno seguro .

Si desea conocer otros trucos relacionados con comandos de Unix la inviación esta hecha para que se suscriba a este blog mediante RSS

No hay comentarios:

Publicar un comentario