В «стандартном» варианте vsftpd настроен таким образом, что поддерживает аутентификацию только локальных в пределах системы пользователей и/или анонимных. Принимая во внимание то, что в качестве механизма аутентификации в vsftpd используется PAM, мы вольны настраивать схему аутентификации как нам будет угодно. Этим сегодня и займёмся. В этой статье я расскажу о том, как в vsftpd можно настроить аутентификацию виртуальных пользователей, т. е. пользователей, учётные записи которых отсутствуют в системных /etc/passwd и /etc/shadow. Данный способ организации доступа к vsftpd естественно более безопасен, поскольку виртуальные пользователи не имеют прав доступа, которые есть у локальных учётных записей. При написании статьи использовались Debian 5 Lenny, Berkeley DB 4.6 и Linux PAM 2.6.26.
Установка необходимого ПО
# apt-get install db4.6-util
Создание базы данных виртуальных пользователей
user1
password1
user2
password2
# mkdir /etc/vsftpd
# db4.6_load -T -t hash -f /home/ashep/tmp/vsftpdusers /etc/vsftpd/users.db
# chmod 0600 /etc/vsftpd/users.db
$ rm /home/ashep/tmp/vsftpdusers
Настройка vsftpd
# Разрешение подключаться локальным и виртуальным пользователям
local_enable=YES
# Путь к домашним каталогам виртуальных пользователей
user_sub_token=$USER
local_root=/home/vsftpd/$USER
# Не даём вылазить за пределы своего домашнего каталога пользователям
chroot_local_user=YES
# Скрываем реальные ID пользователей от посторонних глаз
hide_ids=YES
# Ремаппинг неанонимных пользователей "гостевой" учётной записи
guest_enable=YES
# Имя "гостевой" учётной записи
guest_username=ftp
# Виртуальные пользователи пользуются такими же привилегиями, что и локальные
virtual_use_local_privs=YES
# Глобальное разрешение операций записи
write_enable=YES
# Имя службы PAM (должно совпадать с именем соответствующего файла в /etc/pam.d)
pam_service_name=vsftpd.virtual
Создание службы PAM
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
session required pam_loginuid.so
Создание домашних каталогов виртуальных пользователей
# mkdir /home/vsftpd
# mkdir -p /home/vsftpd/{user1,user2}
# chown -R ftp:nogroup /home/vsftpd/
Перезапуск сервера
# /etc/init.d/vsftpd restart
Проверка подключения
$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
Name (localhost:ashep): user1
331 Please specify the password.
Password: password1
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.