====== Setting up VSFTPD with MySQL ======
===== Install PAM MySQL module =====
sudo apt-get install libpam-mysql
===== Create a database to store usernames and passwords =====
CREATE DATABASE ftp;
GRANT ALL PRIVILEGES ON ftp.* TO 'ftp-admin'@'localhost' IDENTIFIED BY 'f7p@dm1n';
FLUSH PRIVILEGES;
===== Edit /etc/vsftpd.conf =====
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=ftp
local_root=/srv/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
===== Configure the PAM module =====
sudo vi /etc/pam.d/vsftpd
The contents of the file should be
auth required pam_mysql.so user=ftp passwd=f7p@dm1n host=localhost db=ftp table=accounts usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=ftp passwd=f7p@dm1n host=localhost db=ftp table=accounts usercolumn=username passwdcolumn=password crypt=2
===== Create users =====
insert into accounts(username, password) values('hari', PASSWORD('haripriya'));
===== Create user-specific directories =====
sudo mkdir /srv/ftp/hari
sudo chown ftp:ftp /srv/ftp/hari
===== Restart VSFPTD =====
sudo systemctl restart vsftpd