Ftp пассивный режим linux

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

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

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

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

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

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

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

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

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

Разрешаем локальных (и виртуальных) пользователей:

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

Это обеспечит установку прав 755 на директории и 644 на файлы, т.е. полный доступ только владельцу и чтение для группы и остальных.

Обязательно изолируем пользователей в их домашних директориях и рядом добавим опцию, чтобы не возникала ошибка:

chroot_local_user=YES allow_writeable_chroot=YES

Чтобы FTP-сервер использовал локальное время сервера, а не GMT установим:

Читайте также:  Astra linux selinux disabled

Включим запись в лог-файл /var/log/vsftpd.log загружаемых и скачиваемых файлов:

Для корректной работы с текстовыми данными, в частности с символами переноса строки в разных ОС (CR+LF в Windows, LF в Linux) включим поддержку ASCII. В этом случае FTP автоматически будет менять символы переноса строки для соответствия стандартам системы.

ascii_upload_enable=YES ascii_download_enable=YES

Будем использовать кодировку UTF-8 при работе с файловой системой:

Ниже добавим необходимые нам настройки. Разрешим пассивный режим и явно укажем диапазон портов:

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 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
Читайте также:  Лимит файловых дескрипторов linux

Устанавливаем сервер 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 .

Читайте также:  Linux срок поддержки ubuntu

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.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (146)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (68)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (62)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (140)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (105)
  • Установка (66)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)

Источник

Оцените статью
Adblock
detector