Настройка vsftpd для виртуальных пользователей

Рассматриваем случай настройки ftp-сервера для доступа от имени виртуальных (не системных) пользователей.

Нам потребуется несколько вещей.

  1. Авторизация виртуальных пользоватей
  2. "Посадка" каждого из этих пользователй в свой каталог

Для начала отключим нормальную авторизацию пользователей vsftpd и включим ту, которая нам нужна.

В файле настроек vsftpd по умолчанию присутствует такая строка:

pam_service_name=vsftpd
И по умолчанию в системе есть примерно такой файл /etc/pam.d/vsftpd
session    optional     pam_keyinit.so    force revoke
auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required	pam_shells.so
auth       include	password-auth
account    include	password-auth
session    required     pam_loginuid.so
session    include	password-auth
не будем вдаваться в подробности, но нам он совсем не подходит. Меняем его содержимое на
auth required /lib64/security/pam_userdb.so crypt=none db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so crypt=none db=/etc/vsftpd/login
session required pam_loginuid.so
и не забываем сохранить оригинальный файл, например как /etc/pam.d/vsftpd.orig (вдруг что пойдёт не так и захочется вернуть как было) В результате этих манипуляций авторизация пользователей будет происходить с помощью файла /etc/vsftpd/login.db. Для его подготовки создадим временный файл /etc/vsftpd/users.txt с данными о наших виртуальных пользователях:
user1
password1
username2
psqqword4user2
user3
pwd3
где user1, username2, user3 имена наших виртуальных пользователей, а password1,psqqword4user2,pwd3 соответственно их пароли. Теперь для формирования файла /etc/vsftpd/login.db воспользуемя командой:
#> db_load -T -t hash -f ./users.txt ./login.db

Минимальный файл настроек /etc/vsftpd/vsftpd.conf:

# Отключим анонимных пользователей
anonymous_enable=NO
write_enable=YES
local_enable=YES
# укажем папку для хранения пользовательских конфигов.
user_config_dir=/etc/vsftpd/users/
virtual_use_local_privs=YES
guest_enable=YES

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
dirmessage_enable=YES
connect_from_port_20=YES
#local_root и guest_username не забываем указывать в пользовательских файлах конфигурации
local_root=/var/www/sites
guest_username=ftpuser
chroot_local_user=YES
allow_writeable_chroot=YES
force_dot_files=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
userlist_deny=NO
tcp_wrappers=YES

Осталось создать файлы пользовательских конфигураций:

#> echo "local_root=/var/www/sites/site1" > /etc/vsftpd/users/user1
#> echo "guest_username=apache" >> /etc/vsftpd/users/user1

#> echo "local_root=/var/log/mikrotik" > /etc/vsftpd/users/username2
#> echo "guest_username=loguser" >> /etc/vsftpd/users/username2
Ну и
#> systemctl restart vsftpd