Не так давно на нашем сайте была опубликована заметка об интеграции стандартного движка сайтов Joomla! и jabber-сервера ejabberd. Продолжая тему можно так же добавить файлообменник на базе pure-ftpd для пользователей портала.
Почему именно pure-ftpd в качестве ftp-сервера? Потому что он, во-первых, достаточно прост в настройке. Во-вторых, может использовать для авторизации базу MySQL. Ну и, наконец, это единственный ftp-сервер, который позволяет хранить имена файлов в одной кодировке, а отдавать их клиентам в другой, что будет очень полезно, если на сервере используется локаль, отличная от cp1251.
Итак, опять же мы будем предполагать, что используется сервер на базе ОС FreeBSD и портал на Joomla! установлен и работает.
Для начала установим pure-ftpd (не забывая включить поддержку MySQL!):
cd /usr/ports/ftp/pure-ftpd make install clean
После установки приступаем к его конфигурированию. Вобщем-то всё как обычно. Файл конфигурации сохранён как /usr/local/etc/pure-ftpd.conf. Для начала задайте кодировку файловой системы и кодировку клиента:
FileSystemCharset koi8-r ClientCharset cp1251
Очевидно, что если у вас локальная кодировка не koi8-r, а какая-то другая - нужно поправить параметр FileSystemCharset.
Далее, полезно запретить доступ анонимным пользователям. Это делается указанием следующих параметров в файле конфигурации:
NoAnonymous yes
Так же добавляем вот такую строчку в конец файла:
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
В файле /usr/local/etc/pureftpd-mysql.conf мы потом укажем соединение с MySQL и напишем пару запросов к базе. Но сначала нам полезно создать отдельного пользователя в MySQL, и дать ему права на выполнение запросов SELECT для базы портала.
mysql -u root -p <your_db_name> mysql> GRANT SELECT ON <your_db_name>.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass'; mysql> FLUSH PRIVILEGES;
Теперь открываем файл /usr/local/etc/pureftpd-mysql.conf и настраиваем соединение с MySQL:
MYSQLServer localhost MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase <your_db_name>
Далее начинаем писать запросы для получения необходимой для авторизации на сервере информации:
# Вместо паролей в базе хранятся их md5-хэши. MYSQLCrypt md5 # Запрос, возвращающий хэш пароля заданного пользователя. MYSQLGetPW SELECT password FROM <your_joompla_prefix>users WHERE username="\L" # Запрос, возвращающий ID, пользователя для использования в системе. # Используем его ID в базе портала+1500. MYSQLGetUID SELECT id+1500 FROM <your_joompla_prefix>users WHERE username="\L" # Все пользователи будут входить в одну группу. # Например 1500 (Рекомендуем взять ID группы ftp). MYSQLDefaultGID 1500 # Очень хитрый запрос. поскольку в базе у нас нет поля, отвечающего за # домашний каталог пользователя, а pure-ftpd требует чтобы в этом месте # был именно SQL-запрос, делаем вобщем-то бесполезный запрос, результат # которого заведомо известен: MYSQLGetDir SELECT '/mnt/ftp/' FROM `<your_joompla_prefix>users` WHERE `username`="\L"
Всё. Теперь можно запускать pure-ftpd и пользоваться. Только нужно помнить, что имя пользователя чувствительно к регистру. Если вас это не устраивает - измените тип сравнения для поля "username" таблицы <your_joompla_prefix> базы <your_db_name> с регистрозависимого на регистронезависимый.
Эта заметка не претендует на абсолютную истинность. Возможно, описанную здесь задачу можно решить и другим способом, однако автору он неизвестен и здесь описан способ, которым воспользовался автор.
Ссылки