Настройка Pure-FTPd

Домашняя страница Pure-FTPd.

Pure-FTPd — свободный FTP-сервер для операционных систем семейства UNIX, распространяется по лицензии BSD. Основное внимание уделяется безопасности и простоте настройки.

Функциональные возможности:

  • Встроенная поддержка UTF-8.
  • Поставляется с программой мониторинга pure-ftpwho, которая в реальном времени показывает кто скачивает/загружает файлы и с какой скоростью.
  • Возможен запуск pure-ftpwho как CGI приложения с возможностью генерации выходных данных в виде HTML или XML.
  • Сообщения сервера на данный момент переведены на 21 язык.
  • Создание виртуальных пользователей.
  • Задание индивидуальных квот, не связанных с системными, для пользователей (максимальное количество файлов, максимальный размер каталога, максимальная скорость скачивания/закачивания).
  • После загрузки файла на сервер возможен автоматический запуск внешних скриптов или программ (например, для проверки на вирусы, расчет MD5 хэшей файлов, отправка уведомлений о загрузке).
  • Запрет доступа к dot-файлам (имя которых начинается с точки, например, .ssh directories, .bash_history files, .rhosts).
  • Создание псевдонимов (алиасы) для директорий (т.е. работать как shortcuts).

CentOS:

yum install pure-ftpd

Debian, Ubuntu

apt install pure-ftpd

Запустим установленный, но еще не защищенный, FTP-сервер.

systemctl start pure-ftpd;
systemctl enable pure-ftpd;

На этом этапе сервер Pure-FTPd запущен и готов к работе. Проверим работу FPT сервера на localhost:

$ 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):
У PureFTPd в Ubuntu не используется файл конфигурации pure-ftpd.conf - все настройки хранятся в директории /etc/pure-ftpd/conf/ в виде отдельных файлов с именем параметра. То есть для изменения настроек сервера нужно создать файл с названием параметра и значением внутри.
  • Конфигурационные файлы и директории:
    /etc/default/pure-ftpd-common
    /etc/pure-ftpd
  • Включим chroot-jail. Можно или запустить PureFTPd с ключом -A или задать параметр.
    echo yes > /etc/pure-ftpd/conf/ChrootEveryone
  • Поскольку мы будем настраивать авторизацию через PureDB, надо запретить PAM:
    echo no > /etc/pure-ftpd/conf/PAMAuthentication

Механизм Virtual Users в Pure-FTPD (README.Virtual-Users), представляет из себя следующее - в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным системным пользователем. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и прочее.

Включим авторизацию из база данных пользователей PureDB (создадим символическую ссылку), по умолчанию была настроена авторизация Unix(no - выключена) и PAM (yes - включена). При аутентификации важен порядок загрузки, потому добавим цифру 60 в название создаваемой символической ссылки, чтобы проверка пользователя начиналась именно с проверки из PureDB

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

В моем случае запущен Nginx. Чтобы выяснить от какого пользователя он запускается, можно посмотреть в его конфигурационном файле или выполнить команду:

ps -ef | grep nginx

Как мы видим он у меня запущен от пользователя www-data (также часто встречается запуск от пользователя nginx). Теперь выясним uid нашего пользователя www-data, введя команду

id www-data
 
uid=33(www-data) gid=33(www-data) groups=33(www-data)

В /etc/pure-ftpd/conf/MinUID изменим значение 1000 на uid пользователя www-data, то есть 33. Если этого не сделать вы получите ошибку, при попытке подключиться к FTP серверу: 530 Sorry, but I can't trust you.

Все операции над пользователями FTP сервера осуществляться с помощью утилиты pure-pw. Работа с виртуальными пользователями происходит в два этапа:

  1. Создание файла со списком пользователей и их параметрами (по умолчанию '/etc/pureftpd.passwd'), на этом этапе вы также можете вносить изменения в список аккаунтов
  2. Создание на основе файла списка бинарного файла, с которым в конечном итоге и будет работать сервер (по умолчанию /etc/pure-ftpd/pureftpd.pdb);
  • Создадим нашего первого пользователя tester
    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

Подключимся, например при помощи ftp- клиента FileZilla и создадим тестовые файл и директорию, чтобы проверить какие будут выставлены права

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

Все! Настройка FTP сервера завершена.

