Transferir archivos mediante SFTP y jaulas en Debian y en Ubuntu

!Hola amigos! Hoy les traigo una alternativa al uso de un Servidor FTP para la transferencia segura de archivos. Ya el colega KZKG^Gaara publicó uno basado en el paquete jailkit. El que desarrollaremos, se basa en los paquetes que tenemos más a mano en nuestro repositorio.
Veremos:

  • Necesaria Intro
  • ¿Cómo configuramos el Openssh-server?
  • ¿Cómo creamos los usuarios?
  • ¿Cómo modificamos los directorios personales para que la jaula funcione?

Necesaria Intro
Frecuentemente necesitamos que nos copien archivos desde equipos remotos en nuestra máquina. Muchos me han preguntado al respecto. ¿Instalo un FTP?, que ¿cómo instalo un SAMBA?. Bueno, vayamos de lo sencillo a lo complejo. De entrada ¿para qué complicarnos si tenemos el OpenSSH-Server instalado?. Y si no lo tenemos, con el sencillo comando:

aptitude install openssh-server

¡ya lo tenemos!, y entonces seremos capaces de transferir archivos de forma segura vía el protocolo SFTP (Secure File Transfer Protocol), el cual utiliza el SSH (Secure Shell) para la encriptación.

Por defecto, los usuarios con el permiso de iniciar una sesión remota vía ssh usuario@miequipo, serán capaces de ver la casi totalidad de los archivos almacenados en nuestro sistema, lo cual puede que no sea de nuestro agrado, o que por motivos de seguridad no lo debamos permitir.

Este artículo nos ayudará a configurar el OpenSSH-Server para que los usuarios que queramos, queden restringidos a su directorio personal /home/usuario. Aclaramos que, con éste método los usuarios declarados no podrán iniciar una sesión remota mediante una consola ssh o mediante el PuTTy. Sólo serán capaces de transferir archivos hacia o desde su directorio personal en nuestro equipo o servidor.

El método aquí descrito es válido para las versiones de Debian 5 (Lenny) o superiores, y para las versiones de Ubuntu 9.04 o superiores. La versión del paquete SSH del Hardy o Ubuntu 8.04 está muy atrasada y no soporta la configuración que describiremos a continuación.

¿Cómo configuramos el Openssh-server?
Como el usuario root editamos el archivo /etc/ssh/sshd_config con cualquier editor de texto simple. Nosotros recomendamos el uso del nano en modo consola.

nano /etc/ssh/sshd_config

Buscamos que la siguiente línea se encuentre presente:

Subsystem sftp <servidor interno sftp>

En Lenny y en Squeeze existen:

Subsystem sftp /usr/lib/openssh/sftp-server

En caso de que no exista, adicionamos al final del archivo:

Subsystem sftp internal-sftp

Seguimos con la edición del archivo sshd_config y le agregamos al final:

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

Guardamos los cambios y reiniciamos el servicio:

/etc/init.d/ssh restart

¿Cómo creamos los usuarios?
Primero creamos el «group» que declaramos en el sshd_config. Ojo con el nombre que escogimos anteriormente no vaya a ser que ya exista y sea un grupo propio del Sistema. Sino deseamos restringir a usuarios existentes en nuestro sistema, debemos crear nuevos usuarios para que puedan transferir archivos. Para que la jaula funcione, tenemos que hacerlos además, miembros del grupo en cuestión.

addgroup grupo-sftp
adduser usuario1
adduser usuario2
[----]
usermod -G grupo-sftp usuario1
usermod -G grupo-sftp usuario2

Para comprobar la creación del grupo y de los usuarios, podemos hacer:

less /etc/password
less /etc/group
ls -l /home

Y deben aparecer los usuarios usuario1 y usuario2, así como los grupos grupo-sftp y los correspondientes a los usuarios creados. También, al listar el directorio /home, aparecerán los directorios personales de cada usuario creado.

¿Cómo modificamos los directorios personales para que funcione la jaula de forma efectiva?
Debemos aumentar la seguridad de las carpetas personales de cada usuario creado de forma que no puedan crear carpetas adicionales debajo de su directorio personal, y con permisos de escritura donde deseamos (no donde ellos quieran) 🙂 :

chown root:root /home/usuario1 /home/usuario2
chmod 755 /home/usuario1 /home/usuario2

cd /home/usuario1
mkdir documentos html_publico
chown usuario1:usuario1 *

cd /home/usuario2
mkdir documentos html_publico
chown usuario2:usuario2 *

