Pure-FTPd

Homepage: Pure-FTPd

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

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

Создание пользователей

$ groupadd ftp
$ useradd -s /bin/false -d /bin/null -c "pureftpd user" -g ftp ftp

Установка SSL сертификата для TLS

$ mkdir -p /etc/ssl/private/
$ openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
$ chmod 600 /etc/ssl/private/*.pem

Настройка

Устанавливаем пакет «pure-ftpd-mysql». Настройка происходит с помощью индивидуальных файлов в /etc/pure-ftpd/conf. Название каждого файла отражает параметр, настройки которого он представляет. В содержимом файла представлены необходимые значения.

echo yes > /etc/pure-ftpd/conf/ChrootEveryone
echo yes > /etc/pure-ftpd/conf/CreateHomeDir
echo 50 > /etc/pure-ftpd/conf/MaxClientsNumber
echo 5  > /etc/pure-ftpd/conf/MaxClientsPerIP
echo 95 > /etc/pure-ftpd/conf/MaxDiskUsage
echo 1 > /etc/pure-ftpd/conf/TLS
echo 117 007 > /etc/pure-ftpd/conf/Umask
echo no > /etc/pure-ftpd/conf/UnixAuthentication
echo no > /etc/pure-ftpd/conf/PAMAuthentication
echo clf:/var/log/pure-ftpd/transfer.log > /etc/pure-ftpd/conf/AltLog
echo 1000 > /etc/pure-ftpd/conf/MinUID
echo /etc/pure-ftpd/db/mysql.conf > /etc/pure-ftpd/conf/MySQLConfigFile
echo yes > /etc/pure-ftpd/conf/NoAnonymous
echo /etc/pure-ftpd/pureftpd.pdb > /etc/pure-ftpd/conf/PureDB
echo no > /etc/pure-ftpd/conf/DontResolve

Включить логирование

$ echo 'ftp' > /etc/pure-ftpd/conf/SyslogFacility
$ echo 'yes' > /etc/pure-ftpd/conf/VerboseLog

Подключение MySQL

Самым удобным способом хранения и конфигурирования FTP является БД MySql. Для подключения хранилища достаточно настроить MySQLConfigFile.

PureFTP Complete Upload Script

После получения полностью залитого файла, скрипт переименует его в ended.<uploaded_filename>.

Конфигурция

Конфигурация осуществляется через базовый конфигурационный файл /etc/default/pure-ftpd-common

Включает испльзование скрипта

$ sudo echo "yes" > /etc/pure-ftpd/conf/CallUploadScript

Файл скрипта

#!/bin/sh
touch "$1.complete"

или

#!/bin/bash
fullpath=$1
filename=$(basename "$1")
dirname=${fullpath%/*}
mv "$fullpath" "$dirname/ended.$filename"
chmod 664 "$dirname/ended.$filename"
chown :www-data "$dirname/ended.$filename"

Настройка pure-ftpd-common

nano /etc/default/pure-ftpd-common

STANDALONE_OR_INETD=standalone
VIRTUALCHROOT=false
UPLOADUID=
UPLOADGID=
UPLOADSCRIPT=/etc/pure-ftpd/uploadscript.sh
UPLOADUID = 1002
UPLOADGID = 1002
Относятся только к UPLOADSCRIPT.
Пример: /usr/sbin/pure-uploadscript -r /etc/pure-ftpd/uploadscript.sh -B -u 1002 -g 1002

Проверка

$ ps aux | grep pure-uploadscript
ftpuser 18671 0.0 0.0 11912 672 ? Ss 19:40 0:00 /usr/sbin/pure-uploadscript -r <upload script path here> -B -u 1021 -g 1022