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