Появилась необходимость на скорую руку поднять FTPS для обмена с внешними сервисами.
Есть два режима пользователей в контексте vsftpd: локальные (системные) и виртуальные.
В данном примере будут созданы виртуальные пользователи. В этом режиме пользователи не имеют системных учетных записей, а управляются через базу данных или файл.
Как это работает:
- Клиент подключается к серверу, отправляет логин и пароль
- Сервер проверяет учетные данные в базе данных виртуальных пользователей и представляет доступ к определенным директориям.
Решение более безопасное, так как виртуальные пользователи не имеют доступа к системе. Плюсом получаем упрощенное управление пользователями.
Шаг 1. Установка
Обновляем списки портов в репозиториях:
Устанавливаем vsFTPd:
1
|
sudo apt install vsftpd -y
|
Устанавливаем утилиту для создания базы данных пользователей:
1
|
sudo apt install db-util -y
|
Основной конфигурационный файл находится здесь /etc/vsftpd.conf
Делаем копию оригинального конфига:
1
|
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
|
Шаг 2. Конфигурация сервера
Открываем новый файл на редактирование:
1
|
sudo nano /etc/vsftpd.conf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
### Основные настройки
## Сервер работает в standalone-режиме. Сам прослушивает и определяет входящие соединения.
listen=YES
# Анонимный доступ запрещен
anonymous_enable=NO
# Разрешен доступ локальным пользователям системы
local_enable=YES
# Включена поддержка виртуальных пользователей
guest_enable=YES
# Виртуальные пользователи работают от имени системного пользователя vsftpd
guest_username=vsftpd
# Виртуальные пользователи имеют те же права, что и локальные пользователи
virtual_use_local_privs=YES
# Используется PAM-модуль vsftpd.virtual для аутентификации виртуальных пользователей
pam_service_name=vsftpd.virtual
# Каждый пользователь имеет свою домашнюю директорию в /home/vsftpd/
user_sub_token=$USER
local_root=/home/vsftpd/$USER
## Настройки chroot
# Чтобы пользователи не могли перемещаться по каталогам сервера и просматривать файлы ограничиваем их домашними директориями
chroot_local_user=YES
allow_writeable_chroot=YES
## Логирование
# Скрывает реальные UID/GID пользователей в логах
hide_ids=YES
# Включает логирование передачи файлов
xferlog_enable=YES
# Включает подробное логирование FTP-протокола
log_ftp_protocol=YES
# Указывает путь к файлу логов передачи файлов
xferlog_file=/var/log/vsftpd.log
vsftpd_log_file=/var/log/vsftpd.log
# Более подробный вывод логов
xferlog_std_format=NO
## Настройки портов
# Разрешает активный режим FTP на 20 порту
port_enable=YES
connect_from_port_20=YES
ftp_data_port=20
# Минимальный и максимальный порты, для пассивного режима
pasv_enable=YES
pasv_max_port=35109
pasv_min_port=35100
## Права доступа для создаваемых файлов
file_open_mode=0666
local_umask=077
## Настройки SSL/TLS
ssl_enable=YES
# Запрещает анонимным пользователям использовать SSL/TLS
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_tlsv1=NO
ssl_tlsv11=NO
ssl_tlsv12=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
|
Все инструкции, для конфигурации подробно описаны здесь:
https://www.opennet.ru/base/net/vsftpd_overview.txt.html
Шаг 3. SSL-Сертификат
Для теста сгенирируем самоподписанный сертификат и ключ:
1
|
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/private/vsftpd.key -subj "/C=RU/ST=Moscow/L=Moscow/O=MyOrganization/OU=IT/CN=vsftpd.server/CN=vsftp.server"
|
Шаг 4. Настройка виртуальных пользователей
Создайте текстовый файл с логинами и паролями. Например, создаём файл virtual_users.txt
1
|
sudo nano /etc/vsftpd/virtual_users.txt
|
Добавляем логины и пароли в формате:
1
2
3
4
|
user1
password1
user2
password2
|
Создаем базу данных из этого файла:
1
|
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
|
Установите права доступа к файлу базы данных:
1
|
sudo chmod 600 /etc/vsftpd/virtual_users.db
|
Настройте PAM для использования этой базы данных.
Создайте файл /etc/pam.d/vsftpd.virtual:
1
|
sudo nano /etc/pam.d/vsftpd.virtual
|
Добавьте следующие строки:
1
2
|
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
|
Создаем пользователя vsftpd:
1
|
sudo adduser --home /home/vsftpd --no-create-home --shell /bin/false vsftpd
|
Создаём директории для виртуальных пользователей:
1
2
|
sudo mkdir -p /home/vsftpd/user1
sudo mkdir -p /home/vsftpd/user2
|
Выдаём права на директории vsftpd:
1
2
|
sudo chown vsftpd:vsftpd /home/vsftpd/user1
sudo chown vsftpd:vsftpd /home/vsftpd/user2
|
Перезапускаем сервис. Проверяем работоспособность
1
|
sudo systemctl restart vsftpd
|
Подключить можно через WinSCP и положить файл.