sudo apt install vsftpd libpam-pwdfile
Edit these variables in the config file and leave everything else with the default value.
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 nopriv_user=vsftpd virtual_use_local_privs=YES guest_enable=YES user_sub_token=$USER local_root=/var/www/$USER chroot_local_user=YES hide_ids=YES guest_username=vsftpd
NOTE: Set the local_root to the parent directory where the user’s home directories are located.
Configure PAM to check the passwd file for users.
auth required pam_pwdfile.so pwdfile /etc/ftpd.passwd account required pam_permit.so
Make sure you remove everything else from the file.
htpasswd -cd /etc/ftpd.passwd user1
You can later add additional users to the file like this:
htpasswd -d /etc/ftpd.passwd user2
Create a local user that’s used by the virtual users to authenticate.
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
/etc/init.d/vsftpd restart
Create user’s home directory since vsftpd doesn’t do it automatically.
mkdir /var/www/user1 chown vsftpd:nogroup /var/www/user1 chmod a-w /var/www/user1