У меня уже есть статья по установке и настройке 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 базы подхватился. На этом моменте можно поздравить себя с успешным «поднятием фтп-шника»