Современные реалии требуют всё шифровать. Давайте и мы сделаем протокол FTP более защищенным. И обязательно запищим пароль от FTP сервера на листочке и приклеим к монитору (шутка :-))!

Преамбула, такова, что протокол FTP передает все ПАРОЛИ и данные в открытом виде (в текстовом виде). То есть любой сниффер позволяет прочитать ваш логин и пароль. А мы возьмем и зашифруем и логин и пароль!

apt install openssl

Итак, для начала нам нужно создать SSL сертификат и подключить его к нашему серверу Pure-FTPd. По соглашению, будем хранить сертификаты в /etc/ssl/private. Вы можете выбрать произвольную директорию.

openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem -days 3650

Запущенная команда задаст несколько вопросов, ответьте на них в произвольной форме.

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

Зададим права на файл сертификата

chmod 600 /etc/ssl/private/pure-ftpd.pem

Выберем один из трех режимов работы для FTP сервера. Если вы хотите разрешить сессии как FTP, так и TLS, выполните команду:

echo 1 > /etc/pure-ftpd/conf/TLS

Если же вы хотите разрешить только сессии TLS (без FTP), выполните:

echo 2 > /etc/pure-ftpd/conf/TLS

Чтобы запретить TLS совсем (разрешить только FTP), либо удалите файл /etc/pure-ftpd/conf/TLS, либо выполните:

echo 0 > /etc/pure-ftpd/conf/TLS

Затем перезапустите службу Pure FTPd, чтобы изменения вступили в силу:

systemctl restart pure-ftpd

Теперь можно соединиться с сервером. Если соединение производится первый раз, вам будет предложено принять новый SSL-сертификат сервера.

Использование утилит Pure-FTPD

  • Добавить пользователя и установить для него пароль:
pure-pw useradd YourUser -u ftpusers -g ftpusers -d /home/YourDirFTP -c "John Smith"
  • Для применения изменений нужно обновить файл pureftpd.pdb командой. Чтобы избежать использования 'pure-pw mkdb' после каждого изменения данных, используйте опцию '-m' в командах модификации
pure-pw mkdb
  • Просмотр данных пользователя
pure-pw show YourLogin
  • Изменить пароль
pure-pw passwd YourLogin
  • Пример мониторинга Pure-FTPd, при помощи встроенной утилиты pure-ftpwho:
+------+---------+-------+------+-------------------------------------------+
| PID  |  Login  |For/Spd| What |                 File/IP                   |
+------+---------+-------+------+-------------------------------------------+
| 2356 | testftp | 00:00 | IDLE |                                           |
|  ''  |    ''   |   ''  |  ''  | ->             77.122.92.88.kha.volia.net |
+------+---------+-------+------+-------------------------------------------+

Дополнительные настройки 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).
    echo '177 077' > /etc/pure-ftpd/conf/Umask
  • MaxLoad. Максимальная параллельная загрузка:
    echo 4 > /etc/pure-ftpd/conf/MaxLoad
  • DontResolve. Записывать в лог IP, а не имя клиента. Это приведет к ускорению работы Pure-FTPd так как не будет использоваться DNS.
    echo 'yes' > /etc/pure-ftpd/conf/DontResolve
Изменение этого параметра затронет лог-файл /var/log/syslog, а файл /var/log/auth.log не будет изменен, что важно при настройки Fail2ban. Fail2ban по умолчанию просматривает файл auth.log.
  • Bind изменить IP,port Для того чтобы задать определенный IP и/или порт нужно создать файл Bind, в котором через запятую указать IP и порт. Можно задать пустые значение, в этом случае будут использованы значения по умолчанию:
    echo '10.26.95.227,21000' > /etc/pure-ftpd/conf/Bind
  • Приоритеты аутентификации
    # Пожалуйста, отметьте, что LDAPConfigFile, MySQLConfigFile,
    # PAMAuthentication и UnixAuthentication могут использоваться только
    # один раз, но они могут использоваться вместе. Например, если вы
    # используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос
    # к MySQL. Если в БД такой пользователь не найден, то пробуется 
    # системный пользователь в /etc/passwd и /etc/shadow. Если SQL
    # аутентификация неудачна по причине неправильного пароля, то происходит
    # остановка дальнейшего поиска пользователя. Методы аутентификации
    # будут использоваться в порядке в котором они заданы
  • Запретить анонимный доступ - 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

Читайте также

PQ VPS сервера в 28+ странах.