Difference between revisions of "Change root (Español)"

From ArchWiki
Jump to: navigation, search
(Ejemplo)
(Ejemplo)
Line 141: Line 141:
 
useradd -m -s /bin/bash ''user''
 
useradd -m -s /bin/bash ''user''
 
passwd ''user'' # set a password
 
passwd ''user'' # set a password
# in a shell outside the chroot:  
+
# en una shell fuera del entorno chroot:  
 
sudo pacman -S xorg-server-xnest
 
sudo pacman -S xorg-server-xnest
 
Xnest -ac :1
 
Xnest -ac :1
# continue inside the chroot:  
+
# continuar dentro de chroot:  
 
pacman -S xterm
 
pacman -S xterm
 
xterm
 
xterm

Revision as of 16:19, 6 February 2013

Chroot es el proceso por el que se cambia el directorio root del disco aparente (y el actual proceso en marcha y sus descendientes) a otro directorio root. Al cambiar a otro directorio root no se puede acceder a los archivos y órdenes fuera de ese directorio. Este directorio se llama jaula chroot. El cambio de root se hace comúnmente para el mantenimiento del sistema, como puede ser volver a instalar el gestor de arranque o restablecer una contraseña olvidada.

Requisitos

  • Tendrá que arrancar desde otro entorno Linux para funcionar (por ejemplo, desde un LiveCD o un medio flash USB, o desde otra distribución Linux instalada).
  • Se requieren privilegios de root con el fin de efectuar chroot.
  • Asegúrese de que la arquitectura del entorno de Linux que haya arrancado coincide con la arquitectura del directorio root que desea introducir (es decir, i686, x86_64). Puede encontrar la arquitectura de su entorno actual con la orden:
# uname -m
  • Si necesita algún módulo del kernel cargado en el entorno chroot, cárguelos antes de efectuar el cambio de root. Dichos módulos pueden ser útiles para inicializar la partición de intercambio (swapon /dev/sdxY) y para establecer una conexión a Internet antes de efectuar chroot.

Montar las particiones

La partición root del sistema Linux, donde se está tratando de efectuar chroot, necesita estar montada previamente. Para saber el nombre asignado por el kernel a dicha partición, ejecute:

# lsblk /dev/sda

También puede ejecutar la siguiente orden para tener una idea de la distribución de las particiones.

# fdisk -l

Ahora cree un directorio (por ejemplo, arch) en el que desee montar la partición root (por ejemplo, la partición sda3) y móntela:

# mkdir /mnt/arch                 # crea el directorio
# mount /dev/sda3 /mnt/arch       # monta la partición root

A continuación, si tiene particiones separadas para otras partes del sistema (por ejemplo, /boot, /home, /var, etc.), debe montarlas, de este modo:

# mount /dev/sda1 /mnt/arch/boot/
# mount /dev/sdb5 /mnt/arch/home/
# mount ...

Si bien es posible montar sistemas de archivos después de efectuar chroot, es más conveniente hacerlo antes. La razón de esto es que se tendrán que desmontar los sistemas de archivos creados temporalmente después de salir de la jaula, así que este procedimiento le permite desmontar todos los sistemas de archivos con una sola orden. Por otro lado, esto también permite un cierre más seguro. Debido a que el entorno de Linux externo conoce todas las particiones montadas, puede desmontarlas con seguridad durante el apagado.

Cambiar root

Monte los sistemas de archivos temporales:

Nota: Usando el nuevo lanzamiento de Arch (2012), las órdenes mount siguientes pueden reemplazarse con arch-chroot /mnt/arch, si la partición root se montó en ese lugar. Por supuesto, puede seguir escribiendo esas órdenes, si lo desea, o si usa otra distribución Linux «live».
# cd /mnt/arch
# mount -t proc proc proc/
# mount -t sysfs sys sys/
# mount -o bind /dev dev/
# mount -t devpts pts dev/pts/

Si se establece una conexión a Internet y desea utilizarla en el entorno chroot, puede que tenga que copiar sus servidores DNS para que se conecten a la red:

# cp -L /etc/resolv.conf etc/resolv.conf

Ahora efectúe chroot en el sistema instalado y defina la shell:

# chroot . /bin/bash
Nota: Si ve el error chroot: cannot run command '/bin/bash': Exec format error, es probable que las dos arquitecturas no coincidan.

De manera opcional, para suministrar una configuración Bash a (~/.bashrc y /etc/bash.bashrc), ejecute:

# source ~/.bashrc
# source /etc/profile

Opcionalmente también, cree un prompt único capaz de diferenciar el entorno chroot:

# export PS1="(chroot) $PS1"

Ejecutar aplicaciones gráficas en entornos chroot

Si tiene X ejecutándose en el sistema, puede iniciar aplicaciones gráficas desde el entorno chroot.

Para permitir la conexión con el servidor X, se tiene que ejecutar la siguiente orden en un terminal:

# xhost +

Luego, para dirigir las aplicaciones al servidor X, ejecute:

# export DISPLAY=:0.0

Realizar el mantenimiento del sistema

En este punto puede realizar cualquier mantenimiento del sistema que necesite dentro del entorno chroot. Algunos ejemplos comunes son:

Salir del entorno chroot

Cuando haya terminado con el mantenimiento del sistema, salga de chroot:

# exit

A continuación, desmonte los sistemas de archivos temporales y los dispositivos montados:

# umount {proc,sys,dev,boot,[...],}

Por último, desmonte la partición root:

# cd ..
# umount arch/
Nota: Si obtiene un error diciendo que /mnt (o cualquier otra partición) está ocupada, esto puede significar una de estas dos cosas:
  • Que un programa ha quedado ejecutándose dentro del entorno chroot.
  • O, más normalmente, que un submontaje todavía existe (por ejemplo, /mnt/arch/boot en /mnt/arch). Compruebe, con la orden lsblk, si hay puntos de montaje pendientes:
lsblk /dev/sda
Si aún sigue sin poder desmontar una partición, use la opción --force:
# umount -f /mnt

Después de esto, será capaz de reiniciar el sistema de forma segura.

Ejemplo

Esto puede proteger su sistema contra ataques desde Internet durante la navegación:

cd
mkdir myroot
sudo pacman -i arch-install-scripts
sudo mount --bind myroot myroot # pacstrap must see myroot as mounted 
sudo pacstrap -i myroot base base-devel
sudo mount -t proc proc myroot/proc/
sudo mount -t sysfs sys myroot/sys/
sudo mount -o bind /dev myroot/dev/
sudo mount -t devpts pts myroot/dev/pts/
sudo cp -i /etc/resolv.conf myroot/etc/
sudo chroot myroot
passwd # set a password 
useradd -m -s /bin/bash user
passwd user # set a password
# en una shell fuera del entorno chroot: 
sudo pacman -S xorg-server-xnest
Xnest -ac :1
# continuar dentro de chroot: 
pacman -S xterm
xterm
pacman -S xorg-server xorg-xinit xorg-server-utils
pacman -S openbox
pacman -S ttf-dejavu
pacman -S firefox
exit
sudo chroot --userspec=user myroot
DISPLAY=:1
openbox &
HOME="/home/user"
firefox

Véase también: Basic Chroot