jueves, febrero 16, 2006

Configuración de una máquina para chroot de usuarios

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


2 comentarios:

Anónimo dijo...

Esa es una buena forma de tener varias novias xD

Anónimo dijo...

Muchisimas gracias por este tutorial, me ha sido de gran utilidad! : D Un saludo!