LinuxParty

Ratio:  / 1
MaloBueno 

¿Cómo puedo tener un servidor web mediante el comando chroot para aislar el sistema de archivos? ¿Cómo se utiliza un chroot para recuperar la contraseña o reparar un entorno Linux / Unix dañado?

Cada proceso / sistema en Linux y sistemas tipo Unix tiene directorio de trabajo actual llamado directorio raíz. Puede cambiar el directorio raíz a través de un comando llamado chroot, lo que cambia el directorio raíz para ambos procesos en ejecución actual y sus descendientes.

Un proceso/comando que se ejecuta en un entorno tan modificado no puede acceder a los archivos fuera del directorio raíz. Este entorno modificado se conoce comúnmente como "directorio encarcelado" o "jaula chroot". Sólo un proceso y el usuario privilegiado "root" puede usar el comando chroot. Esto es útil para:

  • La separación de privilegios de proceso sin privilegios, como servidor web o un servidor DNS.
  • La creación de un entorno de prueba.
  • Ejecutar programas antiguos o ABI programas en compatibilidad sin que se caiga aplicación o sistema.
  • La recuperación del sistema.
  • Vuelva a instalar el gestor de arranque como GRUB o LILO.
  • Recuperar la contraseña - Cambiar una contraseña olvidada y más.

Propósito

El comando chroot cambia sus directorios actuales y de raíz para el directorio proporcionado para luego ejecutar comandos, si se incluye, o una copia interactiva de la shell de registro del usuario. Tenga en cuenta que no todas las aplicaciones se pueden chrootear.

Sintaxis

La sintaxis básica es la siguiente:

chroot /path/to/new/root command

o

chroot /path/to/new/root /path/to/server

o

chroot [options] /path/to/new/root /path/to/server

Ejemplos del comando chroot

En este ejemplo, construiremos una mini-cárcel para el propósito de prueba con bash y el comando ls solamente. En primer lugar, establecer la ubicación "cárcel" con el comando mkdir:

$ J=$HOME/jail

Crear directorios dentro $J:

$ mkdir -p $J
$ mkdir -p $J/{bin,lib64,lib}
$ cd $J

Copiar /bin/bash and /bin/ls dentro de $J/bin/ utilizando el comando cp:

$ cp -v /bin/{bash,ls} $J/bin

El comando copy requiere las bibliotecas (librerías) en $J. Use ldd para compartir las dependencias de las librerías para bash.

$ ldd /bin/bash

Ejemplo de salida:

	linux-vdso.so.1 =>  (0x00007fff8d987000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000032f7a00000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000)
	libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000)
	/lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000)

Copias las librerías en $J dará las siguientes salidas:

$ cp -v /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 $J/lib64/

Ejemplo de salida:

`/lib64/libtinfo.so.5' -> `/home/vivek/jail/lib64/libtinfo.so.5'
`/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2'
`/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6'
`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'

Copiar en las librerías que "ls" requere en $J. Use el comando ldd para mostrar las librerías compartidas que requieren:

	linux-vdso.so.1 =>  (0x00007fff68dff000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00000032f8a00000)
	librt.so.1 => /lib64/librt.so.1 (0x00000032f7a00000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00000032fda00000)
	libacl.so.1 => /lib64/libacl.so.1 (0x00000032fbe00000)
	libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000)
	/lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032f7600000)
	libattr.so.1 => /lib64/libattr.so.1 (0x00000032f9600000)

Puede copiar las librerías una a una o intente hacer un bucle shell bash de la siguiente manera:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
for i in $list; do cp  -v "$i" "${J}${i}"; done

Ejemplo de salida:

`/lib64/libselinux.so.1' -> `/home/vivek/jail/lib64/libselinux.so.1'
`/lib64/librt.so.1' -> `/home/vivek/jail/lib64/librt.so.1'
`/lib64/libcap.so.2' -> `/home/vivek/jail/lib64/libcap.so.2'
`/lib64/libacl.so.1' -> `/home/vivek/jail/lib64/libacl.so.1'
`/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6'
`/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2'
`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'
`/lib64/libpthread.so.0' -> `/home/vivek/jail/lib64/libpthread.so.0'
`/lib64/libattr.so.1' -> `/home/vivek/jail/lib64/libattr.so.1'

Por último, hacer chroot en su nueva cárcel:

$ sudo chroot $J /bin/bash

Un chrooted bash y aplicación ls está bloqueado dentro de un directorio particular llamado $HOME/$J y es imposible trastear fuera del arbol de directorios, y ver su directorio "/" (raíz). Este es un gran impulso a la seguridad si lo configura correctamente.

[Continuará en una Segunda parte]

Comentarios   

0 # daniel 31-07-2014 16:38
Muy interesante, gracias:!
Responder | Responder con una citación | Citar
0 # tuxito 02-08-2017 22:07
comenzaaste bien , luego no se entiende nada porque tienen esa mania de usar variables asi lo hacen complicado para los beginner , rayos
Responder | Responder con una citación | Citar

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Encuesta de LinuxParty

Crees que la robotización traerá acarreada...

Que la gente abandonará las ciudades para vivir en los pueblos. - 16.4%
Que en los pueblos la robotización se frenará por los humanos - 13.1%
Que a la gente no les gustarán sus vecinos robots. - 3.3%
Que los negocios pequeños sufrirán la carencia de clientes humanos. - 9.8%
Que los humanos achacarán su desgracia a los robots y pasará algo grave. - 19.7%
Que los robots se levantarán contra los humanos y nos exterminarán. - 37.7%

Total votes: 61
The voting for this poll has ended on: 30 Sep 2017 - 00:00

Donar a LinuxParty

La mejor forma de darnos las gracias, es hacer una donación.


Tutorial de Linux

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política