Различия

Показаны различия между двумя версиями страницы.


pure-ftpd [2022/05/11 23:41] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Настройка Pure-FTPd ======
 +~~Title: Pure-FTPd быстрая установка и настройка в любом Linux ~~
 +{{htmlmetatags>
 +metatag-description=(Настройка сервера Pure-FTPd. Дополнительные настройки Pure-FTPd Umask, MaxLoad, DontResolve и т.д.)
 +}}
 +
 +{{ ::pureftpd.png?nolink&400 |}}
 +
 +Домашняя страница [[https://www.pureftpd.org|Pure-FTPd]].
 +
 +Pure-FTPd — свободный FTP-сервер для операционных систем семейства UNIX, распространяется по лицензии BSD. Основное внимание уделяется безопасности и простоте настройки. 
 +
 +**Функциональные возможности:**
 +  * Встроенная поддержка [[UTF-8]].
 +  * Поставляется с программой мониторинга **pure-ftpwho**, которая в реальном времени показывает кто скачивает/загружает файлы и с какой скоростью.
 +  * Возможен запуск pure-ftpwho как CGI приложения с возможностью генерации выходных данных в виде [[HTML5|HTML]] или [[XML|XML]].
 +  * Сообщения сервера на данный момент переведены на 21 язык.
 +  * Создание виртуальных пользователей.
 +  * Задание индивидуальных квот, не связанных с системными, для пользователей (максимальное количество файлов, максимальный размер каталога, максимальная скорость скачивания/закачивания).
 +  * После загрузки файла на сервер возможен автоматический запуск внешних скриптов или программ (например, для проверки на вирусы, расчет MD5 хэшей файлов, отправка уведомлений о загрузке).
 +  * Запрет доступа к dot-файлам (имя которых начинается с точки, например, .ssh directories, .bash_history files, .rhosts).
 +  * Создание псевдонимов (алиасы) для директорий (т.е. работать как shortcuts).
 +
 +===== Шаг 1: Инсталляция Pure-FTPd в Debian, Ubuntu, CentOS =====
 +[[CentOS|CentOS]]:
 +<file bash>
 +yum install pure-ftpd
 +</file>
 +
 +[[Debian|Debian]], [[Ubuntu|Ubuntu]]
 +<file bash>
 +apt install pure-ftpd
 +</file>
 +
 +Запустим установленный, но еще не защищенный,  FTP-сервер.
 +<file bash>
 +systemctl start pure-ftpd;
 +systemctl enable pure-ftpd;
 +</file>
 +
 +===== Шаг 2: Установка и настройка Pure-FTPd сервера =====
 +На этом этапе сервер Pure-FTPd запущен и готов к работе. Проверим работу FPT сервера на localhost:
 +
 +<file bash>
 +$ ftp localhost
 +Trying [::1]:21 ...
 +Connected to localhost.
 +220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
 +220-You are user number 1 of 50 allowed.
 +220-Local time is now 18:51. Server port: 21.
 +220-This is a private system - No anonymous login
 +220 You will be disconnected after 15 minutes of inactivity.
 +Name (localhost:admin):
 +</file>
 +
 +<note tip>У PureFTPd в Ubuntu не используется файл конфигурации pure-ftpd.conf - все настройки хранятся в директории /etc/pure-ftpd/conf/ в виде отдельных файлов с именем параметра. То есть для изменения настроек сервера нужно создать файл с названием параметра и значением внутри.</note>
 +
 +
 +  * Конфигурационные файлы и директории:<file bash>
 +/etc/default/pure-ftpd-common
 +/etc/pure-ftpd
 +</file>
 +  * Включим [[Chroot|chroot-jail]]. Можно или запустить PureFTPd с ключом -A или задать параметр.<file bash>
 +echo yes > /etc/pure-ftpd/conf/ChrootEveryone
 +</file>
 +  * Поскольку мы будем настраивать авторизацию через PureDB, надо запретить PAM:<file bash>
 +echo no > /etc/pure-ftpd/conf/PAMAuthentication
 +</file>
 +
 +===== Шаг 3: Виртуальные пользователи PureDB =====
 +
 +**Механизм Virtual Users в Pure-FTPD** ([[https://download.pureftpd.org/pub/pure-ftpd/doc/|README.Virtual-Users]]), представляет из себя следующее - в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным системным пользователем. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и прочее. 
 +
 +Включим авторизацию из база данных пользователей PureDB (создадим символическую ссылку), по умолчанию была настроена авторизация Unix(no - выключена) и PAM (yes - включена). При аутентификации важен порядок загрузки, потому добавим цифру 60 в название создаваемой символической ссылки, чтобы проверка пользователя начиналась именно с проверки из PureDB <file bash>
 +ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60PureDB
 +ls -l /etc/pure-ftpd/auth/
 +
 +lrwxrwxrwx 1 root root 26 Sep 17 12:32 60PureDB -> /etc/pure-ftpd/conf/PureDB
 +lrwxrwxrwx 1 root root 26 Sep 17 12:29 65unix -> ../conf/UnixAuthentication
 +lrwxrwxrwx 1 root root 25 Sep 17 12:29 70pam -> ../conf/PAMAuthentication
 +</file>
 +
 +<alert type="info">Ранее, я всегда рассказывал, что нужно создавать системного пользователя ftpuser без [[shell|shell]] c добавлением его в группу www-data (в которую входит веб сервер Apache, чтобы права были вида ftpuser:www-data). Но частые вопросы и НЕУСТРАНИМЫЕ ошибки с правами у пользователей, которые [[https://dieg.info/vps-hosting/|купили VPS]] и хотят сами управлять своими хостингом и сайтами, изменили мое мнение. Теперь будем запускать демона Pure-FTPD от системного пользователя, который запускает ваш веб-сервер Nginx, Apache.</alert>
 +
 +В моем случае  запущен Nginx. Чтобы выяснить от какого пользователя он запускается, можно посмотреть в его конфигурационном файле или выполнить команду:
 +<file bash>
 +ps -ef | grep nginx
 +</file>
 +
 +{{ ::nginx_user.jpg?nolink |}}
 +
 +Как мы видим он у меня запущен от пользователя www-data (также часто встречается запуск от пользователя nginx). Теперь выясним uid нашего пользователя www-data, введя команду
 +<file bash>
 +id www-data
 +
 +uid=33(www-data) gid=33(www-data) groups=33(www-data)
 +</file>
 +В /etc/pure-ftpd/conf/MinUID изменим значение 1000 на uid пользователя www-data, то есть 33. Если этого не сделать вы получите ошибку, при попытке подключиться к FTP серверу: **530 Sorry, but I can't trust you**.
 +===== Шаг 4: Создание виртуальных пользователей =====
 +Все операции над пользователями FTP сервера осуществляться с помощью утилиты pure-pw. Работа с виртуальными пользователями происходит в два этапа:
 +  - Создание файла со списком пользователей и их параметрами (по умолчанию '/etc/pureftpd.passwd'), на этом этапе вы также можете вносить изменения в список аккаунтов
 +  - Создание на основе файла списка бинарного файла, с которым в конечном итоге и будет работать сервер (по умолчанию /etc/pure-ftpd/pureftpd.pdb);
 +  * Создадим нашего первого пользователя tester<file bash>
 +pure-pw useradd tester -u www-data -g www-data -d /var/www -c "Name User" -y 4
 +pure-pw mkdb # что бы изменения были сразу же внесены в файл 'pureftpd.pdb' используйте ключ -m
 +chown -R www-data:www-data /var/www
 +</file>
 +Подключимся, например при помощи ftp- клиента [[FileZilla|FileZilla]] и создадим тестовые файл и директорию, чтобы проверить какие будут выставлены права
 +<file bash>
 +ls -l /var/www
 +drwxr-xr-x  2 www-data www-data 4096 May 11 19:37 testdir/
 +-rw-r--r--  1 www-data www-data    0 May 11 19:37 testfile
 +</file>
 +
 +**Все!** Настройка FTP сервера завершена.
 +
 +===== Шаг 5: Включение шифрования SSL/TLS (опционально) =====
 +Современные реалии требуют всё шифровать. Давайте и мы сделаем протокол [[FTP|FTP]] более защищенным. И обязательно запищим пароль от FTP сервера на листочке и приклеим к монитору (шутка :-))!
 +
 +Преамбула, такова, что протокол FTP передает все ПАРОЛИ и данные в открытом виде (в текстовом виде). То есть любой [[sniffer|сниффер]] позволяет прочитать ваш логин и пароль. А мы возьмем и зашифруем и логин и пароль!
 +
 +<file bash>
 +apt install openssl
 +</file>
 +Итак, для начала нам нужно создать SSL сертификат и подключить его к нашему серверу Pure-FTPd. По соглашению, будем хранить сертификаты в /etc/ssl/private. Вы можете выбрать произвольную директорию.
 +
 +<file bash>
 +openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem -days 3650
 +</file>
 +Запущенная команда задаст несколько вопросов, ответьте на них в произвольной форме.
 +<file bash>
 +Country Name (2 letter code) [AU]:UA
 +State or Province Name (full name) [Some-State]:
 +Locality Name (eg, city) []:
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:dieg.info
 +Organizational Unit Name (eg, section) []:
 +Common Name (e.g. server FQDN or YOUR name) []:dieg.info
 +Email Address []:darkfire@dieg.info
 +</file>
 +Зададим права на файл сертификата
 +<file>
 +chmod 600 /etc/ssl/private/pure-ftpd.pem
 +</file>
 +Выберем один из трех режимов работы для FTP сервера. Если вы хотите разрешить сессии как FTP, так и TLS, выполните команду:
 +<file bash>
 +echo 1 > /etc/pure-ftpd/conf/TLS
 +</file>
 +Если же вы хотите разрешить только сессии TLS (без FTP), выполните:
 +<file bash>
 +echo 2 > /etc/pure-ftpd/conf/TLS
 +</file>
 +Чтобы запретить TLS совсем (разрешить только FTP), либо удалите файл /etc/pure-ftpd/conf/TLS, либо выполните:
 +<file bash>
 +echo 0 > /etc/pure-ftpd/conf/TLS
 +</file>
 +
 +Затем перезапустите службу Pure FTPd, чтобы изменения вступили в силу:
 +<file>
 +systemctl restart pure-ftpd
 +</file>
 +Теперь можно соединиться с сервером. Если соединение производится первый раз, вам будет предложено принять новый SSL-сертификат сервера.
 +====== Использование утилит Pure-FTPD ======
 +  * Добавить пользователя и установить для него пароль:
 +<file bash>
 +pure-pw useradd YourUser -u ftpusers -g ftpusers -d /home/YourDirFTP -c "John Smith"
 +</file>
 +  * Для применения изменений нужно обновить файл pureftpd.pdb командой. Чтобы избежать использования 'pure-pw mkdb' после каждого изменения данных, используйте опцию '-m' в командах модификации
 +<file bash>
 +pure-pw mkdb
 +</file>
 +  * Просмотр данных пользователя
 +<file bash>
 +pure-pw show YourLogin
 +</file>
 +  * Изменить пароль
 +<file bash>
 +pure-pw passwd YourLogin
 +</file>
 +  * Пример мониторинга Pure-FTPd, при помощи встроенной утилиты pure-ftpwho:
 +<file>
 ++------+---------+-------+------+-------------------------------------------+
 +| PID  |  Login  |For/Spd| What |                 File/IP                   |
 ++------+---------+-------+------+-------------------------------------------+
 +| 2356 | testftp | 00:00 | IDLE |                                           |
 +|  ''  |    ''     ''  |  ''  | ->             77.122.92.88.kha.volia.net |
 ++------+---------+-------+------+-------------------------------------------+
 +</file>
 +====== Дополнительные настройки Pure-FTPd ======
 +
 +  * **Umask**. Для параноика [[umask]] 177 077. The default are 133 (files are readable -but not writable- by other users) and 022 (same thing for directory, with the execute bit on). If new files should only be readable by the user, use 177:077. If you want uploaded files to be executable, use 022:022 (files will be readable by other people) or 077:077 (files will only be readable by their owner).<file bash>
 +echo '177 077' > /etc/pure-ftpd/conf/Umask
 +</file>
 +
 +  * **MaxLoad**. **Максимальная параллельная загрузка:**<file bash>
 +echo 4 > /etc/pure-ftpd/conf/MaxLoad
 +</file>
 +  * **DontResolve**. Записывать в лог IP, а не имя клиента. Это приведет к ускорению работы Pure-FTPd так как не будет использоваться [[DNS|DNS]].<file bash>
 +echo 'yes' > /etc/pure-ftpd/conf/DontResolve
 +</file>
 +<note important>Изменение этого параметра затронет лог-файл /var/log/syslog, а файл /var/log/auth.log не будет изменен, что важно при настройки [[Fail2ban|Fail2ban]]. Fail2ban по умолчанию просматривает файл auth.log.</note>
 +
 +  * **Bind изменить IP,port** Для того чтобы задать определенный IP и/или порт нужно создать файл Bind, в котором через запятую указать IP и порт. Можно задать пустые значение, в этом случае будут использованы значения по умолчанию:<file bash>
 +echo '10.26.95.227,21000' > /etc/pure-ftpd/conf/Bind
 +</file>
 +  * Приоритеты аутентификации<file bash>
 +# Пожалуйста, отметьте, что LDAPConfigFile, MySQLConfigFile,
 +# PAMAuthentication и UnixAuthentication могут использоваться только
 +# один раз, но они могут использоваться вместе. Например, если вы
 +# используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос
 +# к MySQL. Если в БД такой пользователь не найден, то пробуется 
 +# системный пользователь в /etc/passwd и /etc/shadow. Если SQL
 +# аутентификация неудачна по причине неправильного пароля, то происходит
 +# остановка дальнейшего поиска пользователя. Методы аутентификации
 +# будут использоваться в порядке в котором они заданы
 +</file>
 +  * **Запретить анонимный доступ** - echo yes > /etc/pure-ftpd/conf/NoAnonymous
 +  * **Более полный лог** - echo yes > /etc/pure-ftpd/conf/VerboseLog
 +  * **Показывать системные файлы (вида .имяфайла)** - echo yes > /etc/pure-ftpd/conf/DisplayDotFiles
 +  * **Время простою до отключения 15 минут** - echo 15 > /etc/pure-ftpd/conf/MaxIdleTime
 +
 +<panel type="primary" title="Читайте также">
 +  * [[Правила iptables для FTP]]
 +  * [[Fail2ban]] - защита от брутфорса портов FTP
 +</panel>
 +
 +
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!