Guía para Configurar un Servidor FTP con vsftpd en CentOS 7

Para establecer un servidor FTP en CentOS 7, se utilizará el demonio vsftpd. A continuación, se detalla el proceso completo de instalación y configuración.

Instalación de vsftpd

El primer paso es instalar el paquete vsftpd y configurar su inicio automático.


# Instalar vsftpd
yum install -y vsftpd

# Habilitar el servicio para que inicie con el sistema
systemctl enable vsftpd

# Iniciar el servicio
systemctl start vsftpd

# Verificar el estado del servicio
systemctl status vsftpd

Configuración Principal del Servidor

Editar el archivo de configuración principal para personalizar el comportamiento del servidor FTP.


# Acceder al archivo de configuración
vim /etc/vsftpd/vsftpd.conf

Modificar las siguientes líneas clave en el archivo:


anonymous_enable=NO
anon_mkdir_write_enable=YES
chown_uploads=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Bienvenido al servidor FTP.
chroot_local_user=YES

Agregar estas directivas adicionales al final del archivo:


use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vuser_conf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES

Creación de Usuarios Virtuales

Definir los usuarios virtuales en un archivo de texto, donde cada par de líneas representa un nombre de usuario y su contraseña.


# Crear y editar el archivo de usuarios
vim /etc/vsftpd/vuser_list

# Ejemplo de contenido (usuario: ejemplo, contraseña: secreto123)
ejemplo
secreto123

Convertir este archivo en una base de datos para la autenticación.


db_load -T -t hash -f /etc/vsftpd/vuser_list /etc/vsftpd/vuser_list.db
chmod 600 /etc/vsftpd/vuser_list.db

Configuración de Autenticación PAM

Modificar el módulo PAM para que utilice la base de datos de usuarios virtuales. Primero, respaldar el archivo original.


cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.original

Editar el archivo de configuración PAM y reemplazar su contenido con:


auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_list

Preparación del Sistema de Archivos

Crear un usuario del sistema que servirá como base para los usuarios virtuales, sin capacidad de inicio de sesión directa.


useradd ftpuser -d /home/ftpuser -s /bin/false
chown -R ftpuser:ftpuser /home/ftpuser

Establecer directorios individuales para cada usuario virtual y sus archivos de configuración.


mkdir -p /etc/vsftpd/vuser_conf
mkdir -p /home/ftpuser/ejemplo

# Crear archivo de configuración para el usuario virtual 'ejemplo'
vim /etc/vsftpd/vuser_conf/ejemplo

Contenido del archivo de configuración del usuario:


local_root=/home/ftpuser/ejemplo/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

Ajustes del Firewall

Permitir el tráfico FTP a través del firewall. Para firewalld, se ejecutan los siguientes comandos.


firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent
firewall-cmd --reload

Reinicio del Servicio y Pruebas

Aplicar todos los cambios reiniciando el servicio vsftpd.


systemctl restart vsftpd

Solución a Problemas con SELinux

Si se encuentran errores durante la conexión o transferencia, como códigos 500 o 503, es probable que SELinux esté bloqueando el acceso. Se pueden ajustar sus políticas.

Para verificar y modificar los booleanos de SELinux relacionados con FTP:


getsebool -a | grep ftp
setsebool -P ftpd_full_access 1
setsebool -P ftp_home_dir 1

Alternativamente, si se requiere deshabilitar SELinux temporalmente para pruebas (no recomendado en producción), se puede cambiar a modo permisivo.


setenforce 0

Después de realizar estos ajustes, la conexión FTP debería funcionar correctamente. Si persisten problemas de permisos, se puede asegruar que el directorio del usuario tenga los permisos adecuados.


chmod -R 775 /home/ftpuser/ejemplo

Etiquetas: vsftpd FTP centos7 selinux firewalld

Publicado el 7-20 06:19