Установка сервера vsFTPd на Ubuntu 18.04. Часть вторая

07.03.2020

Теги: FTPLinuxUbuntuКонфигурацияНастройкаПользовательСерверУстановка

Активный и пассивный режим

В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP:

  • В активном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PORT, в которой указывает свой адрес и порт для передачи данных. Получив данную команду, сервер устанавливает соединение с 20 порта на указанный в команде порт клиента.
  • В пассивном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PASV. В ответ сервер передает адрес и порт, на который следует устанавливать соединение для передачи данных. Получив эту информацию, клиент устанавливает подключение к серверу и начинает передачу данных.

Основной недостаток активного режима — клиенту требуется выделенный IP-адрес. Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом. В пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований. По этой причине на сегодняшний день основным режимом работы FTP является пассивный.

Опции файла конфигурации

Данная опция запускает FTP-сервер как службу (сервер не должен запускаться от inetd):

listen=YES

Ниже имеется аналогичная взаимоисключающая опция:

listen_ipv6=NO
Первая из них обеспечивает поддержку IPv4, вторая сразу IPv6 и IPv4, поэтому должна быть включена только одна из них.

Запрещаем доступ для анонимных пользователей:

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.

Поиск: FTP • Linux • Ubuntu • Конфигурация • Настройка • Сервер • Установка • vsFTPd • www-data • Пользователь

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.