Быстрая настройка PureFTPd на FreeBSD.
На mysql создаем базу ftp на 4 поля
User varchar(16) ключ
Password varchar(16)
Dir varchar(32)
Uid int(11)
Gid int(11)
создаем пользователя ftp с правами чтения на базу ftp
устанавливаем порт pure-ftpd
/usr/ports/ftp/pure-ftpd
make
выбираем опции
MySQL
PAM
SENDFILE
make install
в /etc/rc.conf добавляем
pureftpd_enable="YES"
если версия freebsd до 5.х то в /usr/local/etc/rc.d/pure-ftpd.sh
правим строчку
etc/rc.subr
на
. "/usr/local/etc/rc.subr"
в противном случае демон не запустится и выдаст ошибку:
# ./pure-ftpd.sh start
.: Can't open etc/rc.subr: No such file or directory
Если версия FreeBSD выше 5 то правка не обязательна.
Правим конфигурационные файлы, их понадобится два (в листинге приведен минимальный набор параметров для запуска демона):
Файл /usr/local/etc/pure-ftpd.conf
он должен содержать такие инструкции:
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles no
AnonymousOnly no
NoAnonymous no
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
LimitRecursion 10000 16
AnonymousCanCreateDirs no
MaxLoad 4
PassivePortRange 30000 40000
AntiWarez yes
Bind YYY.YYY.YYY.YYY,21
Umask 133:022
MinUID 80
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
MaxDiskUsage 99
CustomerProof yes
Где YYY.YYY.YYY.YYY - адрес где демон будет слушать, 21 - порт по умолчанию (можно заменить на любой)
MinUID - минимальное значение UID которе будет пропускаться демоном. Рекомендуется выставлять то значение, с которого начинаются
системные пользователи, которые будут работать с ftp.
PassivePortRange - диапазон портов для пассивного режима (полезно выставить ограниченный диапазон для организации открытия портов на firewall)
Остальные параметры совершенно прозрачны и пояснений не требуют.
Файл /usr/local/etc/pureftpd-mysql.conf
MYSQLServer localhost
MYSQLPort 3306
MYSQLUser ftp
MYSQLPassword ftp
MYSQLDatabase ftp
MYSQLCrypt cleartext
MYSQLGetPW SELECT Password FROM Users WHERE User="\L"
MYSQLGetDir SELECT Dir FROM Users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM Users WHERE User="\L"
MYSQLGetGID SELECT Gid FROM Users WHERE User="\L"
При условии что наш MySQL сервер слушает localhost на 3306 порту. Если иначе - исправляем на свои значения.
Создаем в базе данных пользователя с логином паролем и его корневой директорией, задаем ему uid и gid 80 (можно другие, но выше 80 в нашем случе.
Я делал 80 так как нужны были фтп доступы к веб директориям Apache, чтобы не приходилось менять владельцев после залива по фтп контента).
Все. можно запускать pure-ftpd и коннектиться с заданным аккаунтом к искомой директории.
Можно так же расширить таблицу в базе данных до соответствующих полей на квоты и прочие прелести (там все довольно прозрачно), но для минимального
подъема демона это не требуется.