Pure-FTPd с поддержкой MySQL (Pure-FTPd-MySQL) — это модификация FTP-сервера Pure-FTPd, которая позволяет хранить информацию о пользователях в базе данных MySQL. Это позволяет:
- избежать использования системных аккаунтов для FTP-доступа;
- упростить администрирование FTP-аккаунтов;
- использовать централизованную базу для нескольких FTP-серверов.
opennet.ru pureftpd.sourceforge.net
Установка
Пакет Pure-FTPd-MySQL доступен в дистрибутивах Linux, например Ubuntu. Важно установить пакет, а не пакет pure-ftpd — в нём нет встроенной поддержки MySQL. ubuntututorial.org debiantutorials.com forum.howtoforge.com
Для включения поддержки MySQL в Pure-FTPd необходимы установленные библиотеки mysql-клиента. Запуск скрипта configure в таком случае выглядит так:
./configure --with-mysql
. Если библиотеки находятся в нестандартной директории, нужно указать эту директорию:
./configure --with-mysq=/path/to/mysqllib/
Пакет Pure-FTPd-MySQL доступен в репозиториях некоторых дистрибутивов Linux. ubuntututorial.orgdebiantutorials.com
Конфигурация
После установки необходимо создать файл конфигурации подключения к MySQL-серверу (pureftpd-mysql.conf). В нём нужно указать, например: opennet.ruylsoftware.com
- Адрес MySQL-сервера — MYSQLServer. ylsoftware.com
- Порт MySQL-сервера — MYSQLPort. ylsoftware.com
- Пользователя на MySQL-сервере — MYSQLUser. ylsoftware.com
- Пароль для подключения к базе — MYSQLPassword. opennet.ru ylsoftware.com
- Имя базы данных — MYSQLDatabase. opennet.ru ylsoftware.com
- Способ хэширования пароля — MYSQLCrypt (рекомендуется использовать MD5). ylsoftware.com howtoforge.com
В запросах для получения данных о пользователях можно использовать переменные: «\L» — логин, «\I» — IP-адрес сервера, «\P» — порт, «\R» — IP-адрес, с которого подключается пользователь. opennet.ru download.pureftpd.org
- Запросы для получения данных о пользователях — в файле конфигурации указываются, например: MYSQLGetPW — запрос на получение пароля пользователя, MYSQLGetUID — запрос на получение uid пользователя. opennet.ru download.pureftpd.org
- Изоляция пользователей — можно включить опцию ChrootEveryone, которая заставляет Pure-FTPd изолировать каждого виртуального пользователя в его домашнем каталоге. howtoforge.com forum.ubuntu.ru
Безопасность
Некоторые меры безопасности при использовании Pure-FTPd с поддержкой MySQL:
- Запрет на использование системных аккаунтов — если учётная запись пользователя в MySQL имеет uid и/или gid root (0), Pure-FTPd откажется войти в систему.
- Ограничение на логин — он может содержать только общие символы: A…Z, a…z, 0…9, -, ., _, space, :, @ и ‘. Другие символы запрещены.
- Отказ от входа для пользователей с uid и/или gid, равными 0 — Pure-FTPd отказывается от входа таких пользователей.
Ошибки
При работе Pure-FTPd с базой данных MySQL могут возникать ошибки, например:
- Ошибка сокета — например, после обновления MySQL путь к сокету изменился, и Pure-FTPd пытается использовать старый путь, хотя в конфигурации указан новый. Решение — нужно указать правильный путь в файле конфигурации. bbs.archlinux.org
- Ошибка «Unknown authentication method: mysql:/etc/pmysql.conf» — может возникать, если Pure-FTPd ищет файл конфигурации MySQL в другом месте, вместо /etc/pureftpd-mysql.conf. Решение — переименовать файл конфигурации и изменить строку MySQLConfigFile. forum.howtoforge.com
Параметры в файле pureftpd-mysql.conf
В файле pureftpd-mysql.conf можно настроить, например, следующие параметры:
- MYSQLCrypt — тип хранения пароля пользователя в базе. OpenNET.ru
- MySQLTransactions — позволяет включить транзакции. OpenNET.ru
- MYSQLDefaultUID и MYSQLDefaultGID — позволяют задать значения uid и gid для всех пользователей базы. OpenNET.ru
- ULBandwidth — ширина канала отдачи виртуального пользователя, измеряется в КБ/сек (килобайты в секунду). 0 снимает любые ограничения. drach.pro
- DLBandwidth — ширина канала загрузки виртуального пользователя, измеряется в КБ/сек (килобайты в секунду). 0 снимает любые ограничения. drach.pro
- ipaccess — IP-адрес, с которого можно присоединиться к аккаунту FTP. drach.pro
- QuotaSize — дисковое пространство в МБ, которое виртуальный пользователь может использовать на сервере FTP. 0 снимает любые ограничения. drach.pro
- QuotaFiles — количество файлов, которое можно сохранять. 0 означает, что количество не ограничено. ylsoftware.com
Для оптимизации работы FTP можно настроить следующие параметры:
- Ограничения на количество подключений. Это предотвращает перегрузку сервера и обеспечивает стабильное соединение.
- Ведение журнала. Такая настройка помогает отслеживать активность и устранять неполадки.
- Тайм-ауты и параметры передачи. Настройка таких параметров уменьшает количество зависающих соединений и повышает надёжность.
- Шифрование TLS/SSL. С помощью этой настройки можно защитить учётные данные и передачу данных.
- Оптимизацию передачи файлов. Можно включить сжатие, если оно поддерживается, и использовать соответствующие размеры блоков для больших файлов.
- Безопасную аутентификацию. Для этого можно использовать надёжные пароли и ограничить анонимные входы в систему.
Как настроить аутентификацию на основе MySQL в Pure-FTPd
Чтобы настроить аутентификацию на основе MySQL в Pure-FTPd, нужно выполнить следующие шаги:
- Установить необходимые пакеты. Например, для сервера под управлением Ubuntu Server 9.04 команда будет такой: apt-get install pure-ftpd-mysql mysql-server. В процессе установки нужно задать пароль для MySQL-сервера.
- Подключиться к MySQL-серверу с помощью mysql-клиента.
- Создать базу данных для Pure-FTPd.
- Создать пользователя Pure-FTPd с правом выполнять запрос SELECT на эту базу и паролем, например «p4ssw0rd». В реальной конфигурации рекомендуется придумать свой пароль.
- Использовать новую базу данных.
- Создать таблицу, в которой будут храниться пользовательские аккаунты.
- Создать пользователя. Например, дать пользователю с логином friend и паролем secret доступ к директории /home/moose/Films.
- Завершить работу с MySQL.
- Настроить Pure-FTPd. Открыть в редакторе файл /etc/pure-ftpd/db/mysql.conf и привести его к следующему виду:
- Адрес MySQL-сервера — MYSQLServer 127.0.0.1.
- Порт MySQL-сервера — MYSQLPort 3306.
- Пользователь на MySQL-сервере — MYSQLUser pureftpd.
- Пароль — MYSQLPassword p4ssw0rd.
- Имя базы данных — MYSQLDatabase pureftpd.
- Способ хэширования пароля — MYSQLCrypt md5.
- Запрос для получения хэша пароля из базы — MYSQLGetPW SELECT password FROM users WHERE login=»\L».
- Запрос для получения uid пользователя — MYSQLGetUID SELECT uid FROM users WHERE login=»\L».
- Запрос для получения gid пользователя — MYSQLGetGID SELECT gid FROM users WHERE login=»\L».
- Запрос для получения домашнего каталога пользователя — MYSQLGetDir SELECT homedir FROM users WHERE login=»\L».
- Запереть пользователей в их домашних директориях — echo yes >> /etc/pure-ftpd/conf/ChrootEveryone.
- Перезапустить ftp-сервер — invoke-rc.d pure-ftpd-mysql restart.
- Проверить работу аутентификации — попробовать подключиться к ftp-серверу.
По умолчанию разрешено использование системных аккаунтов. Если это не нужно, можно отключить такую возможность командой:
echo no > /etc/pure-ftpd/conf/PAMAuthentication && invoke-rc.d pure-ftpd-mysql restart
Чтобы проверить правильность настройки аутентификации в Pure-FTPd-MySQL, можно выполнить следующие шаги:
- Убедиться, что очередь заданий пуста. Для этого в ISPConfig нужно перейти по пути «Монитор» → «Состояние системы» → «Показать очередь заданий» и проверить, что она пуста. Если нет, нужно исправить ситуацию.
- Проверить, можно ли подключиться к системным пользователям через FTP. Виртуальные пользователи, созданные в ISPConfig, при входе через FTP сопоставляются с системными пользователями. У системных пользователей, к которым они сопоставлены, нет паролей. Однако при создании пользователей SSH в ISPConfig у системных пользователей появляются пароли. Можно попробовать войти с существующим пользователем SSH, не забыв префикс, который ISPConfig добавляет к выбранному имени пользователя.
- Проверить, что запросы pure-ftpd-mysql достигают базы данных с виртуальными пользователями. Для этого нужно включить логирование запросов MySQL. В файле /etc/mysql/my.cnf нужно включить или вставить следующие строки: general_log_file = /var/log/mysql/mysql.log, general_log = 1. Затем перезапустить сервер MySQL: service mysql restart. После неудачного входа в FTP нужно посмотреть в файле /var/log/mysql/mysql.log, какие запросы дошли до MySQL. Нужно найти строку ftp_user, так как все настроенные запросы в файле /etc/pure-ftpd/db/mysql.conf включают это имя таблицы.
- Убедиться, что установлен правильный вариант Pure-FTPd. Нужно выполнить команду apt-get install pure-ftpd-mysql и посмотреть, хочет ли система установить пакет. Если да, нужно позволить установке произойти, после чего должен заработать вход в FTP с виртуальными пользователями.
Некоторые ошибки, которые могут возникнуть при настройке аутентификации в Pure-FTPd:
- Неверно указано значение параметра. Например, в функции create_table_settings() может быть неверно указано значение параметра pureftpd_init_script_path и отсутствовать параметр pureftpwho_path. nixway.org
- Не разрешено использование системных аккаунтов. По умолчанию эта возможность разрешена, но может быть опасна с точки зрения безопасности. ylsoftware.com
- Не создан файл конфигурации подключения к MySQL-серверу. Для работы Pure-FTPd с MySQL нужен файл pureftpd-mysql.conf, в котором нужно указать логин, пароль, имя базы и другие параметры. OpenNET.ru
- Не установлены библиотеки MySQL-клиента. Для включения поддержки MySQL в Pure-FTPd нужны установленные библиотеки этого клиента. OpenNET.ru
- Не настроен веб-интерфейс. Для работы с пользователями и базой нужен веб-интерфейс, для его установки необходима связка Apache+PHP+MySQL. blog.korphome.ru nixway.org
Возможные проблемы, которые могут возникнуть при использовании Pure-FTPd-MySQL:
- Неудачная аутентификация. Одна из возможных причин — неправильное использование префикса имени пользователя в ISPConfig. При настройке FTP-клиента нужно использовать не только введённое имя пользователя, но и префикс. ma.juii.net linuxquestions.org
- Задержка в очереди заданий. В ISPConfig задачи, например создание FTP-пользователя, обрабатываются с помощью cron-задач, которые запускаются каждую минуту. Если одна из них завершится с ошибкой, очередь заданий может зависнуть. ma.juii.net
- Проблемы с подключением к пассивным FTP. Одна из возможных причин — сервер находится за NAT, и FTP-сервер не знает об этом. В таком случае нужно настроить FTP-сервер так, чтобы он «публиковал» известный публичный IP, а не частный. superuser.com
- Проблемы с подключением к Pure-FTPd. Одна из возможных причин — неправильные настройки пользователей в базе данных. В таком случае может помочь удаление пользователей из базы данных и их повторное добавление. linuxquestions.org
- Проблемы с подключением к MySQL. Одна из возможных причин — не запущен MySQL-сервер. opennet.ru
Ещё несколько возможных причин неудачной аутентификации при использовании Pure-FTPd-MySQL:
- Изменение пароля пользователя. В таком случае нужно проверить, может ли пользователь подключиться с новым паролем. experts-exchange.com
- Изменение IP-адреса. Возможно, Pure-FTPd-MySQL использует для подключения к базе данных пользователя ispconfig, а он разрешён для соединений только с локального хоста. Нужно изменить привилегии пользователя ispconfig, чтобы он мог подключаться с любого хоста. experts-exchange.com
- Неправильный установленный вариант Pure-FTPd. Нужно убедиться, что установлен вариант pure-ftpd-mysql, так как только он включает аутентификацию на основе MySQL. ma.juii.net
- Проблемы с разрешениями. Возможно, Pure-FTPd пытается прочитать базу данных с неверными учётными данными. forum.howtoforge.com
- Неизвестный пользователь. Нужно проверить, существует ли пользователь в файле pureftpd.passwd, существует ли его домашний каталог и создан ли файл в то же время, что и файл pureftpd.pdb. forum.centos-webpanel.com