FTP сервер vsftpd с виртуальными пользователями на Centos 7
Подключение FTP будет по 21 порту по протоколу SSL
Установка vsftpd:
yum install vsftpd
Установка openssl:
yum install openssl
Очистить конфиги которые по умолчанию:
rm -rf /etc/vsftpd/*
Создать файл /etc/vsftpd/vsftpd.conf и приводим к:
# Запуск сервера в режиме службы
listen=YES
# Работа в фоновом режиме
background=YES
# Разрешить подключаться виртуальным пользователям
guest_enable=YES
# Системный пользователь от имени котрого подключаются виртуальные
guest_username=ftp
# Виртуальные пользователи имеют те же привелегии, что и локальные
virtual_use_local_privs=YES
# Автоматическое назначение домашнего каталога для виртуальных пользователей
user_sub_token=$USER
local_root=/ftp/$USER
# Имя pam сервиса для vsftpd
pam_service_name=vsftpd
# Входящие соединения контроллируются через tcp_wrappers
tcp_wrappers=YES
# Запрещает подключение анонимных пользователей
anonymous_enable=NO
# Каталог, куда будут попадать анонимные пользователи, если они разрешены
#anon_root=/ftp
# Разрешает вход для локальных пользователей
local_enable=YES
# Разрешены команды на запись и изменение
write_enable=YES
# Указывает исходящим с сервера соединениям использовать 20-й порт
connect_from_port_20=YES
# Логирование всех действий на сервере
xferlog_enable=YES
# Путь к лог-файлу
xferlog_file=/var/log/vsftpd.log
# Включение специальных ftp команд, некоторые клиенты без этого могут зависать
async_abor_enable=YES
# Локальные пользователи по-умолчанию не могут выходить за пределы своего домашнего каталога
chroot_local_user=YES
# Разрешить список пользователей, которые могут выходить за пределы домашнего каталога
chroot_list_enable=YES
# Список пользователей, которым разрешен выход из домашнего каталога
chroot_list_file=/etc/vsftpd/chroot_list
# Разрешить запись в корень chroot каталога пользователя
allow_writeable_chroot=YES
# Директория с настройками пользователей
user_config_dir=/etc/vsftpd/users
# Показывать файлы, начинающиеся с точки
force_dot_files=YES
# Маска прав доступа к создаваемым файлам
local_umask=022
# Порты для пассивного режима работы
pasv_min_port=40000
pasv_max_port=50000
# SSL
rsa_cert_file=/ssl/certificate.pem
rsa_private_key_file=/ssl/private.pem
ssl_enable=YES
# To force local users to use SSL
force_local_data_ssl=YES
force_local_logins_ssl=YES
# The following option depend of the authentication mode you require
# for TLS Version 1
ssl_tlsv1=YES
# for SSL Version 2
ssl_sslv2=YES
# for SSL Version 3
ssl_sslv3=YES
# Uncomment ssl_request_cert option if SSL/TLS connection is used by IBM's zOS ftp client
# read man vsftpd.conf for further information
ssl_request_cert=no
require_ssl_reuse=no
Ссылки на сертификаты:
rsa_cert_file=/ssl/certificate.pem
rsa_private_key_file=/ssl/private.pem
Открыть порты в firewall:
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=40000-50000/tcp
firewall-cmd --reload
Открыть порты на iptables:
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 40000:50000 -j ACCEPT
service iptables save
Установить пакет compat-db:
yum install compat-db
На всякий случай сохраните оригинальный pam.d файл
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.orig
Открыть на редактирование /etc/pam.d/vsftpd и привести к:
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
session required pam_loginuid.so
Перезапустить vsftpd:
systemctl restart vsftpd
Добавление пользователя
Добавить в файл /etc/vsftpd/virt_users:
user1
password1
user2
password2
Генерируем локальное хранилище учеток:
db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db
Добавить в файл /etc/vsftpd/chroot_list:
user1
user2
Создать файлы настроек для пользователей:
Для пользователя user1 — /etc/vsftpd/users/user1:
guest_username=demo
local_root=/home/demo/demo.site.ru/public
Для пользователя user2 — /etc/vsftpd/users/user2:
guest_username=userman
local_root=/home/userman/project
Таким образом пользователь «user1» будет работать под системным пользователем «demo» и начальная директория: /home/demo/demo.site.ru/public
Пользователь «user2» будет работать под системным пользователем «userman» и начальная директория: /home/userman/project
Ошибка авторизации виртуальных пользователей
Wed May 11 09:13:10 2022 [pid 30955] [username] FAIL LOGIN: Client "127.127.127.127"
В моем случае помогло:
у файла /etc/vsftpd/virt_users изменить формат конца строк с CR LF на LF
и заново генерируем локальное хранилище учеток:
db_load -T -t hash -f /etc/vsftpd/virt_users /etc/vsftpd/virt_users.db