Как настроить vsFTPd с виртуальными пользователями на CentOS 6.6

делать надо так:

# cd /etc/vsftpd
# vim vusers.txt

site1.com
site1_password
site2.com
site2_password

На основе этого файла сгенерируем базу данных Berkley, которая будет использоваться PAM для аутентификации наших виртуальных пользователей и поместим полученный файл в директорию /etc/vsftpd (чтобы по феншую)

# db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db

Шаг 3. Зададим файл конфигурации PAM для vsftpd использующий сгенерированную базу данных. Создадим файл /etc/pam.d/vsftpd-virtual

#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session required pam_loginuid.so

Внимание! Путь к файлу базы данных в конфигурации PAM задаётся без расширения .db, хотя такое расширение у файла имеется! В противном случае, PAM будет говорить о том, что не нашёл указанный файл. Это очень странная особенность с которой приходится считаться

Шаг 4. Теперь необходимо сконфигурировать сам vsftpd. Зададим содержимое файла /etc/vsftpd/vsftpd.conf:

# Отключает анонимный доступ

anonymous_enable=NO

# Включает не-анонимный (sic!) доступ

local_enable=YES

# Активирует поддержку виртуальных пользователей

guest_enable=YES guest_username=ftp

# Виртуальные пользователи используют локальный привилегии (а не анонимные)

virtual_use_local_privs=YES

# Включает поддержку записи

write_enable=YES

# Файл конфигурации PAM для vsftpd. Совпадает с именем файла конфигурации в /etc/pam.d

pam_service_name=vsftpd-virtual

# Следующие две строчки определяют локальные директории для пользователей

# В данном случае это будут /var/www/<имя пользователя>

user_sub_token=$USER
local_root=/var/www/$USER

# Виртуальные пользователи ограничены своим каталогом

chroot_local_user=YES

# Убирает передачу реальных идентификаторов групп и пользователей файлов

hide_ids=YES

# Запустить

# vsftpd listen=YES

# Слушать данные на порту 20

# connect_from_port_20=YES

# Маска для создания новых файлов

local_umask=022

Полный конфиг

listen=YES
listen_port=21
ftp_data_port=20
connect_from_port_20=YES
nopriv_user=ftp
ftp_username=ftp
idle_session_timeout=300
port_enable=YES
anonymous_enable=YES
anon_root=/home/ftp/anonymous
no_anon_password=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_upload_enable=NO
chown_uploads=YES
chown_username=ftp
anon_umask=022
local_enable=YES
local_root=/home/ftp/$USER
chroot_local_user=YES
local_umask=022
chmod_enable=YES
banner_file=/etc/vsftpd/banner
dirmessage_enable=YES
message_file=.message
dirlist_enable=YES
ls_recurse_enable=NO
mdtm_write=YES
deny_file={.message}
use_localtime=YES
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd/user_config/$USER
user_sub_token=$USER
download_enable=YES
write_enable=YES
ascii_download_enable=YES
ascii_upload_enable=YES
lock_upload_files=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
secure_chroot_dir=/var/run/vsftpd