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 для конфигурации базы данных:
- SQLBackend: используемая СУБД.
- SQLAuthTypes: укажите пароль шифрования базы данных.
- 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