Виртуальные пользователи в VsFTPD под Ubuntu/Debian

Ставим необходимые компоненты:

apt-get install libpam-pwdfile vsftpd apache2-utils

Предположим, что сайтики лежат в /srv/www/mysite.ru/htdocs , соответственно ограничиваем пользователя доступом в корневую директорию.
Чистим дефолтный конфиг vsftpd

mv /etc/vsftpd.conf /etc/vsftpd.conf_bak

И записываем туда вот что:

listen=YES
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=/srv/www/$USER
chroot_local_user=YES
hide_ids=YES
chown_uploads=YES
chown_username=vsftpd
guest_enable=YES
guest_username=vsftpd
chown_upload_mode=0775

use_localtime=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

dirmessage_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome developer to WWW server!
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty

pasv_enable=YES
pasv_min_port=62000
pasv_max_port=64000

Создаем пользователя vsftpd (системным без шела)

useradd -M -r vsftpd

Далее надо настроить pam-аутентификацию.
Для этого открываем файлик /etc/pam.d/vsftpd, комментим всё и добавляем туда две строчки:

auth required pam_pwdfile.so pwdfile /etc/ftpdpasswd
account required pam_permit.so

Теперь создаем файлик /etc/ftpdpasswd:

touch /etc/ftpdpasswd
htpasswd -c /etc/ftpdpasswd

Добавление пользователя осуществляется аналогично, только без опции и с названием корневой директории сайта в качестве пользователя:

htpasswd /etc/ftpdpasswd www.mysite.ru

Если возникает ошибка cannot change directory Надо дать права на исполнение для директории /home/vsftpd/ и для директории заданной в файле /etc/vsftpd.conf параметром local_root=:

setfacl -m u:vsftpd:x /home/vsftpd/
setfacl -m u:vsftpd:xrw /mnt/shared/new/XenApp/

Ребутим vsftpd и радуемся..