En este artículo demostraré cómo podemos configurar un servidor FTP en la Raspberry Pi que se puede utilizar para compartir archivos entre sus dispositivos. Usaremos vsFTPd ya que es un servidor FTP muy estable, seguro y muy rápido. También demostraré cómo configurar vsFTPd para restringir a los usuarios a sus directorios HOME, junto con el cifrado de toda la conexión mediante SSL/TLS.
Si desea seguir este material, debe tener el sistema operativo Raspberry Pi instalado en su Raspberry Pi. La ejecución de un servidor FTP no requiere una interfaz gráfica, por lo que recomiendo instalar Raspberry Pi OS Lite con el servicio SSH habilitado, lo que permite el acceso remoto.
Instalar vsFTPd en Raspberry Pi
El paquete vsftpd está disponible en los repositorios oficiales del sistema operativo Raspberry Pi, por lo que se puede instalar con los siguientes comandos:
sudo apt update
sudo apt install vsftpd
Después de la instalación, el servicio del servidor FTP se iniciará automáticamente. Para comprobar el estado de este servicio, ejecute:
sudo systemctl status vsftpd
El retorno de este comando debería devolver "Activo:activo (en ejecución) desde...", algo así como:
vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-05-23 07:02:41 BST; 14s ago
...
Cómo migrar de CentOS 8 a Rocky Linux 8/Alma Linux 8
Configurar servidor FTP con vsFTPd
La configuración de vsFTPd se realiza a través del archivo /etc/vsftpd.conf .
La mayoría de las configuraciones están bien documentadas, en inglés, en el archivo de configuración. Si desea evaluar todas las opciones disponibles, le recomiendo el sitio web oficial en:Página de manual de VSFTPD.CONF
1. Acceso al servidor FTP
Para asegurarse de que solo los usuarios del sistema operativo local puedan acceder al servidor FTP, busque las entradas anonymous_enable y local_enable en el archivo de configuración, dejándolas de la siguiente manera:
anonymous_enable=NO
local_enable=YES
2. Habilitando cargas
Ubique y descomente la configuración write_enable para permitir cambios en el sistema de archivos, lo que permite a los usuarios cargar y eliminar archivos:
write_enable=YES
3. Jaula de raíces
Para evitar que los usuarios de FTP accedan a archivos fuera de su carpeta de inicio, debemos crear un chroot jail, descomentando la configuración chroot_local_user :
chroot_local_user=YES
Cuando la función chroot está habilitada, vsFTPd deshabilitará la carga de archivos si el directorio del usuario está bloqueado.
Utilice una de las siguientes opciones para dejar el entorno chroot en modo de escritura.
Opción 1:la forma recomendada de habilitar la carga de archivos y dejar el chroot activo, configurando los directorios FTP. En el siguiente ejemplo, crearé un directorio ftp dentro de la carpeta de inicio del usuario, que servirá como la carpeta utilizada por chroot y permitirá que los archivos se carguen allí.
user_sub_token=$USER
local_root=/home/$USER/ftp
Opción 2:otra alternativa es agregar la configuración allow_writeable_chroot en el archivo vsftpd.conf. Esta opción habilitará la opción de escribir en la carpeta de inicio de los usuarios.
allow_writeable_chroot=YES
4. Conexiones pasivas en servidor FTP
De forma predeterminada, vsFTPd utiliza el modo activo. Para usar el modo pasivo, establezca el rango mínimo y máximo de puertos usados.
pasv_min_port=30000
pasv_max_port=31000
vsFTPd puede usar cualquier puerto en modo pasivo. Cuando el modo pasivo está habilitado, el cliente FTP abre una conexión en un puerto aleatorio cuando se conecta al servidor FTP, en el intervalo establecido en el archivo de configuración.
5. Limite el inicio de sesión a ciertos usuarios
Podemos configurar vsFTPd para permitir que solo unos pocos usuarios inicien sesión. Para realizar esta configuración, agregue las siguientes líneas al archivo de configuración:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Cuando esta configuración está habilitada, debe especificar qué usuarios podrán iniciar sesión, agregando sus nombres de usuario en el archivo /etc/vsftpd.user_list, con un usuario por línea.
6. Transmisión segura con SSL/TLS
Para cifrar la transmisión FTP con SSL/TLS, debe tener un certificado SSL y configurar el servidor FTP para usarlo. Podemos usar un certificado SSL existente firmado por un emisor certificado o crear un certificado autofirmado.
Si tiene un dominio o subdominio que apunta a la IP de su servidor FTP, puede generar un certificado SSL gratuito usando Let's Encrypt. Si nunca lo ha usado antes, siga la documentación oficial:Primeros pasos - Let's Encrypt - Certificados SSL/TLS gratuitos
En este artículo, generaremos una clave autofirmada usando el comando openssl.
Ejecute el siguiente comando para crear una clave privada (certificado) de 10 años, autofirmada y de 2048 bits que es válida por 10 años. Las claves públicas y privadas se almacenará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
Después de crear las claves, abra de nuevo el archivo de configuración de vsFTPd:
sudo nano /etc/vsftpd.conf
Encuentre la configuración de rsa_cert_file y rsa_private_key_file cambiando sus valores al archivo pem y establezca la configuración de ssl_enable en SÍ.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Si estos ajustes no están configurados correctamente, el servidor FTP solo utilizará TLS para proteger las conexiones.
Reinicio o servidor FTP
Cuando se realizan las configuraciones anteriores, el archivo de configuración de vsFTPd debería verse así (sin los comentarios):
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 en este archivo surtan efecto:
sudo systemctl restart vsftpd
Apertura del cortafuegos
Si utiliza UFW Firewall en su distribución, debe liberar el tráfico FTP, abriendo los puertos 20 (datos FTP), 21 (comandos FTP) y 30000-31000 (puertos en modo pasivo), utilizando los siguientes comandos:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Ahora, vuelva a leer las reglas de UFW, deshabilitándolas y volviéndolas a habilitar.
sudo ufw disable
sudo ufw enable
Crear un usuario para FTP
Para probar nuestro servidor FTP, crearemos un usuario.
- Si ya tiene un usuario que se usará y solo desea darle acceso, omita el primer paso.
- Si configuró allow_writeable_chroot=YES en su archivo de configuración, omita el tercer paso.
01. Cree un usuario llamado novouserftp:
sudo adduser novouserftp
Cuando se le solicite, establezca la contraseña del usuario.
02. Agregue el usuario a la lista de aquellos que pueden usar el servidor FTP.
echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list
03. Cree un directorio FTP y configure los permisos correctos.
sudo mkdir -p /home/novouserftp/ftp/upload
sudo chmod 550 /home/novouserftp/ftp
sudo chmod 750 /home/novouserftp/ftp/upload
sudo chown -R novouserftp: / home / novouserftp / ftp
Como se mencionó anteriormente, el usuario podrá cargar archivos en la carpeta ftp/upload de su directorio de inicio.
¡En este punto, su servidor FTP es completamente funcional y puede conectarse usando clientes FTP como FileZilla!
Deshabilitar el acceso de shell
De forma predeterminada, cuando se crea un usuario, si no se realiza ninguna configuración adicional, este usuario tiene acceso SSH al servidor. Para deshabilitar este acceso, cree un nuevo shell que solo muestre un mensaje que le diga al usuario que esta cuenta está limitada solo al acceso FTP.
Cree el shell /bin/ftponly y hacerlo ejecutable.
echo -e '#!/bin/sh echo "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 creado a /bin/ftponly:
sudo usermod novouserftp -s / bin / ftponly
Use este último comando para todos los usuarios que solo tendrán acceso al servidor FTP.
Conclusiones
Esperemos que esté claro cómo instalar y configurar un servidor FTP rápido y seguro en su sistema Raspberry Pi.