LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 

¿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]

Pin It

Comentarios  

+1 # daniel 31-07-2014 16:38
Muy interesante, gracias:!
Responder | Responder con una citación | Citar
+1 # 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:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías