26 de marzo de 2011

Enjaular a algunos usuarios de SFTP

El siguiente artículo muestra como permitir el acceso a algunos usuarios del sistema por SFTP usando SSH para la transferencia de archivos de forma segura impidiendo el acceso a directorios fuera de su home (Chroot). Además, los usuarios no podrán conectarse al sistema por SSH desde linea de comandos.

¿Porque usar SFTP con SSH en lugar de usar el servicio vsftpd?
Porque toda la información viajara encriptada (incluyendo la contraseña) impidiendo que alguien pueda acceder a la información durante la transferencia.

En Debian Squeeze, la configuración de SSH por default permite el acceso a todos los usuarios del sistema y recorrer todo el árbol de directorios incluyendo /. Sin embargo, se puede restringir el acceso a ciertos usuarios al Servidor y enjaularlos en su propio home (el usuario se podrá conectar al servidor pero no podrá salir fuera de su directorio personal).

Preparando el Sistema

Primeramente se crea un directorio donde se ubicaran los home de los usuarios del grupo:
   # mkdir /home/usersjaula 

Luego se crea un grupo de usuarios y los usuarios deseados:
 # groupadd usersjaula
# useradd -g usersjaula -d /home/usersjaula/nombreUsuario -m -s /bin/false nombreUsuario
# passwd nombreUsuario

Con los comandos anteriores se creó el grupo "usersjaula" y el usuario "nombreUsuario" sin shell perteneciente al grupo recién creado.

Luego se cambian los permisos de los siguientes directorios:
 # chmod 755 -R /home/usersjaula
# chmod 755 -R /home/usersjaula/nombreUsuario
# chown root.root -R /home/usersjaula

Con los comandos anteriores el usuario no podrá escribir en su propio home. Por ello se crea un directorio en su home para que pueda almacenar sus archivos.
 # mkdir /home/usersjaula/nombreUsuario/archivos
# chown nombreUsuario.nombreUsuario -R /home/usersjaula/nombreUsuario/archivos

Los permisos que se modificaron en los pasos anteriores se realizaron para que funcione el enjaulado SFTP. El propietario del directorio jaula y los directorios sobre este, debe ser root con permisos 755. Esta es una restricción del ChrootDirectory en OpenSSH.

Configuración de SSH

El archivo de configuración de SSH es /etc/ssh/sshd_config. Por lo que todas las configuraciones se realizaran en este archivo.

Por seguridad se recomienda deshabilitar el acceso a root por SSH con la siguiente directiva:
   PermitRootLogin no 

Para limitar el acceso al servicio SSH a ciertos usuarios se usa la directiva AllowUsers:
   AllowUsers nombreUsuario nombreUsuario2 etc 

Para limitar el acceso a ciertos grupos se puede usar:
   AllowGroups usersjaula 

Verificar que se tiene la siguiente linea para enjaular el servicio SFTP:
   Subsystem sftp /usr/lib/openssh/sftp-server 

Agregar las siguientes lineas a final del archivo /etc/ssh/sshd_config para enjaular a un usuario:
  Match User nombreUsuario
ChrootDirectory /home/usersjaula/nombreUsuario
ForceCommand /usr/lib/openssh/sftp-server
# AllowTCPForwarding no ## opcional
# X11Forwarding no ## opcional

Agregar las siguientes lineas a final del archivo /etc/ssh/sshd_config para enjaular a un grupo de usuarios:
  Match group usuariossftp
ChrootDirectory /home/usersjaula
ForceCommand /usr/lib/openssh/sftp-server
# AllowTCPForwarding no ## opcional
# X11Forwarding no ## opcional

Para que los cambios surjan efecto se reinicia el servicio:
   # /etc/init.d/ssh restart 

Si se tiene un firewall se deben de abrir el puerto correspondiente.

Acceder remotamente

Para acceder remotamente al servicio SFTP se puede usar el navegador de archivos tecleando en la barra de direcciones "sftp://IP".

Desde Windows se puede usar cualquier cliente que se indica en esta lista. De los que vienen en la lista, yo recomiendo FileZilla pues con este al subir archivos con acentos y Ñ se mostrarán correctamente en GNU/Linux.

Si se intenta acceder desde linea de comandos a SSH marcara el error:
   This service allows sftp connections only. 

FUENTE:
http://www.esdebian.org/wiki/enjaulado-sftp
http://linuxsix.blogspot.com/2009/03/tutorial-para-hacer-una-jaula-chroot.html
http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config

1 comentario:

creamostuweb dijo...

me gusto mucho tu articulo... estaba probando con configurar tam bien make_chroot_jail pero me genero errors en ubuntu 11.10