11 junio 2008

ssh con chroot centos 5.1

Referencia: http://www.howtoforge.com/chroot_ssh_sftp_fedora7
Instalación de dependencias.
# yum -y install rpm-build openssl-devel glibc-devel krb5-devel gcc pam-devel

Descargamos el openssh con chroot
# wget http://chrootssh.sourceforge.net/download/openssh-4.5p1-chroot.tar.bz2

Descomprimimos el archivo bz2, los cual no creara un archivo tar
# bunzip2 openssh-4.5p1-chroot.tar.bz2

Desempaquetamos el archivo .tar
# tar -xvf openssh-4.5p1-chroot.tar

Copiamos el archivo openssh.spec a /usr/src/redhat/SPECS/
# cp openssh-4.5p1-chroot/contrib/redhat/openssh.spec /usr/src/redhat/SPECS/

Cambiamos de nombre a la carpeta desempaquetada
# mv openssh-4.5p1-chroot openssh-4.5p1

Comprimimos la carpeta
# tar czvf openssh-4.5p1.tar.gz openssh-4.5p1

Movemos el archivo comprimido a /usr/src/redhat/SOURCES/ y borramos los restos de archivos q no quedaron
# mv openssh-4.5p1.tar.gz /usr/src/redhat/SOURCES/
# rm -rf openssh-4.5p1

Editamos el archivo
# vim /usr/src/redhat/SPECS/openssh.spec

Y agregamos o modificamos las siguientes lineas.
%define no_x11_askpass 1
%define no_gnome_askpass 1

%configure \
--without-zlib-version-check \
--sysconfdir=%{_sysconfdir}/ssh \

Construimos el paquete
# rpmbuild -bb /usr/src/redhat/SPECS/openssh.spec

Nos generada tres paquetes *.rpm los cuales uno es el server y el cliente en la ubicación /usr/src/redhat/RPMS/i386/
# cd /usr/src/redhat/RPMS/i386/

Instalamos los paquetes
# rpm -Uvh openssh-4.5p1-1.i386.rpm openssh-server-4.5p1-1.i386.rpm openssh-clients-4.5p1-1.i386.rpm

Editamos la configuración del yum para que excluya de las actualizaciones el paquete openssh
# vi /etc/yum.conf
#############################
exclude=openssh*
#############################

Eliminamos los paquetes que ya no son necesario
# rpm -e rpm-build openssl-devel glibc-devel krb5-devel gcc pam-devel

Ahora definimos nuestro directorio donde almacenaremos a nuestro usuario chroot. dependiendo de la utilidad que le demos. en mi caso voy a crear en /home la carpeta chroot
# mkdir /home/chroot

Creamos las demas carpetas
# mkdir -p bin lib usr/bin dev etc home
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 666 dev/null dev/zero

El presente es un script q nos permitirá copiar lo necesario para nuestro chroot, para utilizarlo creamos un archivo chroot_jail en /usr/bin y copiamos el contenido
#######################
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
APPS="/bin/sh /bin/bash /bin/cp /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /bin/rmdir /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors /bin/vi /usr/bin/sftp /usr/libexec/openssh/sftp-server"

for prog in $APPS; do

mkdir -p ./`dirname $prog` > /dev/null 2>&1
cp $prog ./$prog

# obtain a list of related libraries
ldd $prog > /dev/nullq
if [ "$?" = 0 ] ; then
LIBS=`ldd $prog | awk '{ print $3 }'`

for l in $LIBS; do
mkdir -p ./`dirname $l` > /dev/null 2>&1
cp $l ./$l > /dev/null 2>&1
done

fi
done
##########################

# vi /usr/bin/chroot_jail
Se copia el contenido
# chmod +x /usr/bin/chroot_jail

y ejecutamos escribiendo
# chroot_jail

Ahora terminamos de copiar archivos necesarios para nuestro cchroot

# cp /lib/ld-2.5.so lib/
# cd lib
# ln -s ld-2.5.so ld-linux.so.2
# cd ..

# cp /lib/libnss_compat.so.2 lib/
# cp /lib/libnss_files.so.2 lib/
# cp /lib/libcap.so.1 lib/
# cp /lib/libnss_dns.so.2 lib/

# cp -R /etc/pam.d/ etc/
# cp -R /lib/security/ lib/
# cp -R /etc/security/ etc/
# cp /etc/login.defs /etc/hosts /etc/resolv.conf etc/

Ya por terminar vamos a crear nuestro archivos passwd y group de nuestro chroot
# echo '#!/bin/bash' > usr/bin/groups
# echo "id -Gn" >> usr/bin/groups
# touch etc/passwd
# grep /etc/passwd -e "^root" > etc/passwd
# grep /etc/group -e "^root" -e "^users" > etc/group

Ahora creamos el usuario, asignando el directorio creado
# useradd -s /bin/bash -m -d /home/chroot/./home/testuser -c "testuser" -g users testuser
Le ponemos un password
# passwd testuser

y listo ahora lo podemos probar.

http://tic-rex.com