Restringir el acceso de usuario a un directorio con SFTP (OpenSSH)
Si quieres permitir el acceso por SFTP (FTP es cosa del pasado) a alguien a tu servidor VPS, tenemos que tener claro que hemos de crear un usuario (obviamente) y darle privilegios.
Notas preliminares
Este ejemplo está orientado a que un amigo o cliente acceda a tu servidor utilizando SFTP.
En mi caso, tengo el servidor apache para que funcione partiendo del directorio /var/www (Como suele ser habitual).
La jerarquía de directorios que tengo en /var/www se corresponde con los sitios web que alojo en dicho servidor, por ejemplo:
- /var/www
- dominio1.com
- dominio2.com
- dominio3.com
- …
En este ejemplo pondremos la situación de que un cliente ha contratado nuestros servicios para realizar su página web y quiere acceder a su servidor (que ha contratado con nosotros).
En este caso, pongamos que el cliente (usuario a crear) se llamará dario.
Siguiendo la jerarquía explicada anteriormente, nuestro usuario tendrá asignado como home el directorio /var/www/dario.com y, por lo tanto, deberemos darle total control sobre dicho directorio (obviamente nosotros seguiremos pudiendo acceder a él por ser root).
También parto de la base de que sabes crear el directorio al que le daremos acceso al usuario y que lo tienes creado.
Crear el usuario
Como ya he dicho antes, el usuario será dario, la contraseña la que escojamos y el directorio al que accederá al iniciar sesión por SFTP /var/www/dario.com.
Para ello, utilizamos el siguiente comando (es necesario acceder por SSH con permisos de administrador):
adduser --home /directorio/home/del/usuario nombredeusuario |
O lo que es lo mismo, aplicado a nuestro ejemplo:
adduser --home /var/www/dario.com/ dario |
Ahora que ya tenemos nuestro usuario creado, tenemos que nombrarlo dueño del directorio:
chown dario:dario /var/www/dario.com/ |
Y le damos permisos de escritura:
chmod 755 /var/www/dario.com |
Habilitar y configurar el SFTP
Necesitamos que OpenSSH nos permita restringir a este usuario a su carpeta para que únicamente acceda a ella, pero también necesitamos configurarlo para que funcione adecuadamente.
Lo primero que vamos a hacer es editar el fichero sshd_config, utiliza tu editor favorito:
nano /etc/ssh/sshd_config |
Localizamos la línea Subsystem sftp /usr/lib/openssh/sftp-server y le añadimos una almohadilla (#) delante para comentarla. A continuación agregamos debajo esta nueva instrucción: Subsystem sftp internal-sftp
Ahora, al final de este mismo fichero (sshd_config) agregamos las siguientes líneas:
Match User dario ChrootDirectory /var/www/dario.com/ AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp |
Donde le indicamos que si el usuario que intenta acceder es dario, le mande al directorio indicado.
Con esto, si lo hemos hecho bien, podremos probar a acceder desde Filezilla o cualquier cliente FTP y veremos que funciona (a mí me ha funcionado).
Si tienes cualquier duda puedes ponerlo en los comentarios, intentaré resolver todas las que pueda.
Hola que tal me sirvió mucho tu publicación pero el usuario igual puede retroceder y moverse por los directorio yo solo quiero que vea su carpeta nada más no la de mis demás clientes como hago eso? Gracias desde ya.
Hola, revisa bien el tutorial pues, según recuerdo, no podía ascender más que a su directorio raíz.
buenos segui el codigo
pero al querer entrar mediante ftp
me pide usuario y contraseña
pero siguiendo este codigo solo creamos un usuario sin contraseña
Hola Evelyn, cuando haces el adduser te pide la contraseña del usuario.
Para agregar contraseña al usuario debes usar el comando
passwd usuario