Creamos una shell:
[root@potito ~]# cd /bin
[root@potito bin]# vi chrootbash
#!/bin/bash
/usr/bin/sudo /usr/sbin/chroot /var/chroot/$USER /bin/bash
Y le damos permisos de ejecución:
[root@potito bin]# chmod +x /bin/chrootbash
Nos aseguramos de que existe el directorio donde vamos a crear los “homes” de los usuarios:
[root@potito bin]# ls -ld /var/chroot
ls: /var/chroot: No existe el fichero o el directorio
Así que lo creamos:
[root@potito bin]# mkdir /var/chroot/
Creamos los usuarios con:
[root@potito bin]# useradd -s /bin/chrootbash -d /var/chroot/usuario usuario
y le asignamos un password:
[root@potito bin]# passwd usuario
Changing password for user usuario.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
Creamos el árbol de directorios que va a ver:
[root@potito bin]# cd /var/chroot/usuario
[root@potito usuario]# mkdir bin etc dev home lib usr usr/bin
[root@potito usuario]# cd ..
[root@potito chroot]# chown -R usuario:usuario usuario
Y copiamos la línea del fichero passwd del usuario:
[root@potito chroot]# grep usuario /etc/passwd > usuario/etc/passwd
[root@potito chroot]# grep usuario /etc/group > /etc/group
Instalamos los programas a los que queremos que tenga acceso en la cuenta de usuario y las librerías que utilicen:
[root@potito chroot]# cp /bin/bash /var/chroot/usuario/bin/
[root@potito chroot]# ldd /bin/bash
libtermcap.so.2 => /lib/libtermcap.so.2 (0x00689000)
libdl.so.2 => /lib/libdl.so.2 (0x005f8000)
libc.so.6 => /lib/tls/libc.so.6 (0x004cd000)
/lib/ld-linux.so.2 (0x004b4000)
[root@potito chroot]# mkdir usuario/lib/tls
[root@potito chroot]# cp /lib/libtermcap.so.2 /lib/libdl.so.2 /lib/ld-linux.so.2 usuario/lib/
[root@potito chroot]# cp /lib/tls/libc.so.6 usuario/lib/tls/libc.so.6
[root@potito chroot]# cd usuario
[root@potito usuario]# cp /lib/libnsl.so.1 /lib/libnss_nisplus.so.2 /lib/libnss_nis.so.2 /var/chroot/usuario/lib/
[root@potito usuario]# mkdir lib/security
[root@potito usuario]# cp /lib/security/pam_rootok.so /lib/security/pam_warn.so /lib/security/pam_unix.so lib/security/
[root@potito usuario]# mkdir usr/lib
[root@potito usuario]# cp /usr/lib/libcrack.so.2 usr/lib/
[root@potito usuario]# mkdir etc/pam.d
[root@potito usuario]# cp /etc/pam.d/su /etc/pam.d/other etc/pam.d/
[root@potito usuario]# cp /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir bin/
[root@potito usuario]# ldd /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir | grep -v ':' | cut -f1 -d'(' | grep -v '=>' | sort | uniq > /tmp/libs
[root@potito usuario]# ldd /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir | grep -v ':' | cut -f1 -d'(' | grep '=>' | cut -f2 -d'>' | sort | uniq >> /tmp/libs
[root@potito usuario]# for i in `cat /tmp/libs`; do cp $i .$i ; done
Copiamos 'su' y sus librerías:
[root@potito usuario]# cp /bin/su bin/
[root@potito bin]# ldd /bin/su | grep -v ':' | cut -f1 -d'(' | grep '=>' | cut -f2 -d'>' | sort | uniq > /tmp/libs
[root@potito bin]# ldd /bin/su | grep -v ':' | cut -f1 -d'(' | grep -v '=>' | cut -f2 -d'>' | sort | uniq >> /tmp/libs
[root@potito usuario]# for i in `cat /tmp/libs`; do cp -f $i .$i ; done
Editamos sudoers y le autorizamos a hacer sudo poniendo al final del fichero:
[root@potito usuario]# visudo
#chroot
usuario ALL = /usr/sbin/chroot