Jueves, 20 de Noviembre de 2008
Chroot y seguridad: Chroot y seguridad
· Chroot y seguridad
· Chroot y seguridad (II)
· Chroot y seguridad (III)
· Chroot y seguridad (IV)
· Chroot y seguridad (V); Librerías Compartidas
· Chroot y seguridad (y VI); FTP en CHROOT

Volver al indice de articulos
Chroot y seguridad. Por Jesús Cea Avión. 5-6-1998.

"Chroot" es una forma de confinar procesos a una determinada zona del árbol de directorios, impidiendo que dichos procesos accedan a servicios o documentos fuera de su entorno.

Ello resulta muy útil, ya que si el programa falla, su impacto será mucho más localizado que si se le permite acceder a todo el disco duro. Esto nos protege muchísimo no solo ante fallos de programación o problemas de funcionamiento, sino también, incluso, ante ataques y violaciones de seguridad. Resulta una práctica casi imprescindible en un entorno abierto en donde se ejecutan servicios conectados a internet, o cuando no estamos seguros del todo respecto a la fiabilidad de un programa que vamos a probar.

En casi todos los UNIX, el "chroot" está accesible a través de dos vías: la línea de comandos y la propia llamada al sistema. Antes de continuar os aconsejo que hagáis un "man -S8 chroot" y un "man -S2 chroot". La sintaxis es muy sencilla y, aparentemente, su uso también.

Pero las apariencias engañan, y la vida no es siempre tan fácil. En este artículo intentaremos desentrañar algunos de los misterios y mitos que rodean el "chroot", sus usos y sus limitaciones.

"Chroot", sea como comando o como llamada al sistema, solo puede ser invocado por el superusuario, lo cual es comprensible dado el tremendo poder que supone. El "chroot" cambia la raíz del sistema de ficheros, desde el punto de vista del proceso lanzado y de sus hijos, y los nuevos procesos no pueden ampliar sus privilegios, ya que un nuevo "chroot" sería relativo al actual. Es decir, estaría contenido en su interior.

Todos los ficheros que se abran tras un "chroot" son relativos al nuevo directorio raíz, que será el especificado en dicho comando. Es decir, a todos los efectos el directorio "barra", cabeza del nuevo árbol de archivos, será el directorio en cuestión. Por lo tanto sólo será posible acceder a ficheros y comandos shell contenidos en el nuevo entorno. Esta comprobación sólo se efectúa al abrir ficheros; un fichero en uso antes del "chroot" no se verá afectado. Esto resulta muy útil, por ejemplo, para que los logs de un servidor se almacenen fuera de su alcance. Como contrapartida, claro, hay que tener cuidado con no filtrar ningún fichero abierto innecesario al entorno "chroot".

Es muy importante recordar que no se puede acceder a ningún fichero externo al "chroot". Y no basta con copiar los ejecutables que vamos a usar. Muchas veces dichos ejecutables necesitan de librerías dinámicas, con lo que es preciso o bien compilar el código indicando enlazado estático, o bien replicar las librerías dinámicas en el entorno "chroot". No sirve crear un enlace simbólico, ya que en el "chroot" la referencia indicada no tiene sentido (normalmente se apuntará a sí misma). Se pueden o bien copiar las librerías necesarias o bien, más recomendable, crearles un enlace "hard" si estamos trabajando dentro de la misma partición. Lo mismo se aplica a posibles dispositivos bajo "/dev", y similares. Si necesitamos crearlos dentro podemos usar el comando "mknod".