Настройка PROFTPD + MySQL
Не так давно понадобилась задача хранить FTP пользователей прямо в базе MySQL.
Немного подумав над этой темой у меня всё таки получилось это сделать.
Для начала установим мод для proftpd
yum install proftpd-mysql
Далее нужно база и таблица в MySQL. Ниже приведу только создание таблицы и её структуру.
CREATE TABLE `ftp` (
`username` varchar(32) NOT NULL,
`password` char(41) NOT NULL,
`uid` int(11) NOT NULL,
`gid` int(11) NOT NULL,
`homedir` varchar(255) NOT NULL,
`shell` varchar(255) NOT NULL DEFAULT '/sbin/nologin '
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Теперь самое интересно — настройка конфигов 🙂
Работаем с файлом /etc/proftpd.conf
Строчку
AuthOrder mod_auth_pam.c* mod_auth_unix.c
меняем на
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
Include /etc/proftpd.d/sql.conf
AuthOrder mod_sql.c
Тут мы сразу подключаем мод для proftpd, подключаем конфиги для sql которые мы создадим и заставляем proftpd использовать авторизацию мода
Создаём файл /etc/proftpd.d/sql.conf и заполняем его подобным содержимым:
SQLBackend mysql
SQLEngine on
SQLAuthTypes Crypt
SQLConnectInfo {username}@{host} {basename} {password}
SQLUserInfo ftp username password uid gid homedir shell
SQLAuthenticate users*
SQLMinUserUID 33
SQLMinUserGID 33
SQLLogFile /var/log/proftpd/sql.log
Обращаем внимание на строчку SQLConnectInfo. Тут нужно подставить свои значение:
- {username} — имя пользователя от MySQL сервера
- {host} — хост базы данных (обычно это localhost)
- {basename} — имя вашей базы данных где находится таблица ftp
- {password} — пароль от пользователя базы данных
На этом всё, можем перезапускать свой proftpd и и радоваться жизни.
# systemctl restart proftpd
Ага чуть не забыл, пользователя можно добавить SQL запросом:
INSERT INTO `ftp` SET `username`='{username}', `password`=ENCRYPT('{password}'), `uid`='{uid}', `gid`='{gid}', `homedir`='{dir}';
- {username} — имя FTP пользователя
- {password} — пароль пользователя
- {uid} и {gid} — идентификаторы пользователя и группы от системного пользователя от которого в системе будет выступать текущий FTP пользователя
- {dir} — домашняя директория пользователя
После добавление пользователя не нужно перезапускать proftpd