Instalar servidor FTP y restringir el acceso a los usuarios en Linux
1Instala tu propio servidor restringiendo el acceso a cada usuario a una serie de rutas específicas garantizando la seguridad de tu sistema
17 marzo, 201727 septiembre, 2017 Iván Martínez Linux
Hola a todos en otro post. En esta ocasión os vamos a enseñar como instalar y configurar un servidor ftp en nuestro sistema y restringir a cada usuario el acceso a una serie concreta de directorios pero, antes de nada, y para todos aquellos que empiezan, vamos a explicar que es el protocolo ftp.
2Qué es el protocolo ftp
El protocolo FTP (File Transfer Protocol) o en español Protocolo de Transferencia de Ficheros, es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol) basado en la arquitectura Cliente – Servidor. Desde un equipo, independientemente del sistema operativo, un usuario puede conectarse a un servidor para descargar datos o para subir sus datos a dicho servidor.
Este servicio es ofrecido por la capa de aplicación del modelo de capas de red TCP/IP al usuario que normalmente, lo hace a través de los puertos 20 o 21. Este protocolo fue diseñado para una transferencia rápida entre el servidor y el cliente pero, no es lo que diríamos seguro. Esto lo digo porque el protocolo ftp, realiza una transferencia de ficheros en texto plano, en otras palabras, si en el proceso hubiese alguien escuchando podría ver los datos tal cual han sido enviados. Como solución a este problema, podemos utilizar para la conexión sftp o scp para esta transferencia de archivos pero, con la peculiaridad de qué de esta otra forma, los datos se envían encriptados asegurando la privacidad en el envío de datos.
Volviendo al asunto del que hablábamos en un principio, para la instalación del servidor ftp, vamos a utilizar la herramienta vsftd.
3Instalación de vsftpd
Para instalar nuestro servicio ftp deberemos instalar la herramienta vsftpd de la siguiente forma en máquinas Debian
sudo apt-get install vsftpd
1 |
sudo apt-get install vsftpd |
Configuración vsftpd
Para configurar nuestro servidor, deberemos editar el fichero vsftpd.conf, nosotros lo haremos utilizando vim
sudo vim /etc/vsftpd.conf
1 |
sudo vim /etc/vsftpd.conf |
En este archivo nos vamos a centrar en los parámetros que necesitamos por ahora
listen = YES -> Con esta opción especificamos si queremos iniciar el servicio al iniciar el sistema.
anonymous_enable = NO -> Con esta opción controlamos si los usuarios anónimos puedan conectarse a nuestro sistema. Por seguridad se establecerá en no.
local_enable = YES -> Permitimos o denegamos que los usuarios locales, es decir, el sistema en el cual está instalado pueden loguearse o no.
write_enable = YES -> Para permitir o no que los usuarios además de descargar puedan subir sus propios ficheros.
local_umask = 022 -> La umask establece los permisos para aquellos directorios y ficheros que se creen nuevos en el servidor. Estableceremos el valor 022 (755 para directorios y 644 para ficheros).
chroot_local_user = YES -> Esta directiva la utilizaremos para enjaular al usuario en su directorio y evitar que pueda navegar por todo el sistema.
chroot_list_enable = YES -> Con esta directiva podemos especificar aquellos usuarios que queremos que tengan permisos para acceder al árbol del sistema.
chroot_list_file = /etc/vsftpd.chroot_list -> Con esta opción, indicamos el fichero donde estará el listado de usuarios que pueden navegar por encima de los directorios del servidor, es decir, podrá salir de su home de usuario.
allow_writeable_chroot = YES -> Con esta directiva indicamos al servidor que el usuario enjaulado puede escribir en el servidor.
4Creación del grupo ftp
En este caso, los usuarios que se conectarán deberán tener ciertos permisos, para ello vamos a crear un grupo ftp que los englobe a todos
sudo groupadd ftp
1 |
sudo groupadd ftp |
Con nuestro grupo ya creado, vamos a crear una shell fantasma para que no puedan entrar directamente a la consola del servidor
sudo mkdir /bin/ftp
1 |
sudo mkdir /bin/ftp |
Con nuestra shell fantasma creada, vamos a añadirla al listado de shells del sistema, editamos el fichero
sudo vi /etc/shells
1 |
sudo vi /etc/shells |
Y al final añadimos la carpeta previamente creada
/bin/ftp
1 |
/bin/ftp |
5Creación de nuestro usuario ftp
Ahora que ya tenemos configurado nuestro servidor, vamos a crear un usuario con el que poder acceder vía ftp y le asignamos los permisos correctos.
Vamos a crear la carpeta home para el usuario, en nuestro caso lo hemos llamado usuarioftp y a la carpeta que engloba los usuarios para este servicio, la hemos llamado ftp
mkdir -p /home/ftp/usuarioftp
1 |
mkdir -p /home/ftp/usuarioftp |
Con la opción -p indicamos que si los padres no existen, nos cree el árbol completo.
Vamos a crear nuestro usuario ftp
sudo useradd -g ftp -d /home/ftp/usuarioftp -c "Nombre usuario" usuarioftp
1 |
sudo useradd -g ftp -d /home/ftp/usuarioftp -c "Nombre usuario" usuarioftp |
Vamos a explicar los parámetros utilizados en este comando
Lo primero la palabra clave useradd para la creación de un nuevo usuario
Con -g especificamos el grupo del usuario
Con la opción -d especificamos la ruta de la home de nuestro usuario
Utilizando la opción -c especificamos el nombre completo de nuestro usuario
La última palabra, “usuarioftp”, sería el nombre de nuestro usuario
Ahora añadimos una contraseña a nuestro usuario con el comando
sudo passwd usuarioftp
1 |
sudo passwd usuarioftp |
Tendremos que ingresar la contraseña dos veces para que el sistema nos la valide y acepte.
Ahora vamos a darle permisos al usuario en su home
sudo chown -R usuarioftp:ftp /home/ftp
1 |
sudo chown -R usuarioftp:ftp /home/ftp |
6Enjaulando al usuario
Ahora que ya tenemos nuestro grupo y usuario creados, así como la configuración del servidor, sólo nos queda enjaular a dicho usuario. Esto quiere decir que el usuario no podrá escalar en la jerarquía del directorio y sólo permanecerá en su propio directorio.
Buscamos nuestro usuario en el fichero /etc/passwd
cat /etc/passwd | grep usuarioftp
1 |
cat /etc/passwd | grep usuarioftp |
Copiamos los datos de nuestro usuario, en nuestro caso
usuarioftp:x:1001:114:usuarioftp:/home/ftp/usuarioftp:
1 |
usuarioftp:x:1001:114:usuarioftp:/home/ftp/usuarioftp: |
Y lo pegamos en el fichero /etc/vsftpd.chroot_list
Con todo esto ya sólo nos faltaría reiniciar el servicio ftp
sudo service vsftpd restart
1 |
sudo service vsftpd restart |
Ya tenemos nuestro usuario creado y enjaulado para conectarse por ftp. Para aquellos interesados, en los próximos días, crearé un post explicando como trabajar desde un servicio ftp y resolveré aquellas dudas que expongáis en los comentarios. Gracias por leernos y nos vemos en el próximo post.