chroot con sftp y sshd

Posted on Thu 19 May 2011 in Tutorial • 2 min read

Hace ya muchos años, muchos vimos como iban desapareciendo los accesos por telnet a las maquina unix y se sustituia por un acceso encriptado, el cual nos obligaba a cambiar nuestro terminal, ya que por los años 90 no existian demasiados clientes ssh. Para windows aparecio el famoso putty.

SSH aparte de permitir el acceso remotamente a un tty de una maquina unix, implementa sftp, el cual permite la transferencia de archivos mediante los mismos comandos que ftp, pero mediante un canal encriptado.

Cuando necesitamos dar acceso a nuestras maquinas por sftp, la mayoria de los caso queremos que el usuario que lo usa, no pueda andar por nuestras maquinas a sus anchas, por lo que vamos a ver como hacer un chroot a tambien llamado jail o jaula.

Cuando creamos un chroot, lo que hacemos es encerrar al usuario en una parte del sistema de archivos, haciendole creer que se encuentra en el raiz de sistema y aunque intente ir para atras con un cd .. seguira en el mismo sitio.

Primero creamos el directorio donde queremos hacer el chroot y le cambiamos los permisos para que sean de root el propietario, tambien creamos un usuario webuser, con el home en / y como shell /bin/false, para que no pueda entrar por ssh a la maquina.

[email protected]:~# mkdir /chroot
[email protected]:~# chown root /chroot/
[email protected]:~# useradd -d / -s /bin/false webuser
[email protected]:~# passwd webuser
Introduzca la nueva contraseña de UNIX: 
Vuelva a escribir la nueva contraseña de UNIX: 
passwd: password updated successfully

Ahora hay que configurar el chroot en el fichero de configuracion de sshd

[email protected]:~# vi /etc/ssh/sshd_config

Y añadimos al final lo siguente

Match user webuser
    ChrootDirectory /chroot
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

Hacemos reload de ssh

[email protected]:~# service ssh reload

Ahora ya podemos hacer secure ftp a nuestro chroot para verificar que todo funciona y que realmente estamos en una jaula

[email protected]:~$ sftp [email protected]
[email protected]'s password: 
Connected to lnxport.
sftp> ls
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sftp> quit

Como veis, aunque el usuario intente ir a un nivel inferior no le deja, solo podria entrar en los directorios que haya en su jaula.