[[ Настройка авторизации: БД в MySQL ]]

Настройка авторизации: БД в 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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
223​ +13 =
 
howto/proftpd/auth_sql.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki