Cómo configurar SFTP para un Servidor Web en un VPS.

Servicio SFTP

¿SFTP qué es? Es el favorito en estos días debido a su robusto modelo de seguridad y una configuración más fácil que los tradicionales FTP y FTPS. En esta guía, configuraremos SFTP para permitir que los usuarios carguen en el directorio raíz del servidor web montado en un VPS.

Introducción

Esta guía asume que el directorio raíz de su web es la predeterminada para Apache y Nginx, que se ubica en /var/www/html. Si utiliza host virtuales en su servicio web, el directorio raíz de cada sitio web puede estar ubicado en /var/www/example.com/public_html. Solo asegúrese de conocer el path correcto del documento raíz.

Este artículo, y el video publicado en nuestro canal de Youtube, utiliza la distribución Ubuntu Server Minimal 20.04. Pero también funciona en las versiones de Ubuntu Server 18.04 y 16.04, aunque también debería funcionar con otras distribuciones basadas en Debian sin problemas. Si estás utilizando CentOS, simplemente debes reemplazar www-data en esta guía por apache o nginx.

El método explicado en este tutorial es el más sencillo de configurar en el que simplemente agrega su usuario SFTP al grupo www-data.

  1. Instale SSH

SFTP se basa en la capa de transporte SSH y debe estar instalado en la mayoría de las distribuciones de servidores Linux de forma predeterminada. Si no es así, puede instalar con:

$ sudo apt install ssh
  1. Configurar SSH

Cambie el Subsystem a internal-sftp en sshd_config.

$ sudo nano /etc/ssh/sshd_config

Desplácese hasta la parte inferior del archivo y comente la línea Subsystem sftp agregando # antes y luego agregue Subsystem sftp internal-sftp debajo.

$ sudo vim /etc/ssh/sshd_config 
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Esto le dice a sshd que use el código de servidor SFTP integrado en sshd en lugar de ejecutar sftp-server, que ahora es redundante y solo se conserva para compatibilidad con versiones anteriores.

Reinicie el servicio sshd para que los cambios surtan efecto.

$ sudo service sshd restart
  1. Crear usuario SFTP

No se recomienda que utilice el usuario principal o usuarios con privilegios de sudo para cargar archivos en el directorio raíz del servidor web. Por esta razón, debe crear un nuevo usuario que solo tenga acceso SFTP al directorio raíz.

En esta guía vamos a utilizar un usuario que llamaremos webdev y que va a tener acceso al servicio SFTP; puede llamarlo como desee. Si planea otorgar acceso SFTP a varios usuarios a través de diferentes directorios raíces, considere un esquema de nombres como username_domain_com. Por ejemplo juan_mitienda_com. Esto facilitará el seguimiento de todos sus usuarios de SFTP.

Con el siguiente comando se generará un nuevo usuario en el VPS, nombraremos webdev al usuario de SFTP.

$ sudo adduser webdev

Genere una contraseña y presione enter para aceptar todos los valores predeterminados.

Método de configuración SFTP rápido

Usando este método con la menor cantidad de configuraciones, crearemos una directiva Match User en la configuración SSH y agregaremos su usuario SFTP al grupo www-data.

Este procedimiento es ideal si ya tiene un sitio activo que se ejecuta en el directorio raíz del webserver y no quiere arriesgarse a eliminarlo accidentalmente estableciendo permisos restrictivos que utiliza un método más avanzado que implementa reglas más seguras.

  1. Agregar la directiva Match User en la configuración SSH

Limite al usuario webdev al directorio raíz y también deshabilite su acceso SSH; solo queremos que pueda iniciar sesión a través de SFTP. Podemos hacer esto agregando una directiva Match User en el archivo de configuración SSH.

Debemos editar el archivo de configuración sshd_config.

$ sudo vim /etc/ssh/sshd_config

Desplácese hasta la parte inferior del archivo de configuración SSH y agregue su nueva directiva Match User.

Asegúrese de que ChrootDirectory sea el directorio que se encuentra sobre la raíz de su documento. Por ejemplo, si el directorio raíz es /var/www/html/, entonces ChrootDirectory es /var/www/.

Tenga en cuenta que puede agregar varios usuarios aquí separados por una coma, Ej.Match User webdev, webdev2, webdev3

Nota: ForceCommand internal-sftp solo forzará el acceso SFTP y no permitirá que este usuario SFTP inicie sesión a través de SSH.

$ sudo vim /etc/ssh/sshd_config
Match User webdev 
        ChrootDirectory /var/www/
        ForceCommand internal-sftp 
        X11Forwarding no 
        AllowTcpForwarding no 
        PasswordAuthentication yes

Guardar y salir (presione :wq y luego presione ENTER)

Pruebe la configuración SSH antes de reiniciar.

$ sudo sshd -t

Si no hay errores, reinicie el servicio sshd para que los cambios surtan efecto.

$ sudo service sshd restart
  1. Agregar usuario SFTP a www-data

Agregue su usuario webdev de SFTP al grupo www-data.

$ sudo usermod -a -G www-data webdev

