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

Примеры

Добавить пользователя и установить для него пароль:

# pure-pw useradd YourUser -u ftpusers -g ftpusers -d /home/YourDirFTP -c Ivanov -y 4

Доступ к хостингу с полным доступом

# pure-pw useradd YourUser -u ftpusers -g www-data -d /var/www/YourDomen.ua -c "Ivanov Ivan" -y 4
# chown -R ftpusers:www-data
или
# pure-pw useradd YourUser -u www-data -g www-data -d /var/www/YourDomen.ua -c "Ivanov Ivan" -y 4

Для применения изменений нужно обновить файл pureftpd.pdb командой. Чтобы избежать использования 'pure-pw mkdb' после каждого изменения данных, используйте опцию '-m' в командах модификации

# pure-pw mkdb

Просмотр данных пользователя

pure-pw show YourLogin

Изменить пароль

pure-pw passwd YourLogin

Использование Pure-FTPd

Установка

# aptitude install pure-ftpd

Конфигурационные файлы:

/etc/default/pure-ftpd-common
/etc/pure-ftpd

У PureFTPd в Ubuntu не используется файл конфигурации pure-ftpd.conf - все настройки хранятся в директории /etc/pure-ftpd/conf/ в виде отдельных файлов с именем параметра и его значением внутри.

Включим авторизацию PureDB (создадим символическую ссылку), по умолчанию была включена авторизация Unix и PAM

# ls -l auth/
lrwxrwxrwx 1 root root 26 2011-03-23 12:54 65unix -> ../conf/UnixAuthentication
lrwxrwxrwx 1 root root 25 2011-03-23 12:54 70pam -> ../conf/PAMAuthentication
# ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/67PureDB

Механизм Virtual Users, который есть в Pure FTPD, представляет из себя следующее - в системе заводится системный пользователь, который ассоциируется с виртуальным пользователем. Можно ассоциировать несколько виртуальных пользователей с реальным аккаунтом. Для виртуальных пользователей назначается свой каталог, можно назначить ему так же квоты и пр. Управление виртуальными пользователями осуществляется с помощью программы pure-pw, параметры пользователей хранятся в /usr/local/etc/pureftpd.pdb. У нас имеется системный пользователь portal , создадим для него одноименного виртуального пользователя.

# pure-pw useradd portal -u portal -g portal -d /home/portal/

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

Создание файла со списком аккаунтов пользователей и их параметрами (по умолчанию '/etc/pureftpd.passwd'), на этом этапе вы также можете вносить изменения в список аккаунтов

Создание на основе файла списка бинарного файла, с которым в конечном итоге и будет работать сервер (по умолчанию '/etc/pureftpd.pdb');

Создание файла аккаунтов. Каждая запись файла виртуальных аккаунтов имеет следующий формат:

account:pass:uid:gid:name:dir:ul bw:
dl bw:ul ratio:dl ratio:max con:
files quota:size quota:authorized local IPs:refused
local IPs:authorized client IPs:refused client IPs:time

Рассмотрим значения полей записи:

'account' -- имя аккаунта;
'pass' -- пароль пользователя в зашифрованном виде;
'uid' -- uid пользователя, с правами которого будет работать виртуальный пользователь;
'gid'	-- gid пользователя, с правами которого будет работать виртуальный пользователь;
'name' -- полное имя пользователя аккаунта;
'dir'	-- директория пользователя аккаунта;
'ul bw' -- скорость upload для данного аккаунта;
'dl bw' -- скорость download для данного аккаунта;
'ul ratio' -- соотношение upload к download;
'dl ratio' -- соотношение download к upload;
'max con' -- максимальное число одновременных подключений для данного аккаунта;
'files quota' -- квота на количество файлов в директории пользователя;
'size quota' -- квота на суммарный размер файлов в директории пользователя;
'auth local IPs' -- указывает ip адрес интерфейса сервера, на который пользователь может подключаться
(при наличии нескольких сетевых интерфейсов на сервере);
'ref local IPs' -- указывает ip адрес интерфейса сервера, на который пользователь подключаться не может;
'auth client IPs' -- ip адреса, с которых пользователю разрешено подключаться;
'ref client IPs' -- ip адреса, с которых пользователя запрещено подключаться;
'time' -- временной промежуток, в течение которого пользователь может получать доступ к аккаунту.

Допускается пустое значение всех полей кроме 'account', 'pass', 'uid', 'gid' и 'dir'.

Добавление нового пользователя

Добавление аккаунта осуществляется с помощью утилиты 'pure-pw'. Синтаксис команды следующий:

pure-pw useradd login [-f file]
-u uid [-g gid]
-D/-d dir
[-c name]
[-t num] [-T num]
[-n num] [-N num]
[-q num] [-Q num]
[-r ip,..]
[-R ip,..]
[-i ip,..]
[-I ip,..]
[-y num]
[-z hhmm-hhmm] [-m]

