GNU/Linux >> Tutoriales Linux >  >> Linux

Configuración de un servidor FTP con vsFTPd en Raspberry Pi

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.


Linux
  1. Aprende Linux con la Raspberry Pi

  2. Cómo instalar un servidor FTP en CentOS 7 con VSFTPD

  3. Cómo instalar un servidor FTP en Rocky Linux 8 con VSFTPD

  4. Easy vsFTPD:servidor FTP con usuarios virtuales en Debian 8 Jessie

  5. ¿Por qué el chroot_local_user de vsftpd es inseguro?

Cómo instalar el servidor VsFTPD con TLS en Ubuntu 18.04 LTS

¿Cómo Instalar Un Servidor Ftp?

Subir archivos con Monsta FTP

Cómo configurar un servidor FTP con ProFTPD en Ubuntu 18.04

Cómo configurar un servidor FTP con VSFTPD

Configuración de un servidor NFS con Turnkey Linux