Nota: Los grupos de Linux no tienen efecto hasta que el usuario cierra la sesión y vuelve a entrar. Si ya ha iniciado sesión como este usuario en su cliente FTP, cierre el programa por completo y vuelva a iniciar sesión.

  1. Establecer permisos de directorio

SFTP es muy estricto cuando se trata de permisos de directorio chroot y si no están configurados correctamente, no podrá iniciar sesión, así que siga estas instrucciones cuidadosamente.

El chroot suele ser el directorio que se encuentra encima de la raíz de su documento. Por ejemplo, por defecto /var/www/ es el chroot y /var/www/html es el directorio raíz de los archivos y directorios que conformar el sitio web. Otro ejemplo, si el directorio raíz de webserver es un directorio más profundo, como /var/www/domain.com/public_html, entonces su chroot es /var/www/domain.com.

  • El directorio chroot, y todos sus directorios superiores, no deben tener permisos de escritura para grupos u otros; de lo contrario, el inicio de sesión SFTP fallará con el mensaje fatal: bad ownership or modes for chroot directory component “/var/www/”. En otras palabras, debe asegurarse de que tanto /var/ como /var/www/ estén configurados en 755 (no 775, que otorga permisos de escritura a grupos).
  • El directorio chroot, y todos sus directorios superiores, deben ser propiedad de root; de lo contrario, el inicio de sesión SFTP fallará con el mensaje fatal: bad ownership or modes for chroot directory component “/var/www/”. En otras palabras, debe asegurarse de que tanto /var/ como /var/www/ sean propiedad de root.
  • Si su directorio chroot no es /var/www pero, por ejemplo, /var/www/domain.com, entonces deberá aplicar estos permisos y asignar a root como propietario de ese directorio y a todos sus directorios superiores.

En primer lugar, verifiquemos los permisos y la propiedad de /var/; deben ser 755 y root de forma predeterminada.

$ sudo ls -ld /var/

Salida:

drwxr-xr-x 14 root root 4096 30 de julio 02:24 /var/

Si no coinciden con lo anterior, establezca los permisos y el propietario como se muestra a continuación.

$ sudo chmod 755 /var/
$ sudo chown root:root /var/

Ahora apliquemos los mismos permisos y la propiedad para su chroot. Suponiendo que su chroot es /var/www/, asegúrese de que el directorio esté configurado en 755.

$ sudo chmod 755 /var/www/

Asegúrese de que su directorio chroot sea propiedad de root.

$ sudo chown root:root /var/www/

Para comprobar los permisos de este directorio:

$ sudo ls -ld /var/www/

Salida:

drwxr-xr-x 14 raíz raíz 4096 3 de junio 14:28 /var/www/

Asegúrese de que el directorio raíz esté configurado en 775, lo que permitirá que los grupos escriban en este directorio.

$ sudo chmod 775 /var/www/html

Asegúrese de que la raíz de su documento y todos los contenidos sean propiedad de www-data.

$ sudo chown -R www-data:www-data /var/www/html*

Cambie todos los directorios en la raíz del documento a 775. Esto permitirá tanto al propietario (www-data) como a su grupo (al que pertenecen los usuarios SFTP) leer, escribir y ejecutar carpetas.

$ sudo find /var/www/html/ -type d -exec chmod 775 {} \;

Cambie todos los archivos en el directorio raíz a 664, esto permitirá tanto al propietario como al grupo leer, escribir y ejecutar archivos.

$ sudo find /var/www/html/ -type f -exec chmod 664 {} \;

Asegúrese de que todos los archivos o carpetas nuevos creados por usuarios de SFTP hereden el grupo www-data.

$ sudo find /var/www/html -type d -exec chmod g + s {} \;

Ahora inicie sesión en SFTP con su cliente FTP preferido y asegúrese de que puede crear, editar y eliminar archivos y carpetas.

Si no puede iniciar sesión, consulte el registro de autenticación de las últimas 50 entradas. También intente cerrar su cliente FTP y abrirlo nuevamente. Recuerde que el puerto de conectividad es el 22 (ssh) y no el 21 (ftp).

$ sudo tail -n 50 /var/log/auth.log
  1. Agregar más usuarios de SFTP

Si necesita proporcionar a otros usuarios de SFTP acceso de escritura al directorio raíz, simplemente agregue sus nombres de usuario separados por una coma, Ej. Match User webdev, webdev2, webdev3 en sshd_config y luego agregue el usuario SFTP al grupo www-data .

Conclusión

Como se puede ver, el servicio de SFTP evita muchas configuraciones extras que requieren los servidores tradicionales de FTP. Y como se indicó al inicio de este artículo, utilizar FTPS implica un servicio extra para el mantenimiento del certificados SSL públicos.

Como siempre les dejo el video donde se explica en modo práctico esta configuración y la demostración de su funcionamiento en un VPS grátis de Oracle Cloud.

Recordá seguir nuestra cuenta en Twitter y suscribirte a nuestro canal de Youtube.

Hasta luego!

Apuntes IT - Compartiendo conocimiento.
Tech Nerd theme designed by Siteturner
Share
Share