Introducción
FTP (Protocolo de transferencia de archivos) es un protocolo de red cliente-servidor estándar que permite a los usuarios transferir archivos desde y hacia una red remota.
Hay varios servidores FTP de código abierto disponibles para Linux. Los más populares y utilizados son PureFTPd, ProFTPD y vsftpd.
En este tutorial, instalaremos vsftpd (Very Secure Ftp Daemon) en CentOS 8. 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 cifrar toda la transmisión con SSL /TLS.
Para transferencias de datos más seguras y rápidas, use SCP o SFTP.
Prerrequisitos
Antes de continuar con este tutorial, asegúrese de haber iniciado sesión como usuario con privilegios de sudo.
Si desea instalar y configurar VSFTPD en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instale vsftpd en CentOS 8
El paquete vsftpd está disponible en los repositorios CentOS predeterminados. Para instalarlo, emita el siguiente comando:
sudo yum install vsftpd
Una vez que el paquete esté instalado, inicie el demonio vsftpd y habilite el inicio automático en el inicio:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Puede verificar que el servicio vsftpd se esté ejecutando imprimiendo su estado:
sudo systemctl status vsftpd
El resultado se verá así, demostrando que el servicio vsftpd está en funcionamiento:
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Configurar vsftpd
La configuración del servicio vsftpd implica editar el /etc/vsftpd/vsftpd.conf
La mayoría de las configuraciones están bien documentadas en el archivo de configuración. Para conocer todas las opciones disponibles, visite la página oficial de vsftpd.
En las siguientes secciones, veremos algunas configuraciones importantes necesarias para configurar una instalación segura de vsftpd.
En este tutorial usamos nano, si lo prefiere puede usar vi instalado por defecto en la mayoría de las distribuciones.
sudo dnf install nano
Comience abriendo el archivo de configuración vsftpd:
sudo nano /etc/vsftpd/vsftpd.conf
local_enable
acceso al servidor FTP solo para usuarios locales, busque las directivas anonymous_enable
y local_enable y verifique la correspondencia de la configuración en las líneas siguientes:
anonymous_enable=NO
local_enable=YES
Elimine el comentario de la configuración write_enable
para permitir cambios en el sistema de archivos como la carga y eliminación de archivos.
write_enable=YES
Evite que los usuarios de FTP accedan a todos los archivos fuera de sus directorios de inicio (Jail chroot) Descomente la directiva chroot
chroot_local_user=YES
De forma predeterminada, cuando chroot está habilitado, vsftpd se niega a cargar archivos si el directorio donde los usuarios están bloqueados es modificable. Esto es para prevenir una vulnerabilidad de seguridad.
Utilice uno de los siguientes métodos para permitir cargas cuando chroot está habilitado.
Método 1. - El método recomendado para permitir la carga es mantener el chroot habilitado y configurar los directorios FTP. En este tutorial, crearemos un ftp
dentro de la casa del usuario que actuará como un chroot y un uploads
para cargar archivos:
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 necesita otorgar acceso de escritura a su usuario a su directorio de inicio:
allow_writeable_chroot=YES
Conexiones FTP pasivas
vsftpd puede usar cualquier puerto para conexiones FTP pasivas. Especificaremos el rango mínimo y máximo de puertos y luego abriremos el rango en nuestro firewall.
Agregue las siguientes líneas al archivo de configuración:
sudo nano /etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000
Restringir el acceso de los usuarios
Para permitir que solo ciertos usuarios accedan al servidor FTP, agregue las siguientes líneas después de la userlist_enable=YES
:
sudo nano /etc/vsftpd/vsftpd.conf
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 nombres de usuario al /etc/vsftpd/user_list
(un usuario por línea).
Transmisiones seguras con SSL /TLS
Para cifrar las transmisiones FTP con SSL /TLS, debe 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 (Certificado SSL autofirmado) usando el comando openssl
.
El siguiente comando 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 el mismo archivo:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Una vez que se ha creado el certificado SSL, abra el archivo de configuración vsftpd:
sudo nano /etc/vsftpd/vsftpd.conf
Busque las rsa_cert_file
y rsa_private_key_file
, cambie sus valores en la ruta del archivo pam
y establezca la directiva ssl_enable
YES
:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
A menos que se especifique lo contrario, el servidor FTP solo utilizará TLS para establecer conexiones seguras.
Reinicie el servicio vsftpd
Una vez que haya terminado de editar, el archivo de configuración de vsftpd (excluidos los comentarios) debería verse así:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Reinicie el servicio vsftpd para que los cambios surtan efecto:
sudo systemctl restart vsftpd
Abra el firewall
Si está ejecutando un firewall, debe permitir el tráfico FTP.
Para abrir el puerto 21
(puerto de comando FTP), el puerto 20
(puerto de datos FTP) y el puerto 30000-31000
(rango de puerto pasivo), ingrese los siguientes comandos:
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
Vuelva a cargar las reglas del firewall escribiendo:
firewall-cmd --reload
Crea un usuario de FTP
Para probar nuestro servidor FTP crearemos un nuevo usuario.
- Si ya tiene un usuario al que desea otorgar acceso FTP, omita el primer paso.
- Si establece
allow_writeable_chroot=YES
en el archivo de configuración, omita el tercer paso.
Crea un nuevo usuario llamado newftpuser
:
sudo adduser newftpuser
A continuación, deberá establecer la contraseña del usuario:
sudo passwd newftpuser
Agregue el usuario a la lista de usuarios FTP permitidos:
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
Cree la estructura del directorio 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á subir sus archivos al directorio ftp/upload
En este punto, su servidor FTP es completamente funcional y debería poder conectarse a su servidor con cualquier cliente FTP que pueda configurarse para usar encriptación TLS como FileZilla.
Deshabilitar el acceso al shell
De forma predeterminada, al crear un usuario, a menos que se especifique explícitamente, el usuario tendrá acceso SSH al servidor.
Para deshabilitar el acceso al shell, crearemos un nuevo shell que simplemente 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
y hacerlo 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
:
echo "/bin/ftponly" | sudo tee -a /etc/shells
Cambie el shell del usuario a /bin/ftponly
:
sudo usermod newftpuser -s /bin/ftponly
Utilice el mismo comando para cambiar el shell de otros usuarios a los que desea dar solo acceso FTP.
Conclusión
En este tutorial, ha aprendido a instalar y configurar un servidor FTP seguro y rápido en su sistema CentOS 8.