Cómo configurar el servidor FTP con Vsftpd en Raspberry Pi

1 mar 2021 5 min di lettura
Cómo configurar el servidor FTP con Vsftpd en Raspberry Pi
Indice dei contenuti

Introducción

Este tutorial explica cómo instalar y configurar un servidor FTP en Raspberry Pi que usa para compartir archivos entre sus dispositivos. Usaremos vsftpd, que es un servidor FTP estable, seguro y rápido. También le mostraremos cómo configurar vsftpd para restringir a los usuarios a su directorio de inicio y cifrar toda la transmisión con SSL /TLS.

Para este proyecto, debes tener Raspbian instalado en tu Raspberry Pi. Ejecutar un servidor FTP no requiere una interfaz gráfica, por lo que nuestra recomendación es usar la imagen de Raspbian Lite y habilitar SSH.

Instalar vsftpd en Raspberry Pi

El paquete vsftpd está disponible en los repositorios estándar de Raspbian. Para instalarlo, ejecute los siguientes comandos:

sudo apt update
sudo apt install vsftpd

El servicio ftp se iniciará automáticamente al final del proceso de instalación. Para comprobar esto, imprima el estado del servicio:

sudo systemctl status vsftpd

La salida se verá similar a la siguiente, mostrando que el servicio vsftpd está en funcionamiento:

● vsftpd.service - vsftpd FTP server
 Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
 Active: active (running) since Wed 21 Oct 2020 16:55:23 GMT; 8s ago...

Configurar vsftpd

Los sensores del servidor vsftpd se pueden configurar editando el archivo /etc/vsftpd.conf

La mayoría de las configuraciones están bien documentadas en el archivo de configuración. Para conocer todas las opciones disponibles, visite la página oficial de vsftpd.

Comience abriendo el archivo de configuración vsftpd:

sudo nano /etc/vsftpd.conf

1. Acceso FTP

Para asegurarse de que solo los usuarios locales puedan acceder al servidor FTP, busque las anonymous_enable y local_enable y verifique que la configuración coincida en las líneas siguientes:

anonymous_enable=NO
 local_enable=YES
/etc/vsftpd.conf

2. Habilitar cargas

write_enable el comentario de la directiva write_enable para permitir cambios en el sistema de archivos, como cargar y eliminar archivos.

write_enable=YES
/etc/vsftpd.conf

3. Cárcel de Chroot

Para evitar que los usuarios de FTP accedan a archivos fuera de sus directorios de inicio, descomente la directiva chroot

chroot_local_user=YES
/etc/vsftpd.conf

Cuando la función chroot está activa, vsftpd se negará a cargar archivos si se puede escribir en el directorio donde los usuarios están bloqueados.

Utilice una de las siguientes soluciones para hacer que el entorno chroot se pueda escribir:

Método 1. - La opción recomendada para permitir la carga es mantener chroot habilitado y configurar directorios FTP. En este ejemplo, crearemos un ftp dentro de la casa del usuario, que servirá como chroot y como uploads para cargar archivos.

user_sub_token=$USER
 local_root=/home/$USER/ftp
/etc/vsftpd.conf

Método 2. - Otra opción es agregar la siguiente directiva en el archivo de configuración vsftpd. Utilice esta opción si necesita otorgar acceso de escritura a su usuario a su directorio de inicio./etc/vsftpd.conf

allow_writeable_chroot=YES

4. Conexiones FTP pasivas

De forma predeterminada, vsftpd usa el modo activo. Para usar el modo pasivo, establezca el rango de puertos mínimo y máximo:

pasv_min_port=30000
 pasv_max_port=31000
/etc/vsftpd.conf

vsftpd puede usar cualquier puerto para conexiones FTP pasivas. Cuando el modo pasivo está habilitado, el cliente FTP abre una conexión al servidor en un puerto aleatorio en el rango que ha elegido.

5. Restringir el acceso de los usuarios

Puede configurar vsftpd para permitir el acceso solo a ciertos usuarios. Para hacer esto, agregue las siguientes líneas al final del archivo:

userlist_enable=YES
 userlist_file=/etc/vsftpd.user_list
 userlist_deny=NO
/etc/vsftpd.conf

Cuando esta función está habilitada, debe especificar explícitamente qué usuarios pueden iniciar sesión agregando nombres de usuario al /etc/vsftpd.user_list (un usuario por línea).

