Montar un Servidor FTP con usuarios Virtuales usando vsftpd + postgresql.
Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar servidores de archivos a través del protocolo FTP. Se distingue principalmente porque sus valores predeterminados son muy seguros y por su sencillez en la configuración, comparado con otras alternativas como ProFTPD y Wu-ftpd. Actualmente se presume que vsftpd es quizá el servidor FTP más seguro del mundo.

Empezamos como siempre por instalarlo!
apt-get install vsftpd

Luego vamos a instalar postgresql-8.4, postgresql-client-8.4 y libpam-pgsql
apt-get install postgresql-8.4, postgresql-client-8.4 libpam-pgsql

Lo primero que vamos a hacer es hacer una copia del archivo de configuración de nuestro vsFTPd:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig

Luego lo editamos:
nano /etc/vsftpd.conf

Las líneas que vamos a ir descomentando son las siguientes:

listen=YES
### Si estas detras de un Firewall o deseas cambiar el puerto 21 debes agregar esta linea
listen_port=9021
### Fin de la linea para cambiar el puerto por default
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
### Cambiar el puerto de modo pasivo esta opción es muy importante si tienes un firewall recuaerda abrir estos puertos para que te puedas conectar desde la calle
pasv_enable=YES
pasv_min_port=9020
pasv_max_port=9021
### Fin de cambiar los puertos pasivo
chown_uploads=YES
ftpd_banner=Bienvenido al Servidor FTP de este sitio.
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

Y al final de ese archivo agregamos éstas líneas:

guest_enable=YES
guest_username=vsftpd
### La ubicacion sera en el /home/vsftpd/nombreUserDB
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

Nota: Para una mayor documentación de los archivos de configuración de este servicio puedes dar click aqui

Ahora vamos a empezar a configurar las cuentas que van a tener acceso a nuestro FTP, para ello utilizaremos PostgreSql.
### Nos conectamos con el usuario postgres
su – postgres
### Entramos al cliente de postgresql
psql
### Creamo el usuario base de datos, la tabla
— Creamos el usuario vsftp
CREATE USER vsftp with password ‘vsftpsd’;
— Creamos la base de datos vsftpd
CREATE DATABASE vsftpd OWNER vsftpd;
— Nos canectamos a la base de datos que acabamos de crear vsftpd
\c vsftpd
— Creamos la tabla usuarios
CREATE TABLE usuarios(
i_id SERIAL,
s_username VARCHAR(30) NOT NULL, s_password VARCHAR(50), b_expired BOOLEAN DEFAULT false, CONSTRAINT accounts_s_username_key UNIQUE(s_username)
);

— Registrar el usuario prueba
INSERT INTO usuarios (s_username, s_password, b_expired) values(‘prueba’, md5(‘123456’), ‘false’);
— Salimos del cliente de postgresql y procedemos a editar el fichero de configuración
\q

### Editamos el pg_hba.comf
nano /etc/postgresql/8.4/main/pg_hba.conf
dentro de este archivo debemos agragra esta configuracion para el localhost
host all all 127.0.0.1/32 md5

### Luego Reiniciamos el Servicio de postgres para que tome los cambios
/etc/init.d/postgresql restart

### Luego de haber creado todo lo relacionado a la base de dato para los usuarios, vamos a configurar la autenticacion para los usuarios virtuales.
nano /etc/pam.d/vsftpd:
Agregar la autenicación para los usuarios virtuales que permita conectarce al servicio de vsftpd
auth required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf
account required pam_pgsql.so config_file=/etc/pam_pgsql_vsftpd.conf

### Procedimos con la configuración para el archivo pam_pgsql_vsftpd.com
nano /etc/pam_pgsql_vsftpd.conf
Agregar las siguiente lineas al archivo nuevo creado
debug
pw_type = md5
connect = hostaddr=127.0.0.1 port=5432 dbname=vsftpd user=vsftpd password=vsftpd connect_timeout=15
auth_query = select s_password from usuarios where s_username = %u
acct_query = select b_expired as acc_expired, 0 as acc_new_pwreq, (s_password ISNULL OR s_password = ”) as user_password from usuarios where s_username =$

### Ya terminamos de configurar la autenticacion para los usuarios virtuales ahora vamos a crear la carpeta para el nuevo usuario y los permisos del mismo
cd /home/
chown vsftpd:nogroup vsftpd;
mkdir /home/vsftpd/prueba
cd /home/vsftpd
chown vsftpd:nogroup prueba;

### Listo probamos
ftp prueba@192.168.1.101:9021

Anuncios