В этой статье я покажу как создать FTPS сервер на Linux (Debian 11) с отдельными каталогами для разных пользователей.

Реализуемая схема

В этой статье я покажу процесс подготовки FTPS сервера на Linux, при этом каждый пользователь будет видеть только свой каталог.

SFTP сервер на Linux с отдельными каталогами для разных пользователей
FTPS сервер

Установка и настройка FTP сервера

Я буду использовать Very Secure FTP Daemon (vsftpd), устанавливаем пакет:

# apt install vsftpd

После установки, у вас появится новая служба — vsftpd.service:

# systemctl status vsftpd.service
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-12-09 13:14:31 MSK; 26s ago
    Process: 1135 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 1136 (vsftpd)
      Tasks: 1 (limit: 4915)
     Memory: 1.0M
     CGroup: /system.slice/vsftpd.service
             └─1136 /usr/sbin/vsftpd /etc/vsftpd.conf

Перед настройками сервера, сделаем резервную копию конфига:

# cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Отредактируем конфиг:

# nano /etc/vsftpd.conf
anonymous_enable=NO # запрещаем вход анонимных пользователей
local_enable=YES # разрешаем вход по ftp для локальных пользователей
write_enable=YES # разрешаем писать на ftp (загружать или удалять файлы)
local_umask=077 # маска для вновь создаваемых файлов
xferlog_enable=YES # записывать в лог файл все транзакции по передаче файлов
xferlog_std_format=YES # использовать стандартный формат лога
xferlog_file=/var/log/vsftpd.log # файл лога
connect_from_port_20=YES # исходящие с сервера FTP-соединения по 20 порту вместо случайного
listen=YES # ожидать входящие соединения
listen_ipv6=NO # для ipv6 не ожидать входящие соединения
pam_service_name=vsftpd # использовать PAM библиотеки
userlist_enable=YES # разрешим вход только для перечисленных пользователей
userlist_file=/etc/vsftpd.userlist # перечислим пользователей в этом файле
userlist_deny=NO # пользователи, которые есть в списке не будут отбрасываться
chroot_local_user=YES # пользователи ограничены только своей домашней папкой

Различные опции хорошо описаны здесь, на русском языке.

После настройки перезапустим службу:

# systemctl restart vsftpd.service

По желанию, проверим слушает ли наш ftp сервер входящие соединения:

# ss -ltupn | grep vsftpd
tcp  LISTEN 0     32     0.0.0.0:21     0.0.0.0:*    users:(("vsftpd",pid=1273,fd=3))

Создание FTP-пользователей

Создадим первого и второго пользователя и запишем их в userlist. Все остальные, локальные пользователи, не смогут подключаться по протоколу FTP:

# adduser ftp_user1
# adduser ftp_user2

# nano /etc/vsftpd.userlist
ftp_user1
ftp_user2

Включение TLS

Сейчас уже можно подключиться к нашему FTP-серверу, но логины и пароли, при этом, будут передаваться открытым текстом. Чтобы этого избежать включим поддержку TLS, превратив FTP-сервер в FTPS-сервер.

Создадим самоподписанный ssl сертификат на 10 лет:

# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

И добавим опции в конфиг:

# nano /etc/vsftpd.conf
ssl_enable=YES                                   # включим ssl
rsa_cert_file=/etc/ssl/private/vsftpd.pem        # путь к файлу ключа
rsa_private_key_file=/etc/ssl/private/vsftpd.pem # путь к файлу сертификата
allow_anon_ssl=NO                                # запретим анонимные подключения по ssl
force_local_data_ssl=YES                         # разрешим передачу данных только по ssl
force_local_logins_ssl=YES                       # разрешим подключаться только по ssl
ssl_tlsv1=YES                                    # разрешим алгоритм tlsv1
ssl_sslv2=NO                                     # запретим устаревший sslv2
ssl_sslv3=NO                                     # запретим устаревший sslv3

Затем перезапустим службу:

# systemctl restart vsftpd.service

Подключение к серверу (FTP-клиенты)

Для подключения можно использовать FileZilla, WinSCP, или обычный Windows Проводник.

Я покажу как подключиться к FTP серверу с помощью приложения FileZilla. После запуска приложения вы увидите такое окно:

Внешний вид приложения FileZilla
FileZilla

Слева будет локальная файловая система, а справа удалённая. Вы можете совершить быстрое подключение, указав: хост, имя пользователя, пароль и порт. Или можете сохранить подключение, чтобы использовать его в последующем несколько раз. Для того, чтобы сохранить подключение, откройте менеджер сайтов, выбрав в меню «Файл / Менеджер сайтов«. Каждый сайт — это сохранённое подключение. Создавая новый сайт вы можете указать ip-адрес, порт, логин и пароль и другое:

FileZilla - создание сайта
FileZilla — создание сайта

Дальше, используя созданные сайты, вы сможете подключаться к различным FTP серверам.

Формат логов

Далее я подключился с помощью FileZilla к своему FTP серверу. И выполнил некоторые действия:

  • Скачал текстовый файл.
  • Загрузил бинарный файл.
  • Загрузил текстовый файл.

В журнале (/var/log/vsftpd.log) появились следующие записи:

Mon Dec 12 15:06:29 2022 1 192.168.0.5 6 /user2/test.txt a _ o r ftp_user2 ftp 0 * c
Mon Dec 12 15:25:39 2022 1 192.168.0.5 7254 /user2/report.json b _ i r ftp_user2 ftp 0 * c
Mon Dec 12 15:27:53 2022 1 192.168.0.5 6 /user2/test.txt a _ i r ftp_user2 ftp 0 * c

Здесь видна следующая информация:

  • дата и время транзакции, а также ip-адрес клиента (Mon Dec 12 15:06:29 2022 1 192.168.0.5);
  • размер файла в байтах и сам файл (7254 /user2/report.json);
  • режим передачи: (a — ASCII, b — двоичный), символ (_) — означает, что не было произведено никаких специальных операций, и направление передачи (o — файл скачали, i — файл загрузили) — (a _ o) или (b _ i);
  • символ (r) — означает что пользователь был зарегистрирован в системе, дальше идёт имя пользователя (r ftp_user2).

Логирование желательно включать, чтобы в случае чего знать, кто и что делал с файлами по FTP.

Итог

Из статьи вы узнали как подготовить FTPS сервер на Linux. Я все действия выполнял на системе Debian 11, но на Ubuntu 22.04 всё делается аналогично. Показал как защитить сервер с помощью TLS протокола, как использовать userlist, для создания списка разрешённых пользователей.

Сводка
Создание FTPS сервера на Linux
Имя статьи
Создание FTPS сервера на Linux
Описание
В этой статье я покажу как создать ftps сервер на Linux (Debian 11) с отдельными каталогами для разных пользователей

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *