Cómo instalar y utilizar SFTP en servidores Linux

El SFTP o Protocolo de Transferencia de Archivos SSH es un método para transferir datos de forma segura entre dos ordenadores y más. Es un FTP que se ejecuta sobre el protocolo SSH y se aprovecha de su seguridad y soporta totalmente su autenticación.

Hoy en día, se recomienda utilizar SFTP en lugar del antiguo protocolo FTP o FTP/S. SFTP es seguro por defecto porque así es como funciona SSH. Desde el punto de vista de la seguridad, SFTP también te protege contra el escaqueo de contraseñas y el ataque del hombre en el medio (MiTM).

Al igual que SSH, SFTP también protege la integridad de tus datos mediante el cifrado y la función hash criptográfica. Además, admite múltiples métodos de autenticación segura, como la autenticación basada en contraseña y en clave. Además, reduce el puerto abierto del servidor a la red exterior, porque se ejecuta en el mismo puerto que el protocolo SSH.

Requisitos previos

En esta guía, aprenderás a configurar el servidor SFTP en un sistema Linux. Además, aprenderás los comandos básicos del cliente sftp.

A continuación se muestra el entorno actual para la implementación:

  • Un servidor Linux – puedes utilizar Debian, Ubuntu, CentOS, Fedora, Rocky o cualquier otra distribución de Linux.
  • Asegúrate de que los paquetes de OpenSSH están disponibles en tu sistema Linux.
  • Un cliente SFTP – línea de comandos sftp o cualquier cliente GUI, según prefieras.

Verificar los paquetes de OpenSSH

Para configurar un servidor SFTP, debes tener instalados los paquetes OpenSSH en tu sistema Linux. Casi todas las distribuciones de servidores Linux tienen los paquetes OpenSSH instalados por defecto. Pero, en caso de que no tengas el paquete OpenSSH en tu sistema, puedes instalarlo desde el repositorio oficial.

1. Para asegurarte de que los paquetes OpenSSH están instalados en tu sistema Linux, utiliza el siguiente comando.

Para servidores Debian o Ubuntu, puedes utilizar el comando dpkg que aparece a continuación.

dpkg -l | grep ssh

A continuación se muestra la salida de nuestro sistema Debian.

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library
ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

La primera columna ‘ii‘ significa que el paquete está instalado. El paquete‘openssh-sftp-server‘ está instalado en el sistema Debian/Ubuntu.

Para los usuarios de RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux, puedes utilizar el comando rpm como se indica a continuación.

rpm -qa | grep ssh

Crear grupo y usuario

En este paso, crearás un nuevo grupo y usuario para el servidor SFTP. Los usuarios de este grupo podrán acceder al servidor SFTP. Y por razones de seguridad, los usuarios de SFTP no pueden acceder al servicio SSH. Los usuarios de SFTP sólo acceden al servidor SFTP.

1. Ejecuta el siguiente comando para crear un nuevo grupo‘sftpgroup‘.

sudo groupadd sftpgroup

2. Crea un nuevo usuario ‘sftpuser‘ con el siguiente comando.

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

Opciones detalladas:

  • -G: añade automáticamente el usuario al ‘sftpgroup‘.
  • -d: especifica el directorio de inicio para el nuevo usuario.
  • -s: establece por defecto para el nuevo usuario‘/sbin/nologin‘, lo que significa que el usuario no puede acceder al servidor SSH.

3. A continuación, crea la contraseña para el usuario‘sftpuser‘ utilizando el siguiente comando.

passwd sftpuser

Escribe tu contraseña fuerte y repítela, luego presiona‘Enter‘ para confirmar.

Añadir usuario y grupo sftpserver

Para añadir más usuarios, repite las etapas número 2 y 3, y lo más importante, todos los usuarios SFTP deben estar en el grupo‘sftpgroup‘ sin acceso al shell a través de SSH.

Configurar el directorio Chroot Jail

Después de crear un nuevo grupo y usuario, debes crear y configurar el directorio chroot para los usuarios de SFTP.

1. Para el usuario ‘sftpuser’, el nuevo directorio raíz estará en ‘/srv/sftpuser’. Ejecuta el siguiente comando para crearlo.

mkdir -p /srv/sftpuser

