FTP (File Transfer Protocol) – это сетевой протокол для обмена файлами между сервером и клиентом. Поскольку FTP передаёт данные в незашифрованном виде, он считается очень опасным; вместо него рекомендуется использовать vsftp – версию протокола, которая поддерживает шифрование данных.
Рассмотрим как настроить vsftp для загрузки файлов в домашний каталог пользователя с помощью FTP и учётных данных SSL/TLS.
Для работы вам понадобится Ubuntu Sever.
Установка vsftp
Обновите индекс пакетов
apt update
Установите vsftp:
apt install vsftpd
После завершения установки создайте копию конфигурационного файла.
cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Настройка брандмауэра
Проверьте состояние брандмауэра и узнайте, какие сервисы он поддерживает на данный момент.
ufw status
Результат покажет, активен ли ваш брандмауэр или нет.

Включение UFW
Если при выполнении команды ufw status вы получили сообщение Status: inactive, это означает, что брандмауэр еще не включен в системе. Вам нужно выполнить команду, чтобы включить его.
По умолчанию, когда UFW включен, он блокирует внешний доступ ко всем портам на сервере. На практике это означает, что если вы подключены к серверу по SSH и включите ufw до разрешения доступа через порт SSH, вы будете отключены.
Чтобы включить UFW в вашей системе, выполните команду:
ufw enable
Система выдаст предупреждение о разрыве ssh соединения, введите Y и нажимаете клавишу inter.

Сейчас брандмауэр стал активен.
Снова проверяем статус:
ufw status

Состояние и список правил вашего брандмауэра может отличаться.
Нужно разблокировать трафик FTP.
Откройте порт 20 для FTP:
ufw allow 20/tcp
Откройте порт 21 для FTP:
ufw allow 21/tcp
Откройте порт 990 для TLS (который будет включен позже):
ufw allow 990/tcp
Откройте порт 990 для диапазонов пассивных портов 40000-50000:
ufw allow 40000:50000/tcp
Снова проверяем статус.
ufw status
Теперь правила брандмауэра выглядят так:

Каталога пользователя
Создайте пользователя для FTP, если пользователь у вас уже есть, то следуйте дальнейшим инструкциям, пропустите пункты как создать пользователя.
Во время работы права существующего пользователя не будут изменяться. Однако лучше создать нового пользователя для работы FTP.
Создайте пользователя:
adduser user
Выберите пароль нового пользователя.

Подтвердите пароль.

Остальные данные можно оставить по умолчанию, нажав Enter.

Подтвердите правильность ввода данных, введите Y и нажимаете клавишу inter.
vsftpd не может дать пользователю права на запись в домашнем каталоге, поскольку тогда vsftpd не сможет обеспечить защиту этого каталога. Это нормально для новых пользователей, которым нужно только подключение FTP, но существующим пользователям необходимо иметь право на запись в домашнем каталоге.
Мы не станем отнимать у пользователей этого права. Вместо этого можно создать каталог ftp для поддержки окружения chroot и каталог files для хранения файлов.
Создайте каталог ftp.
mkdir /home/user/ftp
Установите права на него.
chown nobody:nogroup /home/user/ftp
Отнимите право на запись в этом каталоге.
chmod a-w /home/user/ftp
Проверьте права:
ls -la /home/user/ftp

Теперь создайте каталог для хранения файлов.
mkdir /home/user/ftp/files
Передайте пользователю права собственности на него.
chown user:user /home/user/ftp/files
Проверьте права на этот каталог:
ls -la /home/user/ftp

Теперь добавьте файл test.txt, с помощью которого можно протестировать настройку.
echo "vsftpd test file" | sudo tee /home/user/ftp/files/test.txt
Настройка FTP
Дайте одному пользователю с аккаунтом локальной оболочки право на FTP-подключения. Все необходимые параметры можно найти в vsftpd.conf. Откройте этот конфигурационный файл и убедитесь, что он содержит такие параметры:
nano /etc/vsftpd.conf

Дайте одному пользователю с аккаунтом локальной оболочки право на FTP-подключения. Все необходимые параметры можно найти в vsftpd.conf. Откройте этот конфигурационный файл и убедитесь, что он содержит такие параметры:
Команды управления конфигурацией
Чтобы разрешить пользователям подгружать файлы, раскомментируйте write_enable:

Затем раскомментируйте chroot, чтобы заблокировать пользователям, подключившимся через FTP, доступ к файлам и каталогам вне этого дерева каталогов.

В любое место файла добавьте директиву user_sub_token, чтобы вставить имя пользователя в путь local_root directory. Это позволит в дальнейшем добавить новых пользователей.
user_sub_token=$USER
local_root=/home/$USER/ftp

Ограничьте диапазон портов для FTP:
pasv_min_port=40000
pasv_max_port=50000

Этот диапазон портов был разблокирован в разделе 2.
Поскольку пользователи будут иметь доступ к FTP на индивидуальной основе, настройте FTP таким образом, чтобы доступ пользователю предоставлялся только после явного добавления в список (а не по умолчанию).
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Сохраните и закройте файл.
Создайте и пользователя и добавьте его в файл. Флаг –a вставит данные о пользователе в файл:
echo "user" | sudo tee -a /etc/vsftpd.userlist
Убедитесь, что пользователь был внесён в список:
cat /etc/vsftpd.userlist

Перезапустите FTP, чтобы обновить настройки:
systemctl restart vsftpd
На данный момент FTP-доступ есть только у пользователя user, можно протестировать через подключение по FTR.