Joomla! и файлообменник на базе Pure-ftpd

()

Не так давно на нашем сайте была опубликована заметка об интеграции стандартного движка сайтов 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> с регистрозависимого на регистронезависимый.

Эта заметка не претендует на абсолютную истинность. Возможно, описанную здесь задачу можно решить и другим способом, однако автору он неизвестен и здесь описан способ, которым воспользовался автор.

Ссылки

Ключевые слова: joomla, pure-ftpd, pureftpd, mysql.

Комментарии:

Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE