Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) x86_64 GNU/Linux
) tras el típico router barato que proporcionan los suministradores de internet, pero no recomiendo a nadie seguir a ciegas mis pasos o consejos en un servidor "serio".Quiero dar las gracias a:
En esta entrada voy a explicar cómo instalar un servidor SFTP (SSH FTP o SSH File Transfer Protocol) y hacer que ciertos usuarios sólo puedan acceder a la máquina remotamente a través del SFTP, evitando acceso a la consola del sistema.
Las ventajas con respecto a otro tipo de servidor FTP y en particular con respecto a VSFTPD son:
Y las desventajas son:
sudo groupadd sftpusers
Si lo hemos hecho bien, al listar los grupos presentes en el ordenador con…
cut -d: -f1 /etc/group
…al final de la lista deberíamos ver sftpusers
.
Creamos los nuevos usuarios en el grupo sftpusers
sin carpeta en /home
(opción -M
) del anterior punto con:
sudo useradd -M -G sftpusers carlos
Dicho usuario sólo tendrá acceso a ficheros a través de SFTP así que le desactivamos la consola de comandos con:
sudo usermod -s /usr/sbin/nologin carlos
Los usuarios del grupo sftp
sólo tendrán acceso a datos y éstos están situados en la carpeta /mnt/data/people/<user>
donde <user>
será en éste ejemplo carlos
. Por lo tanto modificamos el directorio del usuario, que por defecto es /home/<user>
, con el comando:
sudo usermod -d carlos carlos
NOTA: La razón de que no creemos la ruta completa para el home del usuario con sudo usermod -d /mnt/data/people/carlos carlos
es que la primera parte del home será luego especificado desde la configuración de SSH y SFTP (es el mismo archivo de configuración).
Ya sólo queda asignarle una clave al usuario con:
sudo passwd carlos
En mi caso, los voy a poner en /mnt/data/people/carlos
, así que creo dicha(s) carpetas. Es MUY importante que la carpeta "padre", o sea people
, pertenezca al usuario root.
sudo chown root:root /mnt/data/people
Y la carpeta carlos
se la vamos a asignar al usuario carlos
del grupo sftpusers
:
sudo chown carlos:sftpusers /mnt/data/people/carlos
Por mantener las cosas un poco organizadas y que evitar olvidarme de que hay unos usuarios especiales sin directorio propio en /home
, lo que hago es crear un enlace simbólico en /home/carlos
que apunte a la carpeta de datos /mnt/data/people/carlos
:
sudo ln -s /mnt/data/people/carlos/ /home/carlos
Editamos el archivo de configuración /etc/ssh/sshd_config
con:
sudo nano /etc/ssh/sshd_config
Comentamos la línea Subsystem
y añadimos debajo la nueva con internal-sftp:
#Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp
Al final del archivo añadimos la siguiente directiva para los usuarios del grupo sftpusers
:
Match Group sftpusers ChrootDirectory /mnt/data/people X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -d %u
NOTA: A mi modo de ver (repito que no soy un experto en el tema), SFTP tiene un problema o error de configuración, nada más abrir el SFTP, nuestro usuario está obligado a ir a una carpeta que pertenezca al usuario root (como ya se comentó en el PASO 3). Sin embargo, cuando el usuario carlos se loguee, no tendrá permisos para crear nada en dicha carpeta y deberá entrar en su carpeta, llamada carlos
que sí será suya y podrá leer y escribir ficheros. En mi configuración, ese paso lo hago automáticamente con el -d %u
, cambiando el directorio (-d
) a la carpeta que se llama como el usuario (%u
). Pero no deja de ser una pequeña chapuza porque nada impide al usuario subir un nivel cuando abra el FTP y ver las carpetas de los otros usuarios aunque no pueda entrar en ellas. Lo deseable sería que el usuario carlos
entrara directamente y de verdad a su carpeta y que le fuera imposible salir de ella.
Llegados a este punto, podemos intentar acceder a nuestro FTP con SSH desde la consola de otro ordenador en nuestra LAN y deberíamos ver el siguiente mensaje de error:
ssh carlos@<lan_ip_servidor> carlos@<lan_ip_servidor>'s password: ******************* This service allows sftp connections only. Connection to <lan_ip_servidor> closed.
Donde <lan_ip_servidor>
será la IP de nuestro servidor en la red local, 192.168.xxx.yyy en mi caso.
Sin embargo, si intentamos logearnos con sftp, todo debería estar en orden. Podemos probar a ejecutar los comandos help
o dir
sftp carlos@<lan_ip_servidor> carlos@<lan_ip_servidor>'s password: Connected to <lan_ip_servidor>. sftp>
Siguiendo los pasos descritos, nuestro servidor SFTP funciona sólo dentro de nuestra red doméstica usando su IP, algo del estilo de 192.168.x.y. Para poder acceder desde el exterior, tenemos que redireccionar el puerto 20 de nuestro router hacia nuestro servidor. De ese modo, cuando al router le llegue un solicitud entrante de datos por el puerto 20, la redirigirá a nuestro servidor. Para ello, lo mejor es que busquéis en google qué pasos seguir con vuestro modelo de router ya que suelen variar bastante.
Y eso es todo, nuestro servidor SFTP es 100% funcional. La configuración para FileZilla, el cliente de SFTP que uso yo, es muy sencilla y se puede ver en la siguiente imagen.:
En el cuadro rojo superior debemos indicar la IP externa de nuestro servidor SFTP (la IP de nuestra casa, vaya). De momento debemos mirarla manualmente en whatsmyip.org, por ejemplo. Dado que tengo IP dinámica, en la segunda parte de esta entrada explicaré como recibir un email de notificación con la IP de nuestro server. En el cuadro inferior pondríamos el nombre del usuario, carlos
.
Aunque el SFTP ya es funcional, en la segunda parte de la entrada resolveré algunos problemas pendientes:
Add new comment