Простой FTP с базой в MySQL на FreeBSD

Быстрая настройка 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 и коннектиться с заданным аккаунтом к искомой директории.
Можно так же расширить таблицу в базе данных до соответствующих полей на квоты и прочие прелести (там все довольно прозрачно), но для минимального
подъема демона это не требуется.

Поделиться

Опубликовать в Facebook
Опубликовать в LiveJournal

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>