11.15.2010

VSFTPD en Centos - Servidor FTP con usuarios virtuales.

Este posteo es más informativo que una guía, pongo los pasos que he realizado para montar un servidor FTP sobre Centos mediante vsftpd y con la característica de los usuarios virtuales lo cual es mucho más seguro que los normales.

Podemos verificar si tenemos o no instalado vsftpd mediante:
rpm -aq | grep vsftpd
De no ser así, lo instalamos junto con un par de dependencias para la creación de las bases de datos de usuarios como veremos más adelante:
yum -y install db4 db4-utils vsftpd
 A continuación editamos el archivo /etc/vsftpd.conf. El contenido de este puede variar según las características que queramos dar al servicio, pero este sería el contenido mínimo necesario para que funcione bien con usuarios virtuales:
# Bloquear el acceso anónimo
anonymous_enable=NO
# Permitir el acceso local, necesario para usuarios virtuales
local_enable=YES
# Permitir la escritura y la descarga de ficheros
write_enable=YES
download_enable=YES
# Máscara de ficheros
local_umask=022
# Restricciones anónimas
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_world_readable_only=YES
# Puerto de conexión
connect_from_port_20=YES
# Generar archivo log
log_ftp_protocol=YES
# Otras características
listen=YES
xferlog_std_format=YES
pam_service_name=vsftpd.virtual
userlist_enable=YES
hide_ids=YES
# Enjaulamiento de usuario
chroot_local_user=YES
# Usarios virtuales y ruta de acceso
local_root=/home/ftpuser/pub
virtual_use_local_privs=YES
guest_enable=YES
Ahora necesitamos crear la base de datos de usuarios virtuales, para ello usamos Berkeley DB. Primero creamos un archivo de texto plano en /etc/vsftpd/
cd /etc/vsftpd
vi usuariosftp.txt
este archivo llevará los nombres de usuarios y claves de acceso una por línea, es decir si el usuario es andres y su clave andresclave y otro usuario andrea y de clave andreaclave, quedaría así:
andres
andresclave
andrea
andreaclave
Generamos la base de datos:
db_load -T -t hash -f usuariosftp.txt vsftpd_virtual_users.db
chmod 600 vsftpd_virtual_users.db
rm usuariosftp.txt
 Con el archivo vsftpd.conf mostrado arriba, todos los usuarios accederán a la misma ubicación especificada por local_root=. Si en cambio deseamos que cada uno tenga su carpeta de usuario (y que no puedan moverse fuera de ella) entonces debemos hacer un par de cambios al archivo de configuración.


Añadimos la opción:
user_sub_token=$USER

y modificamos lo siguiente:
local_root=/home/ftpuser/pub/$USER
Por supuesto que la ruta madre de los usuarios puede ser la que queramos. Solo que suele ser recomendable colocarla en /home por motivos de seguridad ya que por ejemplo suele ser una partición dedicada.

Ahora se crea un archivo PAM para use la base de datos de los usuarios (el nombre del archivo tiene que ser el mismo especificado en la opción pam_service_name=)
vi /etc/pam.d/vsftpd.virtual
Con el contenido:
#%PAM-1.0
auth           required    pam_userdb.so db=/etc/vsftpd/vsftpd_virutal_users
account     required    pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_users
session      required    pam_loginuid.so
Creamos la ubicación indicada en el archivo de configuración:
mkdir -p /home/ftpuser/pub/
chown -R ftp:ftp /home/ftpuser/
Por último iniciamos el servicio y hacemos que se inicie siempre con el sistema:
service vsftpd start
chkconfig vsftpd on
Para monitorear el servicio se tiene el archivo /var/log/secure para el acceso de los usuarios, así como el log del servicio propiamente en /var/log/vsftpd.log
tail -f /var/log/secure | grep vsftpd  
tail -f /var/log/vsftpd.log
Y eso sería todo, podemos acceder al servidor desde los clientes mediante consola o gráficamente con aplicaciones como FileZilla o la extensión de firefox FireFTP.

Espero como siempre que sea de utilidad.

Saludos!