Рассмотрим значения используемых опций:

'login'	-- имя добавляемого аккаунта;
'-f file'	-- задает имя файла списка аккаунтов, отличное от значения
по умолчанию, т.е. от '/etc/pureftpd.passwd'.
'-u uid'	-- задает uid пользователя;
'-g gid'	-- задает gid пользователя;
'-D/-d dir'	-- задает директорию для пользователя аккаунта,
при использовании '-d' автоматически назначается chroot в этой директории,
при использовании '-D' chroot не будет включен;
При запуске сервера с опцией '-j' директории пользователей будут создаваться
автоматически при первом их подключении к системе,
в противном случае, вы сами должны будете создать указанную директорию;
'-c name'	-- задает полное имя пользователя аккаунта;
'-t num'	-- задает скорость download (в Kb/s);
'-T num'	-- задает скорость upload (в Kb/s);
'-n num'	-- задает ограничение на количество файлов в директории пользователя;
'-N num'	-- задает ограничение на размер файлов в директории пользователя (в Mb);
'-q num'	-- задает соотношение upload к download;
'-Q num'	-- задает соотношение download к upload;
'-r ip'	-- задает ip адреса, с которых пользователю разрешено подключаться, также можно задавать
целые подсети, используя CIDR маску;
'-R ip'	-- задает ip адреса, с которых пользователю запрещено подключаться;
'-i ip'	-- при нескольких интерфейсах на сервере позволяет указать ip адрес
того интерфейса, на который данный пользователь может подключаться;
'-I ip'	-- при нескольких интерфейсах на сервере позволяет указать ip адрес
того интерфейса, на который пользователь подключаться не может;
'-y num'	-- задает количество одновременных подключений для аккаунта;
'-z hhmm-hhmm' -- задает временной промежуток, в течение которого пользователь может
получать доступ к аккаунту, например '-z 1830-2240' задает временной
промежуток для доступа к аккаунту с 18:30 до 22:40, причем если пользователь
подключен к серверу во время истечения указанного значения, соединение не будет
прервано.
'-m' -- использовании этой опции совместно с остальными позволяет автоматически
запустить 'pure-pw mkdb' и зафиксировать внесенные изменения в файле
'/etc/pureftpd.pdb'. Работа с 'pure-pw mkdb' будет рассмотрена чуть позже.

Изменение параметров аккаунта пользователя.

Изменение параметров аккаунта также осуществляется с помощью pure-pw:

'pure-pw usermod login [-f passwd file] attr value [attr value ...] [-m]'

'attr value' в данном случае – это те же параметры, которые используются при добавлении нового аккаунта.

Не забывайте использовать параметр '-f passwd file' в том случае, если список аккаунтов изначально создавался в файле, отличном от '/etc/pureftpd.passwd'.

530 Sorry, but I can't trust you

Для устранения этой ошибки нужно в /etc/pure-ftpd/conf/MinUID изменить значение 1000 на 33 этим мы разрешим системных пользователей начиная с 33, в моем случае это пользователь www-data.

DontResolve

Записывать в лог IP, а не имя клиента. Это приведет к ускорению работы Pure-FTPd так как не будет использоваться DNS.

echo 'yes' > /etc/pure-ftpd/conf/DontResolve
Изменение этого параметра в Ubuntu затронет лог-файл /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

Ссылки

Pure-FTPd

Правила iptables для FTP

README.Virtual-Users

Хранение аккаунтов pure-ftpd в файлах формата puredb

Настройка PureFtpd + MySql

apt-get install pure-ftpd-common pure-ftpd-mysql

http://download.pureftpd.org/pure-ftpd/doc/README

Создание БД

db.sql - Дамп SQL

Добавление пользователя

adduser site.ru

INSERT INTO users VALUES ('site.ru',MD5('tmppasswd'),1000, 1100, '/var/www/nginx-sites/site.ru', 100, 50, 75, 75, '*', 'Ftp user (for example)', '1', 0, 0);

mkdir /var/www/nginx-sites/site.ru

chown -R site.ru:site.ru /var/www/nginx-sites/site.ru/*

Где пользоватеь:

site.ru - 1000

Где группа:

site.ru - 1100

PureFTPd with MySQL

/etc/pure-ftpd/db/mysql.conf

Настройка

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

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

PureFTP Complete Upload Script

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

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

или

#!/bin/bash
fullpath=$1
filename=$(basename "$1")
dirname=${fullpath%/*}
mv "$fullpath" "$dirname/ended.$filename"

Конфигурция

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

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

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

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

STANDALONE_OR_INETD=standalone
VIRTUALCHROOT=false
UPLOADUID=
UPLOADGID=
UPLOADSCRIPT=/etc/pure-ftpd/uploadscript.sh

Проверка

$ 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