OpenSSH SFTP chroot() con ChrootDirectory

2008-05-05 por Angel Abad, etiquetado como debian, servidor

Artículo traducido de: http://www.debian-administration.org/articles/590

A partir de la nueva versión de OpenSSh, la 4.8p1 para el port GNU/Linux, disponemos de una nueva opción de configuración: ChrootDirectory. Esto ha sido posible gracias al nuevo subsistema SFTP linkado estaticamente con sshd.

Esto hace posible reemplazar facilmente el servicio FTP básico sin el problema de tener que configurar la encriptación y/o la preocupación del modo activo y pasivo del FTP cuando se trabaja detrás de un router NAT. Es mucho más simple que paquetes como rssh, scponly o otros parches ya que no requiere instalación ni mantenimiento (p.e actualizaciones de seguridad) del entorno chroot.

Para habilitarlo obviamente necesitamos la version 4.8p1 o superior. Yo personalmente uso la versión del cvs y el directorio debian/ del paquete de sid para construir un paquete Debian 4.8p1~cvs-1.

En /etc/ssh/sshd_config :

Subsystem sftp internal-sftp

Ahora configuramos una regla de chroot:

Match group sftponly
           ChrootDirectory /home/%u
           X11Forwarding no
           AllowTcpForwarding no
           ForceCommand internal-sftp

El directorio chroot debe pertenecer al usuario root. Después de la llamada a chroot(), sshd cambia el directorio a la home relativa al nuevo directorio raiz. Esto es por lo que uso / como directorio home.

# chown root.root /home/user
# usermod -d / user
# adduser user sftponly

Y se comporta como esperabamos:

$ sftp user@host
Connecting to host...
user@host's password:
sftp> ls
build               cowbuildinall       incoming            johnbuilderclean
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
build               cowbuildinall       incoming            johnbuilderclean

La única cosa que echo de menos es el logeo de transferencias, pero todavía no he investigado sobre ello. Escribiré mas sobre esto cuando encuentre tiempo para ello.

Enlaces: