Допустим есть установленный ProFTPd сервер, например как я описывал в этой статье — Установка и настройка ProFTPd в Ubuntu
А также установлен MySQL сервер, например как я описывал в этой статье — Установка и настройка MySQL сервера на Ubuntu
Приведу пример настройки ProFTPd с использованием MySQL базы данных пользователей.
Устанавливаем дополнительный пакет:
sudo apt-get install proftpd-mod-mysql
Откроем конфигурацию ProFTPd в любом текстовом редакторе:
sudo nano /etc/proftpd/proftpd.conf
Раскомментируем или укажем:
Include /etc/proftpd/sql.conf DefaultRoot ~ RequireValidShell off
Создаем отдельного системного пользователя и группу к которым будут привязаны виртуальные пользователи из MySQL базы данных:
sudo groupadd -g 2001 ftpgroup sudo useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
Далее необходимо будет выполнять sql запросы через phpMyAdmin или любой mysql клиент, приведу пример подключения к локальному MySQL серверу:
mysql -u root -p
Выполняя sql запрос создаем любую базу данных и пользователя с привилегиями на нее, например proftpd:
create database proftpd; GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Создаем в этой новой базе две таблицы, а также добавим группу и FTP пользователя:
use proftpd; 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 COMMENT='ProFTP group table'; 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 '/sbin/nologin', 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 COMMENT='ProFTP user table'; INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser'); INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (NULL, 'test', 'password')', '2001', '2001', '/srv/ftp/test', '/sbin/nologin', '0', '0000-00-00 00:00:00.000000', '0000-00-00 00:00:00.000000'); exit;
Смотрите также — Решение ошибки ERROR 1067 (42000) at line 211: Invalid default value for ‘blablabla’
Откроем файл конфигурации модулей ProFTPd в текстовом редакторе:
sudo nano /etc/proftpd/modules.conf
Раскомментируем или укажем две строки:
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
Откроем файл конфигурации SQL параметров для ProFTPd:
sudo nano /etc/proftpd/sql.conf
Укажем логин и пароль для подключения к MySQL базе, собственно приведем к следующему виду:
<IfModule mod_sql.c> SQLBackend mysql SQLAuthTypes Crypt SQLConnectInfo proftpd@localhost proftpd password 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 </IfModule>
Перезапустим ProFTPd чтобы применить изменения в конфигурации:
sudo /etc/init.d/proftpd restart
На этом настройка ProFTPd с использованием MySQL базы данных пользователей завершена и можно выполнить подключение.
Приведу также для примера, содержимое старого конфигурационного файла, при котором proftpd брал данные пользователей из mysql базы данных биллинга:
ServerName "Name" ServerType standalone ServerIdent off DefaultServer on ScoreboardFile /var/run/proftpd.scoreboard Port 21 ServerAdmin admin@example.net Umask 002 MaxInstances 300 CommandBufferSize 512 UseReverseDNS off IdentLookups off RequireValidShell off DefaultAddress 0.0.0.0 PassivePorts 30000 50000 TimesGMT off TimeoutSession 1800 TimeoutStalled 300 User ftp Group ftp CharsetLocal KOI8-U CharsetRemote CP1251 ExtendedLog /var/log/proftpd.log ALL ideal LogFormat ideal "%t %a %U %m %D %f %b %T" TransferLog NONE AllowRetrieveRestart on AllowStoreRestart on DefaultRoot ~ AllowOverwrite off <Limit SITE_CHMOD> DenyAll </Limit> <Limit Write> AllowAll </Limit> <Limit READ> AllowAll </Limit> <Limit DELE RMD XRMD RNFR RNTO> AllowUser myadmin manager DenyAll </Limit> AuthOrder mod_auth_unix.c mod_sql.c SQLAuthTypes Plaintext SQLAuthenticate users SQLConnectInfo base@192.168.0.1:3306 mysqluser password SQLDefaultGID 1003 SQLDefaultUID 1003 SQLDefaultHomedir /ftp SQLUserInfo `abon` `login` `password` "NULL" "NULL" "NULL" "NULL" SQLUserWhereClause "killed!='killed'" #SQLNamedQuery auth SELECT "login,password,1003,1003,'/usr/home/ftp','' from abon where killed!='killed' and login = '%u'" #SQLUserInfo custom:/auth #SQLLogFile /var/log/proftpd_sql.log <Directory ~> </Directory>
Смотрите также:
Настройка ProFTPd с виртуальными пользователями в файле