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

From ArchWiki
Jump to: navigation, search
(Cambiar root)
(Ejemplo)
Line 128: Line 128:
 
Esto puede proteger su sistema contra ataques desde Internet durante la navegación:  
 
Esto puede proteger su sistema contra ataques desde Internet durante la navegación:  
 
{{bc|1=
 
{{bc|1=
cd
+
# # as root:
mkdir myroot
+
# cd /home/''user''
sudo pacman -i arch-install-scripts
+
# mkdir myroot
sudo mount --bind myroot myroot # pacstrap must see myroot as mounted  
+
# pacman -S arch-install-scripts
sudo pacstrap -i myroot base base-devel
+
# # pacstrap must see myroot as mounted:
sudo mount -t proc proc myroot/proc/
+
# mount --bind myroot myroot
sudo mount -t sysfs sys myroot/sys/
+
# pacstrap -i myroot base base-devel
sudo mount -o bind /dev myroot/dev/
+
# mount -t proc proc myroot/proc/
sudo mount -t devpts pts myroot/dev/pts/
+
# mount -t sysfs sys myroot/sys/
sudo cp -i /etc/resolv.conf myroot/etc/
+
# mount -o bind /dev myroot/dev/
sudo chroot myroot
+
# mount -t devpts pts myroot/dev/pts/
passwd # set a password  
+
# cp -i /etc/resolv.conf myroot/etc/
useradd -m -s /bin/bash ''user''
+
# chroot myroot
passwd ''user'' # set a password
+
# # inside chroot:
# en una shell fuera del entorno chroot:  
+
# passwd # set a password  
sudo pacman -S xorg-server-xnest
+
# useradd -m -s /bin/bash ''user''
Xnest -ac :1
+
# passwd ''user'' # set a password
# continuar dentro de chroot:  
+
# # in a shell outside the chroot:  
pacman -S xterm
+
# pacman -S xorg-server-xnest
xterm
+
# # in a shell outside the chroot you can run this as ''user'':
pacman -S xorg-server xorg-xinit xorg-server-utils
+
$ Xnest -ac -geometry 1024x716+0+0 :1
pacman -S openbox
+
# # continue inside the chroot:  
pacman -S ttf-dejavu
+
# pacman -S xterm
pacman -S firefox
+
# DISPLAY=:1
exit
+
# xterm
sudo chroot --userspec=''user'' myroot
+
# # xterm is now running in Xnest
DISPLAY=:1
+
# pacman -S xorg-server xorg-xinit xorg-server-utils
openbox &
+
# pacman -S openbox
HOME="/home/''user''"
+
# # for java we need icedtea-web which requires some fonts:
firefox
+
# nano /etc/locale.gen
 +
# # uncomment en_US.UTF-8 UTF-8, save and exit
 +
# locale-gen
 +
# echo LANG=en_US.UTF-8 > /etc/locale.conf
 +
# export LANG=en_US.UTF-8
 +
# pacman -S ttf-dejavu
 +
# pacman -S icedtea-web
 +
# pacman -S firefox
 +
# firefox
 +
# # firefox is now running in Xnest
 +
# exit
 +
# # outside chroot:
 +
# chroot --userspec=''user'' myroot
 +
# # inside chroot as ''user'':
 +
$ DISPLAY=:1
 +
$ openbox &
 +
$ HOME="/home/''user''"
 +
$ firefox
 
}}
 
}}
 
Véase también: [https://help.ubuntu.com/community/BasicChroot Basic Chroot]
 
Véase también: [https://help.ubuntu.com/community/BasicChroot Basic Chroot]

Revision as of 08:51, 17 July 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. Debe tener instalado arch-install-scripts para ejecutar arch-chroot. Por supuesto, puede seguir escribiendo las órdenes tradicionales, si lo desea, o si usa otra distribución Linux.
# 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 /mnt/arch /usr/bin/bash
Nota: Si ve el error chroot: cannot run command '/bin/bash': Exec format error, es probable que las dos arquitecturas no coincidan.
Nota: Si ve el error chroot: '/usr/bin/bash': permission denied, vuelva a montar con el permiso exec: mount -o remount,exec /mnt/arch.

De manera opcional, para suministrar una configuración propia a Bash (~/.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:

# # as root: 
# cd /home/user
# mkdir myroot
# pacman -S arch-install-scripts
# # pacstrap must see myroot as mounted: 
# mount --bind myroot myroot
# pacstrap -i myroot base base-devel
# mount -t proc proc myroot/proc/
# mount -t sysfs sys myroot/sys/
# mount -o bind /dev myroot/dev/
# mount -t devpts pts myroot/dev/pts/
# cp -i /etc/resolv.conf myroot/etc/
# chroot myroot
# # inside chroot: 
# passwd # set a password 
# useradd -m -s /bin/bash user
# passwd user # set a password
# # in a shell outside the chroot: 
# pacman -S xorg-server-xnest
# # in a shell outside the chroot you can run this as user: 
$ Xnest -ac -geometry 1024x716+0+0 :1
# # continue inside the chroot: 
# pacman -S xterm
# DISPLAY=:1
# xterm
# # xterm is now running in Xnest 
# pacman -S xorg-server xorg-xinit xorg-server-utils
# pacman -S openbox
# # for java we need icedtea-web which requires some fonts: 
# nano /etc/locale.gen
# # uncomment en_US.UTF-8 UTF-8, save and exit 
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
# pacman -S ttf-dejavu
# pacman -S icedtea-web
# pacman -S firefox
# firefox
# # firefox is now running in Xnest 
# exit
# # outside chroot: 
# chroot --userspec=user myroot
# # inside chroot as user: 
$ DISPLAY=:1
$ openbox &
$ HOME="/home/user"
$ firefox

Véase también: Basic Chroot