Cómo configurar SFTP para un Servidor Web en un VPS.
¿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.
Índice de artículo
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.
- 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
- 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
- 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.
- 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
- 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.
- 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 en755
(no775
, 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
- 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!
Trabajando desde el año 1990 en el mercado de la tecnología. Técnico en Electrónica. Administrador de Sistemas. Administrador de Redes. Técnico en telecomunicaciones. Técnico de plataforma satelital. Incursiono en el Software Libre desde mediados del 1997. Desde entonces utilicé varias distribuciones GNU/Linux comenzando con un RedHat 5.0
Formé parte del Core Team y miembro del grupo de desarrollo del Proyecto UTUTO.