vsftpd es uno de los servidores FTP más populares que existen para Linux. Tal vez no sea el que ofrezca características más avanzadas (aunque tampoco es que se quede corto: usuarios virtuales, control del ancho de banda,SSL,...) pero se ha ganado la reputación de ser uno de los servidores más livianos, sencillos de configurar y sobre todo seguros.
En este entrada explico como configurar vsftpd para tener una instalación con:
- Acceso anónimo desactivado.
- Solo pueden acceder usuarios que ya existan en el sistema (llamados usuarios locales, lo opuesto a los llamados usuarios virtuales) aunque...
- ...de todos los usuarios locales sólo pueden acceder aquellos que indiquemos.
- Los usuarios una vez accedidos quedarán enjaulados (chroot) en su $HOME.
- Se detallarán dos posibles variaciones de la configuración:
- Cada usuario será independiente del resto
- No importa qué usuario se conecte todas las operaciones se realizarán como si fuese un usuario en concreto.
Nota de seguridad: Puesto que el o los usuarios quedarán enjaulados con permisos de upload, es más que recomendable que no tengan acceso Shell a la máquina (Shell:/sbin/nologin, por ejemplo).
Para instalarlo, tan sencillo como siempre en Gentoo:
Para configurarlo, crear el archivo /etc/vsftpd/vsftpd.conf con el siguiente contenido
# ---- SERVER -----------------------------------------------------------------
#Modo autónomo (sin inetd,xinet,...)
listen=YES
#Puertos para conexiones pasivas, por si tenemos un firewall (de otro modo se usan unos aleatorios)
pasv_min_port=2690
pasv_max_port=2694
#Forzar que las transferencias de tipo PORT se originen desde el puerto 20 (ftp-data). Necesario para algunos clientes
connect_from_port_20=yes
#Permitir comandos de escritura (Necesarios si queremos que los usuarios locales puedan subir archivos)
write_enable=YES
#Mostrar los IDs de usuario/grupo no numéricos en los listados de archivos
text_userdb_names=YES
#Activar los logs de transferencias (uploads/downloads) en /var/log/vsftpd.log
xferlog_enable=YES
#y también los del protocolo FTP
log_ftp_protocol=YES
#Ocultar (pero permitir la descarga) los archivos con cierto patrón
#hide_file={*.old,*.bak}
#Denegar cualquier tipo de acceso a los archivos con cierto patrón
#deny_file={.*}
#Establecer algunos límites en las conexiones
max_clients=15
max_per_ip=5
#Limitar el máximo ancho de banda en bytes/s
#local_max_rate=...
#Permisos para los archivos subidos
file_open_mode=0660
local_umask=0007
# ---- SSL --------------------------------------------------------------------
#Aceptar conexiones seguras vía SSL
ssl_enable=YES
#No forzar que se use SSL en las conexiones de datos
force_local_data_ssl=NO
#No forzar a los usuarios no anónimos a asegurar la contraseña con SSL
force_local_logins_ssl=NO
#Rutas de los certificados
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem
# ----- LOGIN -----------------------------------------------------------------
#No permitir el acceso anónimo
anonymous_enable=NO
#Permitir el acceso a los usuarios locales...
local_enable=YES
#... y tabién a aquellos listados en /etc/vsftpd/users ...
userlist_enable=YES
userlist_file=/etc/vsftpd/users
#... pero si un usuario local no está listado en /etc/vsftpd/users denegarle el acceso
userlist_deny=NOAquí se escoge alguna de las dos variaciones que he mencionado antes.
Para usuarios independientes añadir al archivo
#enjaular a los usuarios en su $HOME chroot_local_user=YES
Para hacer que todos los usuarios se comporten como uno en concreto, añadir al archivo
#Una vez que un usuario local ha accedido con éxito, tratarlo como si fuese el usuario indicado en guest_username... guest_enable=YES guest_username=apache #... y enjaularlo ... chroot_local_user=YES local_root=/var/www #...con los privilegios del usuario local virtual_use_local_privs=YES
Es recomendable hacerlo algo más seguro forzando el uso de SSL, pero no todos los clientes lo soportan.
Para indicar los usuarios que pueden conectar listarlos en /etc/vsftpd/users , uno por línea.
Para generar los certificados ejecutar
Para ejecutar el servidor y hacer que se lance automáticamente al reiniciar
Rápido y sencillo.
