Jaulas SFTP

28 septiembre 2011 at 19:52 by Adrián Pérez

Jail FTPBuscando la forma de configurar un servidor SFTP (Secure FTP) para la transferencia de ficheros segura, me he encontrado que el propio OpenSSH que viene en la mayoría de versiones, ya proporciona el servicio de servidor sftp.

Mirando la configuración de OpenSSH vemos como efectivamente, se define el servicio sftp:

# cat /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server

Así pues, por defecto, ya se dispone de un método para transferencia de ficheros sobre SSH gracias a OpenSSH.

Sin embargo, este método permite a un usuario, conectarse por SFTP y poder navegar por cualquier directorio del sistema al que tenga acceso, que por defecto, son la mayoría de ellos. Si se quiere "enjaular" al usuario en un directorio concreto, para que pueda trabajar únicamente con los ficheros y directorios de un directorio determinado, la cosa se complica.

Afortunadamente, he encontrado una muy buena documentación aquí, que paso a resumir a continuación:

En primer lugar, se deberá modificar el fichero de configuración de OpenSSH (/etc/ssh/sshd_config). Concretamente, se deberá substituir esta línea:

Subsystem sftp /usr/libexec/openssh/sftp-server

por esta otra:

Subsystem sftp internal-sftp

A continuación, se deberá añadir al final de este fichero de configuración, lo siguiente:

Match group filetransfer
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Con esto se estará consiguiendo que los usuarios del grupo "filetransfer" se "enjaulen" en sus directorios, y usen el comando internal-sftp definido anteriormente.

Una vez realizados los cambios, será necesario reiniciar el servicio ssh, mediante:

/etc/init.d/sshd restart

Es importante recalcar que con esto no se perderá el servicio ssh normal, y que además, los usuarios que se configuren para usar sftp no podrán conectar por ssh normal.

Únicamente faltará configurar a los usuarios sftp, los cuales serán creados de la forma en la que habitualmente se crean los usuarios de sistema.

useradd nombreusuario
passwd nombreusuario

Una vez creado, se deberá crear el grupo "filetransfer", el cual se ha definido anteriormente en el fichero de configuración del SSH como usuarios con acceso al SFTP. Para ello, se incluirá la siguiente línea al final del fichero /etc/passwd, únicamente modificando el número 543 del ejemplo, por el último número + 1 que aparezca en nuestro fichero de grupos:

vi /etc/group
filetransfer:x:543

Tras esto, se podrá incluir el usuario al grupo filestransfer:

vi /etc/group
filetransfer:x:543:nombreusuario

Es posible que sea necesario cambiar el propietario de la home del usuario, por root:root, root:filetransfer, o root:nombreusuario, para poder iniciar la sesión.

Actualización: en realidad, parece es necesario cambiar el propietario de la home del usuario por root:root, y crear dentro de la home un directorio "public" con propiedad del usuario y permisos totales para éste, con tal de poder usar las jaulas sftp. De esta manera, el usuario se logueará en su home, en la cual no tendrá permisos (pues no es de su propiedad), pero donde tendrá un directorio donde poder trabajar ("public").

Fuente: http://library.linode.com/security/sftp-jails

Flickr! Foto por chubiboako