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 encriptar toda la transmisión con SSL/TLS.
Para este proyecto, debe tener Raspbian instalado en su Raspberry Pi. La ejecución de un servidor FTP no requiere una interfaz gráfica, por lo que nuestra recomendación es utilizar la imagen de Raspbian Lite y habilitar SSH.
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. Para verificarlo, imprima el estado del servicio:
sudo systemctl status vsftpd
El resultado se verá como a continuación, mostrando que el servicio vsftpd está activo y ejecutándose:
● 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
El servidor vsftpd se puede configurar editando el /etc/vsftpd.conf
archivo.
La mayoría de las configuraciones están bien documentadas dentro del archivo de configuración. Para conocer todas las opciones disponibles, visite la página oficial de vsftpd.
Comience abriendo el archivo de configuración de vsftpd:
sudo nano /etc/vsftpd.conf
1. Acceso FTP
Para asegurarse de que solo los usuarios locales puedan acceder al servidor FTP, busque las directivas anonymous_enable
y local_enable
y verifique que su configuración coincida con las líneas a continuación:
anonymous_enable=NO
local_enable=YES
2. Habilitación de cargas
Ubique y descomente la write_enable
directiva para permitir cambios en el sistema de archivos, como cargar y eliminar archivos.
write_enable=YES
3. Cárcel de Chroot
Para evitar que los usuarios de FTP accedan a archivos fuera de sus directorios de inicio, elimine los comentarios de la chroot
directiva.
chroot_local_user=YES
Cuando la función chroot está activa, vsftpd se negará a cargar archivos si se puede escribir en el directorio en el que están bloqueados los usuarios.
Utilice una de las siguientes soluciones para hacer que el entorno chroot sea escribible:
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
directorio dentro de la casa del usuario, que servirá como chroot y unuploads
directorio de escritura para cargar archivos./etc/vsftpd.confuser_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. Use esta opción si debe otorgar acceso de escritura a su usuario a su directorio de inicio.
/etc/vsftpd.confallow_writeable_chroot=YES
4. Conexiones FTP pasivas
De forma predeterminada, vsftpd utiliza el modo activo. Para usar el modo pasivo, establezca el rango mínimo y máximo de puertos:
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 con el servidor en un puerto aleatorio en el rango que haya 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:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Cuando esta función está habilitada, debe especificar explícitamente qué usuarios pueden iniciar sesión agregando los nombres de usuario al /etc/vsftpd.user_list
archivo (un usuario por línea).
6. Protección de transmisiones con SSL/TLS
Para cifrar las transmisiones FTP con SSL/TLS, deberá tener un certificado SSL y configurar el servidor FTP para usarlo.
Puede utilizar un certificado SSL existente firmado por una autoridad de certificación 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 gratuito de Let's Encrypt.
En este tutorial, generaremos un certificado SSL autofirmado usando el openssl
comando.
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
Encuentre las directivas rsa_cert_file
y rsa_private_key_file
, cambie sus valores a la pam
ruta del archivo y establezca la ssl_enable
directiva en YES
:
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 de vsftpd (excluyendo 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
Guarde el archivo y reinicie el servicio vsftpd para que los cambios surtan efecto:
sudo systemctl restart vsftpd
Apertura del cortafuegos
Si está ejecutando un firewall UFW, deberá permitir el tráfico FTP.
Para abrir puerto 21
(puerto de comando FTP), 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 deshabilitando y volviendo a habilitar UFW:
sudo ufw disable
sudo ufw enable
Creación de 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 configuró
allow_writeable_chroot=YES
en su archivo de configuración, omita el tercer paso.
Crear un nuevo usuario llamado
newftpuser
:sudo adduser newftpuser
Cuando se le solicite, establezca 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 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
Como se discutió en la sección anterior, el usuario podrá cargar archivos en el
ftp/upload
directorio.
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 de 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 imprimirá un mensaje diciéndole al usuario que su cuenta está limitada solo al acceso FTP.
Cree el /bin/ftponly
shell 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
archivo:
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 dar solo acceso FTP.
Conclusión
Le mostramos cómo instalar y configurar un servidor FTP seguro y rápido en su sistema Raspberry Pi.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.
0 Comentarios