Los usuarios pertenecientes al grupo grupo-sftp, en lo adelante serán capaces de iniciar sesión con sus nombres y contraseñas vía SFTP solamente, y podrán transferir archivos desde y hacia los directorios ubicados por debajo de su carpeta personal y que fueron creados por nosotros, pero no serán capaces de ver el resto de nuestro sistema de archivos.

Para la transferencia de archivos y carpetas, podemos utilizar el Nautilus, Konqueror, WinSCP, FileZilla, y otros que soporten el protocolo SFTP. En el caso del Konqueror, debemos usar fish://usuario@equiporemoto.

¡Esperamos que este artículo nos sirva de utilidad práctica!.
¡Hasta la próxima aventura, amigos!

sftp_nautilus


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   hexborg dijo

    Buen artículo. Una forma muy segura de compartir ficheros. Muchas gracias por la explicación. 🙂

  2.   blitzkrieg dijo

    Excelente

  3.   Lolo dijo

    ¿Y no es más cómodo usar sshfs?

    Para nuestro equipo la carpeta remota aparecería como una carpeta más con las mismas caracteristicas.

  4.   Jacobo Hidalgo dijo

    Hola Federico, como siempre excelente artículo. Me alegra mucho poder leer ahora sí tus posts desde Internet.
    Un abrazo,
    Jako

    1.    dhunter dijo

      Que tal jacobo, no federico no accede directamente. Oye cuando vuelvas no más ubuntu pintas humanos de verde y opensuse completo. Un abrazo. 😉

  5.   KZKG^Gaara dijo

    Excelentes aportes estás haciendo fico, keep it up 😀

    1.    federico dijo

      Gracias mil KZKG^Gaara, y Gracias a TODOS por sus comentarios

  6.   jaenense dijo

    Se puede enjaular a un usuario en una carpeta que no sea /home/usuario/….. ?

    Lo que quiero hacer es enjaular a un usuario en la carpeta /media/hdd/…
    Necesito hacerlo asi ya que el servidor es una Raspberry Pi con Raspbian, y tiene la carpeta /home/…/ en una tarjeta sd, la cual se llenaria en poco tiempo

    Lo he intentado de varias formas y el resultado en cliente es siempre «Broken pipe», y el resultado en el servidor fatal: bad ownership or modes for chroot directory component «/media/HDD/»

    Muchas gracias a todos

    1.    federico dijo

      Creo que vas a tener que decirle al sistema que la carpeta home de ese usuario es /home/HDD, siempre que esa partición tenga formato nativo de linux, es decir, ext4; ext3; etcétera. Ejemplo, si el usuario es jae -para abreviar- debes ejecutar algo así por el estilo:

      :~# usermod –move-home –home /home/HDD jae

      También consulta el man usermod. Saludos

  7.   irving hernandez dijo

    tengo un problema, uo tengo un servicio en amazon con una ami publica y tengo que entrar por sftp para colocar o remover archivos.
    lo he hecho antes y todo bien pero hoy me hizo algo que no me había pasado
    dentro de la ami hay una serie de carpetas y una de ellas es un portal cautivo de internet ( pagina para mis usuarios) resulta que ahí hago promociones y publicidad para mis usuarios y constantemente le hago modificaciones y las subo por sftp ( con winscp ) tengo permisos de root y el pass de root
    le he dado el chmod 777 para permisos de escritura y todo había marchado bien
    pero hoy al hacer la actualización de la web y subir el index.html y sus otros archivos me dio los nombres pero me ha dejado todo sin bytes es decir en cero (blanco) ahora no se ve nada en mi web
    he cerrado la sesión y entre de nuevo, volvi a dar permisos, cambie de usuario, actualice, intente meter otros archivos, genere nuevos y siempre hace lo mismo
    me da los archivos pero no tienen datos
    alguien me puede ayudar ???
    agradecería mucho sus respuestas
    de antemano GRACIAS
    atte
    Lic Irving Hernandez

  8.   FCC dijo

    Hola como usar filezilla, ya lo he visto varios modos y aun no consigo conectar.
    Me marca error.

  9.   pedro dijo

    Buenas Tardes,

    Realice el procedimiento y funciona perfectamente el enjaulado, sin embargo al tratar de escribir sobre la carpeta «documentos» o «html_publico» me da acceso denegado. Tiene los permisos mencionados y nada que lo permite.

    drwxr-xr-x. 2 usuario1 usuario1 4096 mar 11 13:16 documentos
    drwxr-xr-x. 2 usuario2 usuario2 4096 mar 11 13:16 html_publico

    El resultado es acceso denegado al tratar de escribir en cualquier carpeta. Sin embargo, al realizar un get si lo permite.

    Espero que me puedan ayudar lo mas pronto posible.

    Saludos.