scponlyc
Existe en Ubuntu un package llamado scponly que viene no preconfigurado para que cada usuario esté confinado a una jaula (chroot), por lo que para poder usar esta característica de scponly debemos descargar los fuentes y compilarlos con soporte chroot. El ejecutable que tendrá soporte chroot se llama scponlyc en vez de scponly.
Compilación de fuentes
Accedemos a la web del producto, http://sublimation.org y vamos a la página de descargas
Tomamos nota del nombre del fichero a descargar, en nuestro caso http://sublimation.org/scponly/scponly-4.6.tgz, y cxd
# cd /usr/local/src # wget http://sublimation.org/scponly/scponly-4.6.tgz
Una vez descargado el package que contiene los fuentes, lo descomprimimos en este mismo directorio
# tar xfz scponly-4.6.tgz
Esto crea el directorio scponly-4.6 en el lugar donde lo estamos descomprimiendo. Nos metemos en ese directorio y leemos los ficheros README, INSTALL, y BUILDING-JAILS.TXT
# ./configure --enable-chrooted-binary # make # make install
Al finalizar este proceso tendremos creado /usr/local/sbin/scponlyc.
Configurar scponlyc como shell
Para que el sistema pueda reconocer que scponlyc es un shell válido hay que añadirlo al fichero /etc/shells
# echo "/usr/local/sbin/scponlyc" >> /etc/shells
Creación de usuarios
La creación de usuarios para scponlyc se realiza con un script que se incluye en el package que hemos descomprimido anteriormente. EL script se llama “setup_chroot.sh“, y está en el directorio raiz del paquete desinatalado, en nuestro caso /usr/local/src/scponly-4.6.
Para tener a mano todo lo necesario para crear un usuario, copiamos dicho script al directorio /altroot (o donde nosotros queramos tenerlo).
Este script crea una jaula chroot con todo lo necesario excepto el fichero /dev/null, el cual es imprescindible para que los programas de la jaula funcionen con normalidad, por lo que tenemos dos opciones: o creamos dicho fichero después de cada ejecución del script, o incluimos en el script las instruciones necesarias para crearlo.
Yo he optado por esta segunda opción, asi que editamos el script, nos posicionamos en la última línea e insertamos las siguientes instrucciones:
# # Creamos /dev/null dentro de la jaula # mkdir $targetdir/dev mknod $targetdir/dev/null c 3 1 chmod 666 $targetdir/dev/null
Con esto ya tenemos instalado scponlyc y listo para crear usuarios ejecutando el script setut_chroot.sh
Diagnóstico de problemas
Al probar a hacer una transferencia con, por ejemplo, WinSCP, podemos recibir el error:
o si usamos línea de comando, el error equivamente es:
C:\putty>psftp usuario@servidor Using username "usuario" Fatal: unable to initialise SFTP: could not connect
la causa es que la “jaula” chroot no está funcionando correctamente.
Para probar que el comando “sftp-server” pueda enjaularse correctamente, probemos con el comando:
root@server:/# chroot /altroot/home/usuario /usr/lib/sftp-server Couldn't open /dev/null: No such file or directory
La razón del fallo es que falta el fichero /dev/null dentro de la jaula, o está creado de forma incorrecta.
El fichero /dev/null es un fichero especial de caracteres (tipo “c”), que hay que crear con el comando mknod:
mkdir /altroot/home/usuario/dev mknod -m 666 /altroot/home/usuario/dev/null c 2 2

