Este artículo describe cómo instalar y configurar un servidor FTP en Ubuntu 20.04 que usa para compartir archivos entre sus dispositivos.
FTP (Protocolo de transferencia de archivos) es un protocolo de red estándar utilizado para transferir archivos hacia y desde una red remota. Hay varios servidores FTP de código abierto disponibles para Linux. Los más conocidos y ampliamente utilizados son PureFTPd, ProFTPD y vsftpd. Instalaremos vsftpd (Very Secure Ftp Daemon), un servidor FTP estable, seguro y rápido. También le mostraremos cómo configurar el servidor para restringir a los usuarios a su directorio de inicio y encriptar toda la transmisión con SSL/TLS.
Aunque FTP es un protocolo muy popular, para transferencias de datos más seguras y rápidas, debe usar SCPor SFTP.
Instalando vsftpd en Ubuntu 20.04 #
El paquete vsftpd está disponible en los repositorios de Ubuntu. Para instalarlo, ejecute los siguientes comandos:
sudo apt updatesudo apt install vsftpd
El servicio ftp se iniciará automáticamente una vez que se complete el proceso de instalación. Para verificarlo, imprima el estado del servicio:
sudo systemctl status vsftpd El resultado debería mostrar 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 Tue 2021-03-02 15:17:22 UTC; 3s ago
...
Configurando vsftpd #
La configuración del servidor vsftpd se almacena en el /etc/vsftpd.conf archivo.
La mayoría de las configuraciones del servidor están bien documentadas dentro del archivo. Para conocer todas las opciones disponibles, visite la página de documentación de vsftpd.
En las siguientes secciones, repasaremos algunas configuraciones importantes necesarias para configurar una instalación segura de vsftpd.
Comience abriendo el archivo de configuración de vsftpd:
sudo nano /etc/vsftpd.conf 1. Número de acceso FTP
Permitiremos el acceso al servidor FTP solo a los usuarios locales. Busque anonymous_enable y local_enable directivas y verifique que su configuración coincida con las líneas a continuación:
anonymous_enable=NO
local_enable=YES
2. Habilitando cargas #
Ubique y descomente el write_enable directiva para permitir cambios en el sistema de archivos, como cargar y eliminar archivos:
write_enable=YES
3. Cárcel chroot #
Para evitar que los usuarios de FTP locales accedan a archivos fuera de sus directorios de inicio, elimine los comentarios de la línea que comienza con chroot_local_user :
chroot_local_user=YES
De manera predeterminada, por razones de seguridad, cuando chroot está habilitado, vsftpd se negará a cargar archivos si el directorio en el que están bloqueados los usuarios es escribible.
Use una de las soluciones a continuación para permitir cargas cuando chroot está habilitado:
-
Método 1. - La opción recomendada es mantener habilitada la función chroot y configurar directorios FTP. En este ejemplo, crearemos un
/etc/vsftpd.confftpdirectorio dentro de la casa del usuario, que servirá como chroot y unuploadsgrabable directorio para subir archivos:user_sub_token=$USER local_root=/home/$USER/ftp -
Método 2. - Otra opción es habilitar el
/etc/vsftpd.confallow_writeable_chrootdirectiva:allow_writeable_chroot=YESUse esta opción solo si debe otorgar acceso de escritura a su usuario a su directorio de inicio.
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:
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
Puede utilizar 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 número de 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.confuserlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Cuando esta opción está habilitada, debe especificar explícitamente qué usuarios pueden iniciar sesión agregando los nombres de usuario a /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 rápidamente un certificado Let's EncryptSSL gratuito.
Generaremos una clave privada de 2048 bits y un certificado SSL autofirmado que tendrá una validez de diez años:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem Tanto la clave privada como el certificado se guardarán en el mismo archivo.
Una vez creado el certificado SSL, abra el archivo de configuración de vsftpd:
sudo nano /etc/vsftpd.conf
Encuentra el rsa_cert_file y rsa_private_key_file directivas, cambie sus valores a pam ruta del archivo y configure el ssl_enable directiva a 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.
Reiniciar el Servicio vsftpd #
Una vez que haya terminado de editar, el archivo de configuración de vsftpd (excluyendo los comentarios) debería verse así:
/etc/vsftpd.conflisten=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
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
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
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), puerto 20 (puerto de datos FTP) y 30000-31000 (rango de puertos pasivos), ejecute los siguientes comandos:
sudo ufw allow 20:21/tcpsudo ufw allow 30000:31000/tcp
Para evitar ser bloqueado, asegúrese de que el puerto 22 está abierto:
sudo ufw allow OpenSSH Vuelva a cargar las reglas de UFW deshabilitando y volviendo a habilitar UFW:
sudo ufw disablesudo ufw enable
Para verificar los cambios ejecuta:
sudo ufw status Status: active
To Action From
-- ------ ----
20:21/tcp ALLOW Anywhere
30000:31000/tcp ALLOW Anywhere
OpenSSH ALLOW Anywhere
20:21/tcp (v6) ALLOW Anywhere (v6)
30000:31000/tcp (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Creación de usuario FTP n.º
Para probar el servidor FTP, crearemos un nuevo usuario.
- Si el usuario al que desea otorgar acceso FTP ya existe, omita el primer paso.
- Si configura
allow_writeable_chroot=YESen su archivo de configuración, omita el tercer paso.
-
Cree un nuevo usuario llamado
newftpuser:sudo adduser newftpuser -
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/uploadsudo chmod 550 /home/newftpuser/ftpsudo chmod 750 /home/newftpuser/ftp/uploadsudo chown -R newftpuser: /home/newftpuser/ftpComo se discutió en la sección anterior, el usuario podrá cargar sus archivos en el
ftp/uploaddirectorio.
En este punto, su servidor FTP es completamente funcional. Debería poder conectarse al servidor usando cualquier cliente FTP que pueda configurarse para usar el cifrado TLS, como FileZilla.
Deshabilitar acceso Shell #
De forma predeterminada, al crear un usuario, si no se especifica explícitamente, el usuario tendrá acceso SSH al servidor. Para deshabilitar el acceso al shell, cree un nuevo shell que imprimirá un mensaje que le indicará al usuario que su cuenta está limitada solo al acceso FTP.
Ejecute los siguientes comandos para crear el /bin/ftponly archivo y hacerlo ejecutable:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponlysudo chmod a+x /bin/ftponly
Agregue el nuevo shell a la lista de shells válidos en /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 Puede usar el mismo comando para cambiar el shell de todos los usuarios a los que desea dar solo acceso FTP.