Featured image of post Установка vsFTPd на Ubuntu 22.04

Установка vsFTPd на Ubuntu 22.04

Установка и настройка vsFTPd (по протоколу FTPS)

Появилась необходимость на скорую руку поднять FTPS для обмена с внешними сервисами.

Есть два режима пользователей в контексте vsftpd: локальные (системные) и виртуальные. В данном примере будут созданы виртуальные пользователи. В этом режиме пользователи не имеют системных учетных записей, а управляются через базу данных или файл.

Как это работает:

  • Клиент подключается к серверу, отправляет логин и пароль
  • Сервер проверяет учетные данные в базе данных виртуальных пользователей и представляет доступ к определенным директориям.

Решение более безопасное, так как виртуальные пользователи не имеют доступа к системе. Плюсом получаем упрощенное управление пользователями.

Шаг 1. Установка

Обновляем списки портов в репозиториях:

1
sudo apt update

Устанавливаем 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 и положить файл.

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Создано при помощи Hugo
Тема Stack, дизайн Jimmy