6. Transmisiones seguras con SSL /TLS

Para cifrar las transmisiones FTP con SSL /TLS, debe tener un certificado SSL y configurar el servidor FTP para usarlo.

Puede utilizar un certificado SSL existente firmado por una autoridad certificadora de confianza o crear un certificado autofirmado.

Si tiene un dominio o subdominio que apunta a la dirección IP del servidor FTP, puede generar fácilmente un certificado SSL Let's Encrypt gratuito.

En este tutorial, generaremos un certificado SSL autofirmado usando el comando openssl

Ejecute el siguiente comando para crear una clave privada de 2048 bits y un certificado autofirmado válido por 10 años. Tanto la clave privada como el certificado se guardarán en el mismo archivo:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Una vez creados los archivos, abra el archivo de configuración:

sudo nano /etc/vsftpd.conf

Busque las rsa_cert_file y rsa_private_key_file, cambie sus valores en la ruta del archivo pam y establezca la directiva ssl_enable YES:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
 rsa_private_key_file=/etc/ssl/private/vsftpd.pem
 ssl_enable=YES
/etc/vsftpd.conf

A menos que se especifique lo contrario, el servidor FTP solo utilizará TLS para realizar conexiones seguras.

Reinicie el servicio vsftpd

Una vez que haya terminado de configurar el servidor, el archivo de configuración vsftpd (excluidos los comentarios) debería verse así:

listen=NO
 listen_ipv6=YES
 anonymous_enable=NO
 local_enable=YES
 write_enable=YES
 dirmessage_enable=YES
 use_localtime=YES
 xferlog_enable=YES
 connect_from_port_20=YES
 chroot_local_user=YES
 allow_writeable_chroot=YES
 pasv_min_port=30000
 pasv_max_port=31000
 userlist_enable=YES
 userlist_file=/etc/vsftpd.user_list
 userlist_deny=NO
 secure_chroot_dir=/var/run/vsftpd/empty
 pam_service_name=vsftpd
 rsa_cert_file=/etc/ssl/private/vsftpd.pem
 rsa_private_key_file=/etc/ssl/private/vsftpd.pem
 ssl_enable=YES
/etc/vsftpd.conf

Guarde el archivo y reinicie el servicio vsftpd para que los cambios surtan efecto:

sudo systemctl restart vsftpd

Abra el firewall

Si está utilizando un cortafuegos UFW, deberá permitir el tráfico FTP.

Para abrir el puerto 21 (puerto FTP), el puerto 20 (puerto FTP) y 30000-31000 (rango de puerto pasivo), ejecute los siguientes comandos:

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

Recargue las reglas de UFW deshabilitando y volviendo a habilitar UFW:

sudo ufw disable
sudo ufw enable

Crea un usuario de FTP

Para probar el servidor FTP, crearemos un nuevo usuario.

  • Si ya tiene un usuario al que desea otorgar acceso FTP, omita el primer paso.
  • Si establece allow_writeable_chroot=YES en el archivo de configuración, omita el tercer paso.

Cree un nuevo usuario llamado newftpuser:

sudo adduser newftpuser

Cuando se le solicite, configure la contraseña de usuario.

Agregue el usuario a la lista de usuarios FTP permitidos:

echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

Cree la estructura del directorio FTP y establezca los permisos correctos:

sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp

Como se discutió en la sección anterior, el usuario podrá cargar archivos al directorio ftp/upload

En este punto, su servidor FTP es completamente funcional y debería poder conectarse a su servidor usando cualquier cliente FTP como FileZilla.

Deshabilitar el acceso al shell

De forma predeterminada, al crear un usuario, a menos que se especifique explícitamente, el usuario tendrá acceso SSH al dispositivo. Para deshabilitar el acceso al shell, cree un nuevo shell que simplemente imprimirá un mensaje informando al usuario que su cuenta está limitada al acceso FTP únicamente.

Cree el shell /bin/ftponly y hágalo ejecutable:

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly

Agregue el nuevo shell a la lista de shells válidos en el /etc/shells:

echo "/bin/ftponly" | sudo tee -a /etc/shells

Cambie el shell de usuario a /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Utilice el mismo comando para cambiar el shell de todos los usuarios a los que desea otorgar acceso FTP únicamente.

Conclusión

Le mostramos cómo instalar y configurar un servidor FTP seguro y rápido en su sistema Raspberry Pi.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.