ProFTPD и MySQL

Через FTP мы можем проверять пользователей, хранящихся в базе данных MySQL, PostgreSQL, ODBC или SQLite. В этом посте мы настроим proftpd — ftp-сервер, работающий под управлением Debian, который позволит выполнять аутентификацию виртуальных пользователей, хранящихся в базе данных MySQL.

Сначала нам нужно установить базовый пакет proftpd, сервер MySQL и модуль proftpd, чтобы разрешить подключение к базе данных:

# aptitude install proftpd mysql-server proftpd-mod-mysql

Теперь нам нужно подключиться к базе данных:

# mysql -u root -p

Создайте новую базу данных с именем ftpusers:

mysql> create database proftpd;

Предоставьте все разрешения пользователю proftpd:

mysql> grant all on proftpd.* to proftpd@localhost identified by "PASSWORD";

Создайте таблицу пользователей и таблицу групп и вставьте тестовых пользователей:

CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userid` varchar(32) NOT NULL DEFAULT '',
`passwd` varchar(32) NOT NULL DEFAULT '',
`uid` smallint(6) NOT NULL DEFAULT 2001,
`gid` smallint(6) NOT NULL DEFAULT 2001,
`homedir` varchar(255) NOT NULL DEFAULT '',
`shell` varchar(16) NOT NULL DEFAULT '/bin/false',
`count` int(11) NOT NULL DEFAULT 0,
`accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='ProFTP user table'; 

CREATE TABLE `ftpgroup` (

`groupname` varchar(16) NOT NULL DEFAULT '',

`gid` smallint(6) NOT NULL DEFAULT 2001,

`members` varchar(16) NOT NULL DEFAULT '',

KEY `groupname` (`groupname`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='ProFTP group table';

 

INSERT INTO proftpd.ftpgroup

(groupname, gid, members)

VALUES('ftpgroup', 2001, 'ftpuser');

 

INSERT INTO proftpd.ftpuser

(id, userid, passwd, uid, gid, homedir, shell, count, accessed, modified)

VALUES(2, 'test', '123', 2001, 2001, '/var/www/', '/bin/false', 0, '2022-09-02 16:14:26.000', '2022-09-02 16:16:38.000');

Для выхода из базы данных выполните:

mysql> quit

Отредактируйте конфигурацию файла proftpd /etc/proftpd/proftpd.conf с помощью вашего любимого текстового редактора, раскомментируйте параметры DefaultRoot, RequireValidShell и PassivePorts. Эти параметры не являются обязательными для конфигурации MySQL, но рекомендуется:

Добавьте директиву AuthOrder со значением mod_sql.c, она используется для аутентификации с помощью базы данных sql:

Раскомментируйте запись Include для файла /etc/proftpd/sql.conf для файла конфигурации базы данных:

Отредактируйте файл конфигурации /etc/proftpd/sql.conf для конфигурации базы данных:

  1. SQLBackend: используемая СУБД.
  2. SQLAuthTypes: укажите пароль шифрования базы данных.
  3. SQLConnectInfo: db_name@localhost пользователь, пароль

SQLBackend mysql
SQLAuthTypes Crypt Plaintext
SQLConnectInfo proftpd@localhost proftpd 159357
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

Отредактируйте /etc/proftpd/modules.conf:

раскомментируйте директивы LoadModule mod_sql_mysql.c и LoadModule mod_sql.c:

Перезапустите службу proftpd и проверьте подключение к любому пользователю:

# sudo systemctl restart proftpd.service