En
una agencia conocida se creo un aplicativo con Django el cuál
requiere de un servicio FTP donde los usuarios estarían en una base
de datos con sus respectivos password. El detalle que se encontró es
que Django genera su propio hash para guardar las contraseñas en
MySQL así que se necesita del paquete de MySQL con PAM modificado.
Así que mi compañera Laura le hizo algunas modificaciones para
tener la funcionalidad con Django.
Tengo
entendido que ya existe para Django pero aun no esta muy funcional y
con el siguiente paquete modificado no se tuvo problemas.
1.-
Antes de comenzar la compilación debemos tener instalado las
librerías mhash.
yast2
-i mhash mhash-devel
2.-
También debemos verificar si nuestro vsftpd tiene soporte con SSL.
Sinos arrija algo parecido a lo de abajo entonces estamos bien.
[root@local] ldd /usr/sbin/vsftpd | grep libssl
libssl.so.0.9.8 => /usr/lib64/libssl.so.0.9.8 (0x00007faa603f2000)
3.-
Verificamos que al descomprimir nuestro paquete se respeten las ligas
suaves depcomp y missing y que apunten a tu versión de automake.
Ahora
si compilamos.
./configure
--with-mhash
make
make
install
4.-
Al finalizar nos debió
haber creado los siguiente módulos
en
/lib/security/pam_mysql.la
/lib/security/pam_mysql.so
5.-
Y creamos nuestras
ligas suaves hacia la ruta /etc/security
pam_mysql.la
-> /lib/security/pam_mysql.la
pam_mysql.so
-> /lib/security/pam_mysql.so
También
agregue estas por si las dudas.
pam_mail.so
-> /lib/security/pam_mail.so
pam_mkhomedir.so
-> /lib/security/pam_mkhomedir.so
pam_motd.so
-> /lib/security/pam_motd.so
6.-
Dentro de nuestra ruta
/etc/security debemos tener el archivo pam_mysql.conf y lo
editamos.
ppvm2:/etc/security
# pam_mysql.conf
users.host=
xxx.xxx.xxx.xxx
users.database=
vsftpd
users.db_user=vsftpd
users.db_passwd=
vsftpdpassword
users.table=accounts
users.user_column=username
users.password_column=password
users.password_crypt=
django
users.where_clause=
is_active = '1'
verbose=1
7.-
Creamos nuestra base de
datos.
CREATE
DATABASE vsftpd;
GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpdpassword';
FLUSH PRIVILEGES;
GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpdpassword';
FLUSH PRIVILEGES;
USE
vsftpd;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE ( `username` )
) ENGINE = MYISAM ;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE ( `username` )
) ENGINE = MYISAM ;
exit;
8.-
En nuestra ruta /etc/pam.d
debemos tener el archivo vsftpd con el siguiente contenido.
auth
required /lib/security/pam_mysql.so
config_file=/etc/security/pam_mysql.conf try_first_pass=false
account
required /lib/security/pam_mysql.so
config_file=/etc/security/pam_mysql.conf try_first_pass=false
session
required /lib/security/pam_mysql.so
config_file=/etc/security/pam_mysql.conf try_first_pass=false
Iniciamos
vsftpd
chkconfig
vsftpd on
9.-
Y esto
nos genera el archivo de configuración vsftpd.conf en /etc/ yo
tengo lo siguiente.
nopriv_user=ftpsecure
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=yes
guest_enable=YES
local_root=/srv/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
virtual_use_local_privs=YES
user_sub_token=$USER
##For
SSL setting
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/vsftpd.pem
pasv_enable=YES
pasv_min_port=30300
pasv_max_port=30309
port_enable=YES
10.-
Ahora si vemos la directiva
user_config_dir=/etc/vsftpd_user_conf es donde guardamos los
privilegios de nuestro usuarios si no existe la carpeta
vsftpd_user_conf la creamos.
Por
ejemplo creamos un archivo llamado test y le agregamos lo siguiente.
dirlist_enable=NO
download_enable=YES
write_enable=YES
11.-
Observamos también que el
home de los usuarios están apuntando con la directiva
local_root=/srv/ftp/$USER
simplemente
creamos su carpeta y le damos permisos de 770 y no olvidemos poner
los privilegios del usuario y grupo del servicio que
le pertenecen a vsftpd a la
carpeta test.
12.-
Y listo reiniciamos el servicio vsftpd
/etc/init.d/vsftpd
restart