FTP (File Transfer Protocol) es uno de los protocolos más antiguos para transferir archivos entre sistemas. Utiliza un modelo cliente-servidor y funciona sobre TCP.
19.1. Introducción al protocolo FTP
Aunque hoy en día, se considera inseguro para conexiones públicas por enviar credenciales en texto claro, sigue siendo utilizado en entornos controlados, redes internas y para compartir archivos de forma anónima.
En el examen LFCS se espera que seas capaz de instalar y configurar un servidor FTP que permita acceso anónimo (sin credenciales de usuario) de forma segura y controlada.
Los dos servidores más comunes en Linux son vsftpd (Very Secure FTP Daemon) y ProFTPD. En este capítulo nos centraremos principalmente en vsftpd por su simplicidad, seguridad y amplia adopción, aunque también veremos nociones de ProFTPD.
19.1.1. Modos de funcionamiento: activo y pasivo
FTP tiene dos modos de transferencia:
- Activo: el servidor abre una conexión de datos desde el puerto 20 hacia un puerto aleatorio del cliente. Suele fallar con cortafuegos/NAT del cliente.
- Pasivo: el cliente abre la conexión de datos hacia un puerto aleatorio del servidor (configurable). Es el más usado hoy porque atraviesa mejor los cortafuegos.
Para un servidor FTP con acceso anónimo, es esencial configurar correctamente el modo pasivo y el rango de puertos.
19.2. Instalación de vsftpd
19.2.1. En Debian/Ubuntu
sudo apt update
sudo apt install vsftpd
19.2.2. En RHEL/CentOS/Fedora
sudo yum install vsftpd # o dnf install vsftpd
Tras la instalación, el servicio se gestiona con systemd:
sudo systemctl enable --now vsftpd
sudo systemctl status vsftpd
El archivo de configuración principal es /etc/vsftpd.conf (o /etc/vsftpd/vsftpd.conf en algunas versiones).
19.3. Configuración básica para acceso anónimo
El acceso anónimo se refiere a la posibilidad de conectarse usando el usuario anonymous o ftp, sin contraseña (o con una contraseña genérica, típicamente el correo electrónico). Los archivos servidos suelen ubicarse en un directorio raíz designado (por ejemplo, /srv/ftp o /var/ftp).
19.3.1. Directorio y permisos
Crear el directorio raíz para FTP anónimo:
sudo mkdir -p /srv/ftp
sudo chown ftp:ftp /srv/ftp # o root:root según la distribución
sudo chmod 755 /srv/ftp
En Debian/Ubuntu, el usuario por defecto de vsftpd es ftp; en RHEL/CentOS suele ser root para la raíz del FTP anónimo, pero es mejor usar un usuario dedicado. Por seguridad, el directorio raíz no debe ser escribible por el usuario anónimo a menos que se permita la carga.
19.3.2. Editar /etc/vsftpd.conf
Abrir con sudo nano /etc/vsftpd.conf y configurar las siguientes directivas:
# Habilitar acceso anónimo
anonymous_enable=YES
# Desactivar acceso de usuarios locales (solo anónimo, por seguridad)
local_enable=NO
# Permitir subir archivos (opcional, solo si se desea)
# anon_upload_enable=YES
# Permitir crear directorios (opcional)
# anon_mkdir_write_enable=YES
# Permitir otras operaciones de escritura (renombrar, borrar)
# anon_other_write_enable=YES
# Directorio raíz para usuarios anónimos
anon_root=/srv/ftp
# Usuario con el que se ejecuta el servidor
nopriv_user=ftp
# Permitir solo anónimos (no locales)
chroot_local_user=YES
allow_writeable_chroot=YES
Algunas opciones importantes:
anonymous_enable=YES: permite el acceso anónimo.local_enable=NO: desactiva el acceso de usuarios locales (recomendado para un servidor solo anónimo). Si se quiere permitir ambos, ponerYESy gestionar conuserlist.anon_upload_enable=YES: permite a anónimos subir archivos (si el directorio tiene permisos de escritura para el usuarioftp).anon_mkdir_write_enable=YES: permite crear carpetas.anon_other_write_enable=YES: permite renombrar/borrar.anon_root: establece el directorio raíz para los anónimos (por defecto/var/ftp).no_anon_password=YES: opcional, no pide contraseña (ni siquiera el correo).hide_ids=YES: oculta UIDs/GIDs en listados.dirmessage_enable=YES: muestra mensaje.messageen directorios.
Después de editar, reiniciar el servicio:
sudo systemctl restart vsftpd
19.3.3. Comprobación rápida
ftp localhost
Introduce anonymous como usuario y pulsa Enter (o correo). Si todo está bien, aparecerá el prompt ftp> y podrás usar ls, get, etc.
19.4. Configuración de puertos y modo pasivo
Para que FTP pasivo funcione correctamente, debes especificar un rango de puertos y, opcionalmente, la IP pública o el hostname.
En /etc/vsftpd.conf:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30099
pasv_address=192.168.1.100 # IP del servidor (opcional si es la misma que la interfaz)
El cortafuegos debe permitir:
- Puerto 21 (control).
- Rango definido (30000-30099) para datos pasivos.
19.4.1. Configurar firewall
Con firewalld:
sudo firewall-cmd --add-service=ftp --permanent
sudo firewall-cmd --add-port=30000-30099/tcp --permanent
sudo firewall-cmd --reload
Con ufw (Ubuntu):
sudo ufw allow 21/tcp
sudo ufw allow 30000:30099/tcp
19.5. Seguridad en el servidor FTP anónimo
Aunque el acceso anónimo es inherentemente inseguro, se pueden aplicar medidas:
- Aislamiento de directorios:
chroot_local_user=YESyallow_writeable_chroot=YESconfinan a los usuarios en su directorio raíz. - No permitir escritura: por defecto, no habilitar
anon_upload_enablenianon_mkdir_write_enablea menos que sea necesario. - Ocultar IDs:
hide_ids=YES. - Limitar ancho de banda:
anon_max_rate=102400(en bytes/s). - Limitar número de conexiones:
max_clients=10,max_per_ip=2. - Registrar actividad:
xferlog_enable=YES,xferlog_file=/var/log/vsftpd.log.
Ejemplo de configuración endurecida:
anonymous_enable=YES
local_enable=NO
anon_root=/srv/ftp
no_anon_password=YES
hide_ids=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30099
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
max_clients=10
max_per_ip=2
anon_max_rate=102400
19.6. ProFTPD (alternativa)
ProFTPD es otro servidor FTP muy configurable, con sintaxis similar a Apache. Para instalarlo:
sudo apt install proftpd # Debian/Ubuntu
sudo yum install proftpd # RHEL (EPEL)
Archivo de configuración: /etc/proftpd/proftpd.conf.
Configuración anónima básica:
<Anonymous /srv/ftp>
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell off
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
Reiniciar con sudo systemctl restart proftpd.
Aunque es menos probable que aparezca en el examen, es bueno conocer su existencia y sintaxis básica.
19.7. Comandos FTP del cliente
Para probar el servidor, se puede usar el cliente FTP de línea de comandos o herramientas como lftp, curl, o navegadores web (solo lectura).
19.7.1. Cliente ftp básico
ftp servidor
ftp> ls
ftp> cd pub
ftp> get archivo.txt
ftp> put archivo_local.txt # si la carga está permitida
ftp> quit
19.7.2. lftp (más potente)
lftp servidor
lftp :~> ls
lftp :~> get archivo
lftp soporta opciones como -u anonymous,password.
19.7.3. curl
curl ftp://servidor/
curl -T archivo.txt ftp://servidor/upload/ # subir archivo
19.8. Solución de problemas
| Problema | Posible causa | Solución |
|---|---|---|
| “Connection refused” | Servicio no arrancado o puerto bloqueado | Verificar systemctl status vsftpd, firewall |
| “530 Login incorrect” | Acceso anónimo deshabilitado o credenciales incorrectas | Revisar anonymous_enable=YES, probar con ftp/anonymous |
| “500 Illegal PORT command” | Modo pasivo mal configurado | Activar pasv_enable=YES y rango de puertos, abrir firewall |
| “550 Permission denied” al subir | El directorio de destino no tiene permisos de escritura para el usuario ftp | Ajustar permisos con chown ftp:ftp y chmod 775 en el directorio de subida |
| Listado vacío | El directorio raíz no es accesible | Comprobar permisos y que anon_root apunta correctamente |
| Tiempo de espera en modo pasivo | Puertos del rango no abiertos en firewall | Añadir rango pasv_min_port–pasv_max_port al firewall |
Además, revisar logs en /var/log/vsftpd.log o journalctl -u vsftpd.
19.9. Ejercicios prácticos
Instalación y acceso básico:
- Instala
vsftpd. Crea el directorio/srv/ftp/publicocon un archivobienvenido.txt. - Configura el acceso anónimo de solo lectura. Conéctate con
ftp localhosty descarga el archivo.
- Instala
Habilitar carga anónima:
- Crea un subdirectorio
/srv/ftp/uploadcon propietarioftpy permisos 775. - Activa
anon_upload_enable=YESyanon_mkdir_write_enable=YES. Reinicia. - Sube un archivo desde el cliente y verifica que aparece en el servidor.
- Crea un subdirectorio
Modo pasivo y firewall:
Configura un rango de puertos pasivos (40000-40100). Abre el rango y el puerto 21 en el firewall.
- Prueba la conexión desde otro equipo (o usando
curl -P -para forzar pasivo).
- Limitaciones y seguridad:
Establece max_clients=5, max_per_ip=1 y anon_max_rate=50000 y verifica el límite de velocidad descargando un archivo grande y observando la tasa de transferencia.
- Logs:
Configura xferlog_enable=YES y xferlog_file=/var/log/vsftpd.log. Realiza descargas y subidas. Examina el log.
- ProFTPD (opcional):
Instala ProFTPD y configura una sección <Anonymous> con solo lectura. Verifica que funciona de manera similar.
19.10. Resumen y consejos para LFCS
- El servidor FTP anónimo más común en el examen es vsftpd. Domina su archivo de configuración y las directivas clave (
anonymous_enable,anon_root,anon_upload_enable,pasv_enable, etc.). - Asegúrate de que el firewall permita el puerto 21 y el rango pasivo; es una fuente frecuente de fallos.
- El acceso anónimo implica riesgos de seguridad; aplica restricciones de escritura, límites de conexión y logs.
- Practica la transferencia de archivos con clientes de línea de comandos (
ftp,lftp,curl). - En el examen, puede que se te pida configurar un FTP que permita solo descargas anónimas en un directorio concreto. El flujo sería: instalar vsftpd, crear directorio, configurar
/etc/vsftpd.confconanonymous_enable=YES,local_enable=NO,anon_root=..., reiniciar y probar.
Con esto has aprendido a desplegar un servidor FTP anónimo seguro y funcional. En el siguiente capítulo nos adentraremos en la configuración de un servidor DNS de caché recursivo, un componente esencial para la resolución de nombres en cualquier infraestructura.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
