Configuración de un Servidor FTP Seguro con VSFTPD en Ubuntu Server
Si bien hay una versión de FileZilla Server para Linux, VSFTPD es la solución nativa más robusta y ampliamente utilizada en Ubuntu Server.
Paso 1: Instalar VSFTPD
Abre la terminal en tu Ubuntu Server y actualiza los paquetes, luego instala vsftpd:
sudo apt update
sudo apt install vsftpd
Paso 2: Configurar el Firewall (UFW)
Asegúrate de que el firewall (UFW) permita las conexiones FTP (puertos 20 y 21) y también el rango de puertos para el modo pasivo (usaremos 40000-50000 como ejemplo, que deberás definir luego en la configuración de vsftpd):
# Permitir SSH (si estás conectado remotamente)
sudo ufw allow OpenSSH
# Permitir puertos FTP
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
# Permitir rango de puertos para modo pasivo
sudo ufw allow 40000:50000/tcp
# Activar el firewall
sudo ufw enable
Paso 3: Realizar una Copia de Seguridad y Configurar VSFTPD
Haz una copia de seguridad del archivo de configuración original y ábrelo para editarlo:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
sudo nano /etc/vsftpd.conf
Dentro del archivo, modifica o asegura las siguientes líneas (descomenta si tienen un # al principio, o añádelas):
| Configuración | Valor | Explicación |
| anonymous_enable | NO | Deshabilita el acceso anónimo (recomendado). |
| local_enable | YES | Permite a los usuarios locales iniciar sesión. |
| write_enable | YES | Permite comandos de modificación del sistema de archivos (subir/borrar). |
| chroot_local_user | YES | Encierra a los usuarios en su directorio personal (seguridad). |
| pasv_min_port | 40000 | Puerto mínimo para conexiones pasivas. |
| pasv_max_port | 50000 | Puerto máximo para conexiones pasivas. |
Guarda y cierra el archivo (Ctrl+X, Y, Enter en nano).
Paso 4: Crear un Usuario FTP Específico
Por seguridad, es mejor usar un usuario dedicado para el FTP, en lugar de un usuario del sistema que también tenga acceso por SSH:
# Crear un nuevo usuario (ej: 'ftpuser')
sudo useradd -m -s /usr/sbin/nologin ftpuser
# Establecer contraseña
sudo passwd ftpuser
Paso 5: Reiniciar el Servicio
Para aplicar todos los cambios, reinicia vsftpd:
sudo systemctl restart vsftpd
💻 Conexión con el Cliente FileZilla
Una vez que VSFTPD está configurado en tu Ubuntu Server, puedes usar el Cliente FileZilla para conectarte:
Abre el Cliente FileZilla en tu PC.
Ve al Gestor de Sitios (
Archivo>Gestor de Sitios).Haz clic en
Nuevo Sitioy rellena los siguientes datos:Protocolo: FTP (o FTPS si configuraste SSL/TLS en el servidor).
Servidor: La dirección IP de tu Ubuntu Server (ej:
192.168.1.100o tu IP pública si estás fuera de la LAN).Puerto:
21(el estándar).Tipo de Conexión:
Normal.Usuario:
ftpuser(o el que hayas creado).Contraseña: La contraseña que estableciste para ese usuario.
Haz clic en Conectar.
Si todo está correcto, el cliente FileZilla se conectará al servidor VSFTPD en tu Ubuntu Server, y podrás ver tus directorios remotos y transferir archivos.
Este video explica la configuración de un servidor FTP en Ubuntu Server y cómo conectarse con FileZilla:
sudo systemctl status vsftpd
Es crucial verificar tanto el estado del servicio como la conectividad del puerto para asegurar que tu servidor FTP (generalmente VSFTPD en Ubuntu) esté activo y accesible.
Aquí tienes los métodos más efectivos para saber si el servicio FTP está activo en tu Ubuntu Server:
1. Verificar el Estado del Servicio (VSFTPD)
El método más directo es preguntar al gestor de servicios del sistema, Systemd.
Utiliza el comando
systemctl statuspara ver la información detallada del servicio VSFTPD: Bashsudo systemctl status vsftpdInterpretación de la Respuesta:
Active: active (running): ¡Esto es lo que quieres ver! Significa que el demonio de VSFTPD se está ejecutando correctamente y está listo para aceptar conexiones.
Active: inactive (dead): El servicio está detenido. Necesitas iniciarlo con
sudo systemctl start vsftpd.Active: failed: El servicio intentó iniciar, pero falló. Debes revisar los registros (
journalctl -xe) para diagnosticar el problema (a menudo es un error en el archivo de configuración/etc/vsftpd.conf).
Opcional (Formato simple): Para una respuesta más concisa, puedes usar:
systemctl is-active vsftpd
Si la respuesta es active, el servicio está corriendo.
2. Verificar si el Puerto 21 está Escuchando
Aunque el servicio esté running, puede que no esté escuchando en el puerto correcto. Esto lo verificas con los comandos de red que muestran los sockets abiertos.
Utiliza el comando ss (Socket Statistics) para ver si el puerto FTP (por defecto el 21) está en estado LISTEN (escuchando conexiones).
sudo ss -tlpn | grep 21
Interpretación de la Respuesta:
Una salida como esta indica que el servicio está escuchando en el puerto 21:
LISTEN 0 128 0.0.0.0:21 0.0.0.0:* users:(("vsftpd",pid=1234,fd=X))
LISTEN: Confirma que el puerto 21 está abierto y esperando conexiones.
0.0.0.0:21: Indica que está escuchando en todas las interfaces de red (0.0.0.0) en el puerto 21.
users:(("vsftpd",pid=1234,fd=X)): (Si tienes permiso de superusuario) Te muestra el proceso de
vsftpdasociado al puerto.
3. Probar la Conexión Remota (Desde otra máquina o localmente)
La prueba definitiva es intentar la conexión, que simula el uso de un cliente como FileZilla.
Prueba con telnet o nc (Netcat)
Si tienes instalado telnet (o nc que es más moderno) en la máquina cliente (o incluso en el servidor mismo), puedes probar la conexión al puerto 21.
# Para probar desde el servidor a sí mismo
telnet 127.0.0.1 21
# o usando tu IP de red
telnet TU_IP_DEL_SERVIDOR 21
Interpretación de la Respuesta:
Conexión Exitosa: Si se conecta, verás un mensaje de bienvenida del servidor VSFTPD (por ejemplo,
220 (vsFTPd 3.0.3)), lo que significa que el servicio está activo y el firewall no está bloqueando la conexión de control.Error o Timeout: Si obtienes un error como "Connection refused" (Conexión rechazada) o un timeout, puede ser que el servicio no esté activo, o que el firewall (UFW) esté bloqueando el puerto 21 (y el rango de puertos pasivos).
Si la conexión falla, asegúrate de haber abierto los puertos en el firewall (UFW) como se describió en la respuesta anterior:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp # (O el rango que definiste en vsftpd.conf)
sudo ufw status
El Error Crítico y su Solución
El error que te aparece es muy específico:
Respuesta: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Error: Error critico: No se pudo conectar al servidor
¿Qué Significa este Error?
Este error se debe a una actualización de seguridad en versiones recientes de VSFTPD.
chroot(): Configuraste VSFTPD para "encerrar" al usuario (chroot_local_user=YES) en su directorio personal (/home/sotelo, por ejemplo). Esto es una buena práctica de seguridad.
writable root: El problema es que el directorio raíz de este entorno restringido (en este caso, el directorio personal del usuario) tiene permisos de escritura (writable).
refusing to run: VSFTPD considera esto un riesgo de seguridad (podría permitir que el usuario suba archivos maliciosos y los ejecute) y, por lo tanto, se niega a completar la conexión.
Solución: Quitar los Permisos de Escritura del Directorio Raíz
La solución es quitar los permisos de escritura del directorio que funciona como raíz del chroot (el directorio personal del usuario sotelo).
Ejecuta estos comandos en tu Ubuntu Server:
1. Quitar Permisos de Escritura del Home Directory
Establece permisos de solo lectura (read-only) para el propietario en el directorio principal del usuario FTP:
Bashsudo chmod a-w /home/sotelo
Este comando elimina el permiso de escritura (w) para 'a' (all users), dejando solo lectura y ejecución, que es suficiente para la navegación.
2. Crear un Subdirectorio Específico para Subidas
Ahora que /home/sotelo es de solo lectura, el usuario no puede subir archivos allí. Debes crear un subdirectorio dentro de /home/sotelo donde sí tenga permiso para subir archivos:
Bash# Crea un directorio donde el usuario SÍ podrá escribir
sudo mkdir /home/sotelo/ftp_files
# Otorga permisos de escritura al usuario 'sotelo' SOLO en este nuevo subdirectorio
sudo chown sotelo:sotelo /home/sotelo/ftp_files
3. Reiniciar el Servicio VSFTPD
Asegúrate de aplicar los cambios reiniciando el servicio:
Bashsudo systemctl restart vsftpd
Pasos completos para solucionar:
Primero, corrige el error de chroot:
sudo chmod a-w /home/sotelo
Reinicia el servicio:
sudo systemctl restart vsftpd # o si el servicio se llama diferente sudo systemctl restart vsttpd
Comentarios
Publicar un comentario