Настройка pure-ftpd для работы с mysql (mysql ftp auth)
Настройка pure-ftpd для работы с mysql (mysql ftp auth)
Pure-ftpd позволяет хранить информацию о пользователях в mysql базе.
Хранение данных о пользователях в mysql обладает следующими преимуществами:
1. Позволяет избежать использования системных аккаунтов для ftp-доступа; 2. Позволяет упростить процедуру администрирования ftp-аккаунтов; 3. Позволяет использовать централизованную базу для нескольких ftp-серверов;Для включения поддержки mysql в pure-ftpd вам необходимы установленные библиотеки mysql-клиента.
Запуск скрипта configure в таком случае будет выглядеть так:
'./configure --with-mysql'
Если библиотеки находятся в нестандартной директории, укажите эту директорию:
'./configure --with-mysq=/path/to/mysqllib/'
Также полезно будет использовать следующие опции скрипта configure:
'--with-peruserlimits' -- позволяет задавать ограничения для каждого пользователя; '--with-throttling' -- позволяет установить ограничение скорости работы с ftp для пользователей; '--with-ratios' -- позволяет установить соотношение download/upload для пользователей; '--with-quotas' -- позволяет установить квоту дискового пространства для пользователя;
Параметры подключения к базе
Далее необходимо создать файл конфигурации подключения к mysql серверу (pureftpd-mysql.conf):
MYSQLServer localhost # хост сервера;
MYSQLPort 3306 # порт сервера (если используется);
MYSQLSocket /tmp/mysql.sock # сокет сервера (если используется);
MYSQLUser ftp # логин для подключения к базе;
MYSQLPassword ftp # пароль для подключения к базе;
MYSQLDatabase ftp # имя базы, где будет хранится информация о пользователях;
MYSQLCrypt cleartext # тип хранения пароля пользователя в базе;
MySQLTransactions On # позволяет включить транзакции;
Далее идет описание запросов для получения данных о пользователях сервером:
MYSQLGetPW SELECT Password FROM users WHERE User="\L" # запрос на получение пароля пользователя;
MYSQLGetUID SELECT Uid FROM users WHERE User="\L" # запрос на получения uid пользователя;
MYSQLGetGID SELECT Gid FROM users WHERE User="\L" # запрос на получение gid пользователя;
Вместо параметров MYSQLGetUID и MYSQLGetGID можно использовать следующие опции:
MYSQLDefaultUID 1000 MYSQLDefaultGID 1000 Они позволяют задать значения uid и gid для всех пользователей базы;
Поясню, что uid и gid, это uid и gid системного пользователя, с правами которого пользователи, хранящиеся в базе, будут получать доступ к своим директориям.
MYSQLGetDir SELECT Dir FROM users WHERE User="\L" # запрос на получение директории пользователя;
Далее идут опции, необязательные для включения в файл конфигурации. Используйте их в том случае, если вы хотите использовать возможность, предоставляемую этой опцией.
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" # запрос параметра квоты для данного пользователя;
# запросы на получение параметров для установления соотношение download/upload; MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"
# запросы на получение параметров ограничения скорости работы с ftp для пользователей; MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
Под "\L" в данном случае подразумевается логин пользователя, для которого сервер получает данные.
В запросах также можно использовать следующие переменные:
"\L" -- логин пользователя; "\I" -- IP адрес сервера, куда подключается пользователь; "\P" -- порт, на который подключается пользователь; "\R" -- IP адрес, с которого подключается пользователь; "\D" -- IPv4 адрес, с которого подключается пользователь (long decimal number);
Использование переменной "\I" позволяет установить те сервера, к которым может подключаться данный пользователь, при хранении информации в базе для нескольких серверов одновременно;
В этом случае запрос будет выглядеть так: SELECT Password FROM users WHERE User="\L" AND ServerIP="\I", где ServerIP -- поле, содержащее IP адрес сервера;
Использовании переменной "\R" позволяет устанановить IP, с которого может подключаться пользователь;
В этом случае запрос будет выглядеть так:
SELECT Password FROM users WHERE User="\L" AND UserIP="\R", где UserIP -- поле, содержащее IP адрес пользователя;
Структура таблицы с пользователями
Создадим базу "ftp":
mysql> CREATE DATABASE ftp;
Назначим права на базу для пользователя "ftp" с паролем "ftp":
mysql> GRANT ALL PRIVILEGES ON ftp.* TO ftp@localhost IDENTIFIED BY 'ftp';
В простейшем случае нам хватит одной таблицы "users", которая имеет следующую структуру:
mysql> CREATE TABLE users (
User varchar(16) NOT NULL default '', -- логин пользователя;
Password varchar(64) NOT NULL default '', -- пароль пользователя;
Uid int(11) NOT NULL default '10000', -- uid пользователя;
Gid int(11) NOT NULL default '10000', -- gid пользователя;
Dir varchar(128) NOT NULL default '', -- директория пользователя;
UserIP varchar(15) NOT NULL default '', -- ip, с которого может подключаться пользователь;
ServerIP varchar(15) NOT NULL default '', -- ip сервера, на который может подключаться пользователь;
QuotaSize int(11) NOT NULL default '5', -- квота пользователя (в MB);
DLBandwidth int(11) NOT NULL default '128', -- ограничение скорости на download (в Kb/s);
DLBandwidth int(11) NOT NULL default '128', -- ограничение скорости на upload (в Kb/s);
ULRatio int(11) NOT NULL default '1',
DLRatio int(11) NOT NULL default '1',
PRIMARY KEY (User)
);
Ну вот, база готова, осталось внести в нее данные и запустить сервер:
'/usr/local/sbin/pure-ftpd -14ABEH -l mysql:/home/ftp-mysql.conf'
Как видите, после параматра "-l" указываем путь к файлу с настройками mysql доступа, т.е. к pureftpd-mysql.conf. Для анононимного доступа достаточно завести системного пользователя "ftp" и назначить ему директорию.
Источник::: http://www.opennet.ru/base/net/pure_ftpd_mysql.txt.html