Заметки программиста

Pure-FTPd-MySQL

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/

opennet.ru

Пакет Pure-FTPd-MySQL доступен в репозиториях некоторых дистрибутивов Linux. ubuntututorial.orgdebiantutorials.com

Конфигурация

После установки необходимо создать файл конфигурации подключения к MySQL-серверу (pureftpd-mysql.conf). В нём нужно указать, например: opennet.ruylsoftware.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 отказывается от входа таких пользователей.

pureftpd.sourceforge.net

download.pureftpd.org

Ошибки

При работе 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, нужно выполнить следующие шаги:

  1. Установить необходимые пакеты. Например, для сервера под управлением Ubuntu Server 9.04 команда будет такой: apt-get install pure-ftpd-mysql mysql-server. В процессе установки нужно задать пароль для MySQL-сервера.
  2. Подключиться к MySQL-серверу с помощью mysql-клиента.
  3. Создать базу данных для Pure-FTPd.
  4. Создать пользователя Pure-FTPd с правом выполнять запрос SELECT на эту базу и паролем, например «p4ssw0rd». В реальной конфигурации рекомендуется придумать свой пароль.
  5. Использовать новую базу данных.
  6. Создать таблицу, в которой будут храниться пользовательские аккаунты.
  7. Создать пользователя. Например, дать пользователю с логином friend и паролем secret доступ к директории /home/moose/Films.
  8. Завершить работу с MySQL.
  9. Настроить 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».
  1. Запереть пользователей в их домашних директориях — echo yes >> /etc/pure-ftpd/conf/ChrootEveryone.
  2. Перезапустить ftp-сервер — invoke-rc.d pure-ftpd-mysql restart.
  3. Проверить работу аутентификации — попробовать подключиться к ftp-серверу.

По умолчанию разрешено использование системных аккаунтов. Если это не нужно, можно отключить такую возможность командой: 

echo no > /etc/pure-ftpd/conf/PAMAuthentication && invoke-rc.d pure-ftpd-mysql restart

ylsoftware.com

Чтобы проверить правильность настройки аутентификации в Pure-FTPd-MySQL, можно выполнить следующие шаги:

  1. Убедиться, что очередь заданий пуста. Для этого в ISPConfig нужно перейти по пути «Монитор» → «Состояние системы» → «Показать очередь заданий» и проверить, что она пуста. Если нет, нужно исправить ситуацию.
  2. Проверить, можно ли подключиться к системным пользователям через FTP. Виртуальные пользователи, созданные в ISPConfig, при входе через FTP сопоставляются с системными пользователями. У системных пользователей, к которым они сопоставлены, нет паролей. Однако при создании пользователей SSH в ISPConfig у системных пользователей появляются пароли. Можно попробовать войти с существующим пользователем SSH, не забыв префикс, который ISPConfig добавляет к выбранному имени пользователя.
  3. Проверить, что запросы 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 включают это имя таблицы.
  4. Убедиться, что установлен правильный вариант Pure-FTPd. Нужно выполнить команду apt-get install pure-ftpd-mysql и посмотреть, хочет ли система установить пакет. Если да, нужно позволить установке произойти, после чего должен заработать вход в FTP с виртуальными пользователями.

ma.juii.net

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