{{tag>networks networking network pureftpd}}

====== Pure-FTPd ======

Homepage: [[http://www.pureftpd.org|Pure-FTPd]]

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

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

<note tip>Для изменения настроек сервера нужно создать файл с названием параметра, например чтобы задать порты для пассивного режима: Правила iptables для FTP</note>

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

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

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

<code>
$ 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
</code>

==== Настройка ====

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

<code>
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
</code>

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

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

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

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

  * echo /etc/pure-ftpd/db/mysql.conf > /etc/pure-ftpd/conf/MySQLConfigFile
  * [[pureftpd:db]]
  * [[:/etc/pure-ftpd/db/mysql.conf|]]


==== PureFTP Complete Upload Script ====

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

=== Конфигурция ===

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

Включает испльзование скрипта
<code>
$ sudo echo "yes" > /etc/pure-ftpd/conf/CallUploadScript
</code>

=== Файл скрипта ===

<code>
#!/bin/sh
touch "$1.complete"
</code>

или

<code>
#!/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"
</code>

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

nano /etc/default/pure-ftpd-common
<code>
STANDALONE_OR_INETD=standalone
VIRTUALCHROOT=false
UPLOADUID=
UPLOADGID=
UPLOADSCRIPT=/etc/pure-ftpd/uploadscript.sh
</code>

<note important>
UPLOADUID = 1002\\ 
UPLOADGID = 1002\\ 
Относятся только к UPLOADSCRIPT.\\
Пример: /usr/sbin/pure-uploadscript -r /etc/pure-ftpd/uploadscript.sh -B -u 1002 -g 1002\\
</note>

==== Проверка ====

<code>
$ 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
</code>