¿Cómo configurar un servidor FTP con Vsftpd en Raspberry Pi?

0
2271

Instalación de 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 después de que se complete el proceso de instalación. Podemos verificarlo ejecutando el siguiente comando:

sudo systemctl status vsftpd

El resultado del servicio vsftpd activo y en ejecución es el siguiente:

● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-10-21 19:00:41 BST; 9s ago
...

Configuración de vsftpd

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

Ahora comience abriendo el archivo de configuración vsftpd:

sudo nano /etc/vsftpd.conf

1. Acceso FTP

Para garantizar que sólo los usuarios locales pueden acceder al servidor FTP, busque las directivas anonymous_enabley local_enable:

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

2. Habilitación de cargas

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

/etc/vsftpd.conf
write_enable=YES

3. Chroot Jail

Para evitar que los usuarios de FTP accedan a archivos fuera de sus directorios personales, elimine el comentario de la directiva chroot.

/etc/vsftpd.conf
chroot_local_user=YES

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

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 el chroot habilitado y configurar los directorios FTP. En este ejemplo, crearemos un directorio ftp dentro del home del usuario, que servirá como chroot y un directorio uploadsgrabable para cargar archivos.
    /etc/vsftpd.conf
    user_sub_token=$USER
    local_root=/home/$USER/ftp
  • Método 2. – Otra opción es agregar la siguiente directiva en el archivo de configuración vsftpd. Utilice esta opción si debe 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 mínimo y máximo de puertos:

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

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. Limitación del inicio de sesión del usuario

Puede configurar vsftpd para permitir que solo ciertos usuarios inicien sesión. Para hacerlo, agregue las siguientes líneas al final del archivo:

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

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

6. Protección de las transmisiones con SSL/TLS

Para cifrar las transmisiones FTP con SSL/TLS, necesitará 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 un 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 directivas rsa_cert_filersa_private_key_file, cambie sus valores del archivo y establezca la directiva ssl_enable en YES:

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

Si no se especifica lo contrario, el servidor FTP utilizará solo 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í:

/etc/vsftpd.conf
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

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

sudo systemctl restart vsftpd

Abrir el cortafuegos

Si está ejecutando un firewall UFW , deberá permitir el tráfico FTP.

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

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

Vuelva a cargar las reglas de UFW desactivando y volviendo a activar UFW:

sudo ufw disablesudo ufw enable

Creando usuario 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 lo configura allow_writeable_chroot=YESen su archivo de configuración, omita el tercer paso.
  1. Cree un nuevo usuario llamado newftpuser:
    sudo adduser newftpuser

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

  2. Agregue el usuario a la lista de usuarios FTP permitidos:
    echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
  3. Cree el árbol de directorios 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

Aquí el usuario podrá cargar o subir 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, si no se especifica explícitamente, el usuario tendrá acceso SSH al dispositivo. Para deshabilitar el acceso al shell, cree un nuevo shell que simplemente imprima un mensaje que le dice al usuario que su cuenta está limitada al acceso FTP únicamente.

Crea el shell /bin/ftponly y hazlo 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 archivo /etc/shells:

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

Cambie el shell de usuario a /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Use el mismo comando para cambiar el shell de todos los usuarios a los que desea otorgar solo acceso FTP.

Conclusión

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