Установка сервера vsFTPd на Ubuntu 18.04. Часть вторая
07.03.2020
Теги: FTP • Linux • Ubuntu • Конфигурация • Настройка • Пользователь • Сервер • Установка
Активный и пассивный режим
В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP:
- В активном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PORT, в которой указывает свой адрес и порт для передачи данных. Получив данную команду, сервер устанавливает соединение с 20 порта на указанный в команде порт клиента.
- В пассивном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PASV. В ответ сервер передает адрес и порт, на который следует устанавливать соединение для передачи данных. Получив эту информацию, клиент устанавливает подключение к серверу и начинает передачу данных.
Основной недостаток активного режима — клиенту требуется выделенный IP-адрес. Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом. В пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований. По этой причине на сегодняшний день основным режимом работы FTP является пассивный.
Опции файла конфигурации
Данная опция запускает FTP-сервер как службу (сервер не должен запускаться от inetd
):
listen=YES
Ниже имеется аналогичная взаимоисключающая опция:
listen_ipv6=NO
Запрещаем доступ для анонимных пользователей:
anonymous_enable=NO
Разрешаем локальных (и виртуальных) пользователей:
local_enable=YESРазрешаем пользователяим изменения файловой системы:
write_enable=YES
Задаем маску для вновь создаваемых файлов и директорий:
local_umask=022
755
на директории и 644
на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.
Обязательно изолируем пользователей в их домашних директориях и рядом добавим опцию, чтобы не возникала ошибка:
chroot_local_user=YES allow_writeable_chroot=YES
Чтобы FTP-сервер использовал локальное время сервера, а не GMT установим:
use_localtime=YES
Включим запись в лог-файл /var/log/vsftpd.log
загружаемых и скачиваемых файлов:
xferlog_enable=YES
Для корректной работы с текстовыми данными, в частности с символами переноса строки в разных ОС (CR+LF в Windows, LF в Linux) включим поддержку ASCII. В этом случае FTP автоматически будет менять символы переноса строки для соответствия стандартам системы.
ascii_upload_enable=YES ascii_download_enable=YES
Будем использовать кодировку UTF-8 при работе с файловой системой:
utf8_filesystem=YES
Ниже добавим необходимые нам настройки. Разрешим пассивный режим и явно укажем диапазон портов:
pasv_enable=YES pasv_min_port=60000 pasv_max_port=60100
В итоге у нас получился вот такой файл конфигурации:
# Слушать и обрабатывать входящие соединения listen=YES # Запретить доступ для анонимных пользователей anonymous_enable=NO # Использовать для авторизации учётные записи пользователей local_enable=YES # Запретить пользователям выходить за пределы домашнего каталога chroot_local_user=YES allow_writeable_chroot=YES # Разрешить изменения файловой системы (запись и удаление файлов) write_enable=YES # Маска для вновь создаваемых файлов и директорий local_umask=022 # Показывать скрытые файлы, которые начинаются с точки force_dot_files=NO # При выводе списка файлов показывать локальное время, а не GMT use_localtime=YES # Записывать в /var/log/vsftpd.log данные о скачиваниях и загрузках xferlog_enable=YES # Включить поддержку ASCII для замены символов переноса строки ascii_upload_enable=YES ascii_download_enable=YES # Использовать кодировку UTF-8 при работе с файловой системой utf8_filesystem=YES # Разрешить использование пассивного режима работы сервера pasv_enable=YES # Диапазон портов для работы FTP-сервера в пассивном режиме pasv_min_port=60000 pasv_max_port=60100
Настройка файервола
Разрешаем управляющее соединение от клиента к серверу (активный и пассивный режим):
$ sudo ufw allow ftp
Разрешаем соединения от клиента для передачи данных при работе в пассивном режиме:
$ sudo ufw allow 60000:60100/tcp
В итоге у нас получились такие правила:
$ sudo ufw status Status: active To Action From ---------------------------------------------------- 60000:60100/tcp ALLOW Anywhere 21/tcp ALLOW Anywhere 60000:60100/tcp (v6) ALLOW Anywhere (v6) 21/tcp (v6) ALLOW Anywhere (v6)
Виртуальные пользователи
Допустим, у нас есть web-сервер и несколько сайтов в директории /var/www/
. Нам нужно обеспечить доступ к этим сайтам трем разным пользователям. Причем, таких пользователей нет в системе и у них должны быть права пользователя www-data
.
- сайт
site1.local
, директория/var/www/site1.local
, пользовательsite1.local
- сайт
site2.local
, директория/var/www/site2.local
, пользовательsite2.local
- сайт
site3.local
, директория/var/www/site3.local
, пользовательsite3.local
Устанавливаем сервер vsFTPd и редактируем файл конфигурации:
# Слушать и обрабатывать входящие соединения listen=YES # Запретить доступ для анонимных пользователей anonymous_enable=NO # Использовать для авторизации учётные записи пользователей local_enable=YES # Разрешить виртуальным пользователям авторизацию на сервере guest_enable=YES # Виртуальные пользователи будут работать от имени www-data guest_username=www-data # У виртуальных пользователей будут привилегии, как у локальных virtual_use_local_privs=YES # Каталог, куда виртуальный пользователь попадет после авторизации local_root=/var/www/$USER user_sub_token=$USER # Запретить пользователям выходить за пределы домашнего каталога chroot_local_user=YES allow_writeable_chroot=YES # Маска для вновь создаваемых файлов и директорий local_umask=022 # Показывать скрытые файлы, которые начинаются с точки force_dot_files=NO # При выводе списка файлов показывать локальное время, а не GMT use_localtime=YES # Записывать в /var/log/vsftpd.log данные о скачиваниях и загрузках xferlog_enable=YES # Включить поддержку ASCII для замены символов переноса строки ascii_upload_enable=YES ascii_download_enable=YES # Использовать кодировку UTF-8 при работе с файловой системой utf8_filesystem=YES # Разрешить использование пассивного режима работы сервера pasv_enable=YES # Диапазон портов для работы FTP-сервера в пассивном режиме pasv_min_port=60000 pasv_max_port=60100
Устанавливаем пакеты (если уже установлен Apache2, то пакет apache2-utils
устанавливать не нужно):
$ sudo apt install libpam-pwdfile apache2-utils
Открываем на редактирование файл /etc/pam.d/vsftpd
, удаляем в нем все и добавляем две строки:
auth required pam_pwdfile.so pwdfile /etc/vsftpd.passwd account required pam_permit.so
После этого аутентификация локальных пользователей на FTP-сервере будет невозможна, работать смогут только виртуальные. Теперь надо создать файл с паролями vsftpd.passwd
:
$ sudo htpasswd -c -d /etc/vsftpd.passwd site1.local
Опция -c
предписывает создать файл паролей; если он уже существует, то файл будет перезаписан. Опция -d
задает необходимый для vsFTPd алгоритм шифрования пароля.
Пароль для пользователя site1.local
создан, осталось создать пароли для пользователей site2.local
и site3.local
:
$ sudo htpasswd -d /etc/vsftpd.passwd site2.local $ sudo htpasswd -d /etc/vsftpd.passwd site3.local
Смотрим, что получилось:
$ cat /etc/vsftpd.passwd site1.local:7Sk4liHlfBfiY site2.local:MJdR9xZ7SH5cw site3.local:WN2MwtA7Z/Q3E
Осталось только перезагрузить сервер:
$ sudo systemctl restart vsftpd.service
user_config_dir
позволяет установить директорию для хранения файлов персональных настроек пользователей. Настройки, заданные в этих файлах, переопределяет настройки из основного файла конфигуации. Если user_config_dir
имеет значение /etc/vsftpd_user_conf
, то при подключении к серверу пользователя evg
, vsFTPd применит настройки из файла /etc/vsftpd_user_conf/evg
.
- Установка сервера vsFTPd на Ubuntu 18.04. Часть первая
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
Поиск: FTP • Linux • Ubuntu • Конфигурация • Настройка • Сервер • Установка • vsFTPd • www-data • Пользователь