Настройка связки ProFTPD+MySQL в Ubuntu 12.10

В данной статье речь пойдёт о настройке ProFTPD с бэк-эндом MySQL в Ubuntu.

Предупреждение: протокол FTP небезопасен! Рекомендуется рассмотреть возможность настройки ProFTPd для использования SFTP, безопасной альтернативы FTP, реализуемой по SSH.

Требования

Для выполнения руководства нужно предварительно установить и настроить MySQL и phpMyAdmin. Подробную информацию по установке phpMyAdmin можно найти в этом руководстве.

Установка ProFTPD с поддержкой MySQL

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

Данная команда установит все необходимые пакеты. Если инсталлятор попросит выбрать режим, выберите standalone.

Настройка базы данных

Войдите в предварительно установленный phpMyAdmin. В панели управления выберите вкладку Privileges и кликните Add user.

proftpd_mysql_1

После этого нужно выбрать имя пользователя (в данном руководстве это ftpd) и создать пароль.

Примечание: Эти данные очень важны – они понадобятся в дальнейшем.

В разделе Database for user выберите «Create database with same name and grant all privileges»:

proftpd_mysql_2

Это создаст пользователя и одноимённую БД для ProFTPD, а затем передаст пользователю все права на неё. Теперь нужно заполнить БД таблицами. Слева можно увидеть новую базу данных (её имя совпадает с именем пользователя, потому в данном случае она называется ftpd); кликните по ней.

Затем откройте вкладку SQL, внесите следующий код и нажмите Go:

CREATE TABLE IF NOT EXISTS `ftpgroup` (
`groupname` varchar(16) COLLATE utf8_general_ci NOT NULL,
`gid` smallint(6) NOT NULL DEFAULT '5500',
`members` varchar(16) COLLATE utf8_general_ci NOT NULL,
KEY `groupname` (`groupname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table';
CREATE TABLE IF NOT EXISTS `ftpuser` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userid` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`passwd` varchar(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`uid` smallint(6) NOT NULL DEFAULT '5500',
`gid` smallint(6) NOT NULL DEFAULT '5500',
`homedir` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`shell` varchar(16) COLLATE utf8_general_ci 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  DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP user table';

proftpd_mysql_3

Это создаст необходимую БД.

Создание пользователя

Кликните на таблицу ftpuser в левом столбце, а затем – на вкладку Insert.

Это позволяет вставить пользователя. Заполните поля userid (имя пользователя, которое будет использоваться для входа в FTP) и homedir (домашний каталог пользователя FTP; обратите внимание: нельзя указать несуществующий каталог, а затем создать его).

Пароль в поле passwd должен быть зашифрованным; чтобы создать такой пароль, можно использовать этот фрагмент (в оболочке сервера):

/bin/echo "{md5}"`/bin/echo -n "password" | openssl dgst -binary -md5 | openssl enc -base64`

Примечание: Конечно, условный пароль password нужно заменить своим настоящим паролем.

В целом, остальные поля понятны без объяснений и, как правило, заполняются позже (например, login count, last logged in и т.п.).

Итак, необходимая база данных подготовлена, осталось только настроить ProFTPD для её использования.

Настройка ProFTPD

Отредактируйте конфигурационный файл ProFTPD:

sudo nano /etc/proftpd/proftpd.conf

В директиве ServerName укажите имя своего сервера.

Чтобы ограничить пользователей их домашними каталогами (чтобы они не могли перемещаться по файловой системе), внесите:

DefaultRoot ~

Чтобы добавить настойки для SQL и выключить проверку оболочки, добавьте в нижней части конфигурации:

Include /etc/proftpd/sql.conf
RequireValidShell         off

Затем отредактируйте конфигурационный файл sql:

sudo nano /etc/proftpd/sql.conf
sudo nano /etc/proftpd/sql.conf

Он должен иметь такой вид (удалите всё, что содержится в файле на данный момент):

SQLBackend        mysql
#Passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            OpenSSL Crypt
SQLAuthenticate         users groups
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  mysql_database@localhost mysql_user mysql_password
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members
# set min UID and GID - otherwise these are 999 each
SQLMinID        500
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
SqlLogFile /var/log/proftpd/sql.log

Примечание: Не забудьте заменить mysql_database, mysql_user и mysql_password своими корректными данными, которые были созданы ранее. Согласно данным, созданным в этом руководстве, строка имеет такой вид:

SQLConnectInfo  ftpd@localhost ftpd password

Чтобы включить модули MySQL в ProFTPD, отредактируйте:

sudo nano /etc/proftpd/modules.conf

Раскомментируйте (а в случае необходимости – добавьте) следующие строки:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Затем перезапустите ProFTPD:

sudo service proftpd restart

Тестирование настройки

Используйте любой удобный FTP-клиент (например, FileZilla) для подключения к серверу при помощи созданного ранее пользователя.

Распространенные проблемы

  • Пользователь не может войти: возможно, была допущена ошибка при вводе учётных данных.
  • Пользователь не может писать в домашнем каталоге: передайте пользователю соответствующие права; для этого используются поля uid и guid при создании пользователя; стандартные значения:

sudo chown 5500:5500 /path/to/home/directory/

Устранение неисправностей

Лог-файлы ProFTPD находятся здесь:

tail -f /var/log/proftpd/proftpd.log

Логи SQL для ProFTPD:

tail -f /var/log/proftpd/sql.log

Tags: , , , ,

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