Настройка авторизации: БД в MySQL
mod_sql - позволяет использовать БД (MySQL или PostgreSQL) для хранения информации о пользователях (и не только).
Настройка proftpd
Модифицируем конфигурационный файл:
proftpd.conf
... # Подключение файла конфигурации для SQL Include /etc/proftpd/sql.conf AuthOrder mod_sql.c RequireValidShell off ...
Настройки mod_sql:
/etc/proftpd/sql.conf
<IfModule mod_sql.c> #SQLBackend mysql ## Режим работы модуля # on=auth+log # auth - используется только для аутентификации # log - используется только для логирования # default = on SQLEngine on ## Режим аутентификации # on = users+groups # users - авторизация пользователей без использования групп # default = on SQLAuthenticate users ## Метод аутентификации # Plaintext - пароль храниться открытым текстом в бд # default = none SQLAuthTypes Plaintext ## Данные для подключения к БД SQLConnectInfo proftpd@localhost proftpd db_passwd ## Информация о таблице пользователей # SQLUserInfo `имя таблицы` `поле с именем пользователя` `поле с паролем` ... # default = users userid passwd uid gid homedir shell SQLUserInfo users username password uid gid home shell ## Информация о таблице групп #SQLGroupInfo groups groupname gid members ## Минимальный UID # default = 999 #SQLMinUserUID 999 ## Минимальный GID # default = 999 #SQLMinUserGID 999 </IfModule>
Настройка MySQL
Далее в MySQL создадим БД с именем proftpd, пользователя proftpd со всеми правами доступа к этой БД.
Используем файл дампа для создание таблицы users
users.sql
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for users -- ---------------------------- CREATE TABLE `users` ( `key` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(30) NOT NULL, `password` VARCHAR(250) NOT NULL, `uid` INT(11) NOT NULL, `gid` INT(11) NOT NULL DEFAULT '65533', `home` VARCHAR(250) NOT NULL, `shell` VARCHAR(250) NOT NULL DEFAULT '/bin/false', PRIMARY KEY (`key`), UNIQUE KEY `unameindx` (`username`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
mysql -u proftpd -p proftpd < users.sql
Немного комментариев : key - ключевое поле; username - только уникальные имена, gid - по умолчанию id группы nogroup и shell - по умолчанию /bin/false
Отметим, что допускается несколько пользователей с одинаковыми uid.
Все поля NOT NULL
Теперь добавляем пользователей в таблицу БД и все должно работать.
Пример запроса
INSERT INTO `proftpd`.`users` (`username` , `password` , `uid` , `home`) VALUES ('test', 'PaSSword' , '1000', '/home/test' );
Шифруем пароли
Шифруем пароли хранящиеся в БД
Настройки mod_sql:
sql.conf
... SQLAuthTypes Crypt
А для того что-бы записывать в БД пароль в зашифрованном виде будем использовать функцию ENCRYPT().
Добавление пользователя
INSERT INTO `proftpd`.`users` (`username` , `password` , `uid` , `home`) VALUES ('test' , ENCRYPT( 'PaSSword' ) , '1000' , '/home/test' );
Смена пароля
UPDATE `proftpd`.`users` SET `password`=ENCRYPT('123') WHERE username = "user";
Использование md5 или sha1 немного 'геморройное'
http://www.proftpd.org/docs/howto/SQL.html
Обсуждение