Настройка 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