Entornos seguros con chroot
ei! ¿Cómo vamos? Ya llevo unos días hablando de lo mismo, ya sabéis el producto de monitorización Zabbix, así que hoy vamos a cambiar de tercio, esto es, el artículo de hoy va sobre las jaulas chroot, «buena cosa» que nos permitirá crear entornos seguros en sistemas GNU Linux, para probar software, sin perjudicar el sistema.
Entornos seguros con chroot
Ya hemos hablado en la web de los contenedores Linux, ya sabéis OpenVZ, LXC y Docker. La coincidencia con las jaulas chroot es que estas comparten el mismo kernel que el sistema anfitrion, al igual que nuestros amigos contedores. La diferencia es que chroot es bastante más antiguo, entre sus ventajas destaca que utiliza menos recursos pero es más laborioso de crear y gestionar.
Chroot nos permite crear un entorno de terminal huésped con su propio árbol de directorios, dentro de los del anfitrión. La jaula hereda las características de éste. También hereda las variables de entorno y alguna cosa mas. En cualquier caso hay que tener en cuenta que el árbol del anfitrión desaparece, añadido comandos, librerías y resto de elementos. Todo ello es substituido por lo que nosotros le indiquemos.
Al crear el nuevo entorno lo tendremos disponible a nuestra medida, donde utilizaremos el software que nosotros le indiquemos. Todo ello nos garantiza una jaula aislada, separada del sistema principal, perfecto para probar software de terceros sin perjudicar la estabilidad del sistema principal.
Manos a la obra
Su creación no es excesivamente complicada, ¿cómo lo hacemos? pues es bien fácil, en unos pocos pasos lo tendremos. Primero de todo creamos un directorio, donde irá la jaula en cuestión. Para el artículo lo he creado en /mnt, con el nombre /mnt/jaulatest.
mkdir /mnt/jaulatest
Antes de indicar al sistema que en el directorio queremos crear una jaula, debemos recrear en éste un entorno donde pueda funcionar una shell. Para conseguirlo debemos crear un directorio /bin, donde alojaremos los programas esenciales del sistema. De la siguiente manera:
mkdir /mnt/jaulatest/bin
cp /bin/bash /mnt/mijaula/bin/
Pero esto no es suficiente, necesitamos una larga lista de librerías, que utiliza bash. Para saber que librerías necesitamos utilizamos el programa ldd, que nos hará saber que librerías utiliza. En la imagen podéis ver el resultado:
Ya tenemos la lista con las librerías, ignoraremos la primera, ya que no la necesitamos. El resto las copiamos al directorio /mnt/jaulatest/lib64
mkdir /mnt/jaulatest/lib64
cp /lib64/libreadline.so.6 /mnt/jaulatest/lib64/
cp /lib64/libtinfo.so.5 /mnt/jaulatest/lib64/
cp /lib64/libdl.so.2 /mnt/jaulatest/lib64/
cp /lib64/libc.so.6 /mnt/jaulatest/lib64/
cp /lib64/ld-linux-x86-64.so.2 /mnt/jaulatest/lib64/
Y ya podemos crear la jaula:
su -c "chroot /mnt/jaulatest"
Si todo ha ido bien nos aparecerá la shell: «bash-4.2:#» , eso significará que ya estamos dentro de la jaula. Eeeep! No contemos victoria todavía, ahora mismo, a parte de utilizar el comando cd para navegar por las dos carpetas recién creadas, poco más podemos hacer. Esto es debido a que nos faltan muchos comandos ubicados originalmente en la carpeta /bin, así que nos tocará copiar la carpeta /bin o el programa concreto, y después volver a utilizar ldd, para ubicar sus librerías y copiarlas.
Cuanto más complejo sea el programa que queramos probar en la jaula más laborioso será su montaje, más programas y librerías tendemos que copiar.
Conclusiones
Desde mi punto de vista, es una buena opción para probar ciertos programas, sin comprometer la integridad del sistema. Pero, y esto es una opinión personal, con la tecnología de los contenedores que he mencionado al principio del artículo, incluso con la virtualización doméstica que ofrecen productos como VirtualBox, las jaulas han quedado en un estado cercano al desuso. Es cierto que utilizan menos recursos del sistema, pero también es más laboriosa su creación. La polémica está servida 😛
Espero que el artículo os haya parecido interesante. Podéis dejar un comentario con vuestras dudas o sugerencias, y no olvidéis compartir en un vuestras redes sociales habituales.
¡Nos leemos pronto!