FTP сервер с виртуальными пользователями в MySQL на Ubuntu 12.04

У меня уже есть статья по установке и настройке FTP сервера на FreeBSD. Потребовалось организовать то же самое для Ubuntu. Отличия незначительные, но всё же есть.

Для начала установим необходимые пакеты

sudo apt-get install proftpd-basic proftpd-mod-mysql

Раскоментируем эти строки в /etc/proftpd/proftpd.conf

DefaultRoot ~
Include /etc/proftpd/sql.conf
RequireValidShell off

Добавим в систему пользователя и группу от которых будет работать ProFTPd

groupadd -g 2013 ftpgroup
useradd -u 2013 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

Создадим БД для ProFTPd и установим права:

mysqladmin -uroot -pROOTPASS create db_name
mysql -uroot -pROOTPASS -e"GRANT ALL ON bd_name.* TO USERNAME@localhost IDENTIFIED BY 'PASSWORD'" db_name

и создадим структуру базы:

CREATE TABLE ftpgroup (
 groupname varchar(16) NOT NULL default '',
 gid smallint(6) NOT NULL default '2013',
 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 '2013',
 gid smallint(6) NOT NULL default '2013',
 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';

в файле /etc/proftpd/modules.conf подключим 2 модуля для работы с MySQL, раскоментировав строки

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Настроим связь с БД, отрихтовав /etc/proftpd/sql.conf

SQLBackend mysql
SQLAuthTypes Crypt
SQLConnectInfo db_name@localhost user_name user_password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLDefaultGID 33
SQLDefaultUID 33
# Обновляем при каждом успешном логине пользователя
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

И немного наполним наш базу пользователями

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2013, 'ftpuser');
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('', 'test_user', ENCRYPT('passw0rd'), 2013, 2013, '/var/www/tradenark.com.ua/', '/sbin/nologin', 0, '', '');

На всякий случай перезапустим

/etc/init.d/proftpd restart

Проверить можно хотя бы телнетом:

gleb@voron:~$ telnet localhost 21
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 ProFTPD 1.3.4a Server (TradeNarK FTP Ubuntu server) [127.0.0.1]
 user test_user
 331 Password required for test_user
 pass passw0rd
 230 User test_user logged in
 quit
 221 Goodbye.
 Connection closed by foreign host.

Сам FTP сервер работает. При авторизации виртуальный пользователь из MySQL базы подхватился. На этом моменте можно поздравить себя с успешным «поднятием фтп-шника»

Добавить комментарий