2. Para configurar el chroot para el usuario ‘sftpuser‘, debes cambiar la propiedad del directorio al usuario root, pero manteniendo el grupo de lectura y ejecución sin acceso de escritura.

Cambia la propiedad del directorio al usuario ‘root’ utilizando el siguiente comando.

sudo chown root /srv/sftpuser

Dale al grupo permiso de lectura y ejecución, pero no de escritura.

sudo chmod g+rx /srv/sftpuser

3. A continuación, crea un nuevo directorio «data» dentro del directorio«/srv/sftpuser» y cambia la propiedad de ese directorio«data» al usuario«sftpuser«.

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

configurar el directorio chroot jail para stpuser

Hasta aquí, los detalles de la configuración del directorio del usuario SFTP.

  • El directorio ‘/srv/sftuser ‘ es el directorio principal por defecto.
  • El usuario ‘sftpuserno puede escribir en el directorio‘/srv/sftpuser‘, pero puede leer dentro de ese directorio.
  • El usuario ‘sftpuser‘ puede subir archivos al servidor SFTP en el directorio‘/srv/sftpuser/data‘.

Habilitar el SFTP en el servidor SSH

Para habilitar el servidor SFTP en el OpenSSH, debes editar la configuración SSH ‘/etc/ssh/sshd_config’.

1. Edita la configuración ssh ‘/etc/ssh/sshd_config‘ utilizando nano o vim.

sudo nano /etc/ssh/sshd_config

2. Comenta la siguiente configuración para desactivar la función‘sftp-server‘ independiente.

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

3. Pega la siguiente configuración al final de la línea.

Subsystem sftp internal-sftp

Match Group sftpgroup
     ChrootDirectory %h
     X11Forwarding no
     AllowTCPForwarding no
     ForceCommand internal-sftp

Guarda la configuración y sal.

Configuración detallada:

  • En lugar de utilizar el subproceso‘sftp-servidor‘, vamos a utilizar el ‘sftp interno‘.
  • El servidor SFTP está habilitado para el grupo‘sftpgroup‘.

4. Para aplicar la nueva configuración, reinicia el servicio ssh con el siguiente comando.

sudo systemctl restart sshd

El servidor SFTP está listo y accesible, y se ejecuta en el mismo puerto que el servicio SSH.

Acceder al servidor SFTP

En el lado del cliente, utilizaremos la línea de comandos sftp, que está instalada por defecto en la mayoría de las distribuciones de Linux. Pero también puedes utilizar otro cliente de línea de comandos o un cliente FTP con interfaz gráfica, como FileZilla, Cyberduck, etc.

1. Para conectarte al servidor SFTP, ejecuta el comando sftp como se indica a continuación.

sftp ftpuser@SERVER-IP

Si tu servidor SFTP y/o SSH se ejecuta en el puerto personalizado, puedes utilizar el comando sftp como se indica a continuación.

sftp -P PORT ftpuser@SERVER-IP

Escribe la contraseña del‘sftpuser‘.

2. Una vez conectado al servidor SFTP, ejecuta el siguiente comando.

Muestra el directorio de trabajo de la ruta actual y lista todos los archivos y directorios disponibles.

pwd
ls

Conéctate al servidor sftps con el comando sftp

3. Sube un archivo local al servidor SFTP en el directorio ‘/‘, que resultará como ‘permiso denegado‘, porque es el directorio chroot.

put /path/to/file/on/local /

4. Sube un archivo local al directorio ‘/data/‘ del servidor SFTP. Si tu configuración es correcta, tu archivo se subirá al directorio ‘/data/‘.

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

Verificar la lectura y la escritura en el sftpserver

5. Ahora comprueba los archivos disponibles en el directorio ‘/data‘ utilizando el siguiente comando.

ls /data/

Y verás tu archivo subido al servidor SFTP.

Listado de todos los archivos del servidor sftp

Conclusión

¡Enhorabuena! Has configurado con éxito el servidor SFTP en el sistema Linux. Este tipo de configuración se puede aplicar en la mayoría de los sistemas Linux con OpenSSH instalado encima. Además, has aprendido a configurar el directorio chroot para los usuarios de SFTP y has aprendido el comando cliente sftp básico.

También te podría gustar...