Установка и настройка pure-ftpd с поддержкой MySQL
Знаю что подобного мануала в сети немало, но во всех вариантах мне не понравилось повторяющаяся ошибка для запроса в мускул
DLBandwidth int(11) NOT NULL default ‘128′,
– ограничение скорости на download (в Kb/s);
DLBandwidth int(11) NOT NULL default ‘128′,
– ограничение скорости на upload (в Kb/s);
Нестыковочку видете?
Такое ощущения что авторы русского варианта тупо перевели английский вариант и никогда его не ставили.. Вот поэтому я и решился написать рабочую версию мануала с рабочего сервера.
Итак, погнали…
Где скачать и как распаковать pure-ftpd я писать не буду. Заходим в распакованный архив и конфигурируем
./configure –with-altlog –with-quotas –with-mysql –with-throttling –with-peruserlimits –with-ratios
Сразу разберём параметры конфигурации.
–with-altlog – используем журналирование
–with-quotas – поддержка квоты.
–with-peruserlimits — позволяет задавать ограничения для каждого пользователя
–with-throttling — позволяет установить ограничение скорости работы с ftp для пользователей
–with-ratios — позволяет установить соотношение download/upload для пользователей
После всего конфигурации выполняем
make
Затем
make install
Если ошибок нет, значит установка прошла удачно.
Далее нам необходимо создать каталоги для хранения файлов.
mkdir ftp
mkdir /ftp/pub
mkdir /ftp/incoming
Создадим пользователя ftp и назначим ему домашнюю директорию /ftp.
groupadd ftp
useradd -d /ftp -g ftp -s /bin/false ftp
Назначим права на директории incoming и pub
chmod -R 0777 /ftp/incoming
chmod -R 0755 /ftp/pub
Для работы с базой данных mysql понадобится файл конфигурации pureftpd-mysql.conf
Его копируем из директории с распаковаными исходниками в /etc
Далее привожу полный рабочий конфиг pureftpd-mysql.conf
MYSQLServer 127.0.0.1
MYSQLPort 3306
MYSQLSocket /tmp/mysql.sockMYSQLUser ftp
MYSQLPassword ftp
MYSQLDatabase ftpMYSQLCrypt cleartext #Может принимать значения “cleartext”, “crypt”, “md5″ и “password”
#Запрос на получения пароля
MYSQLGetPW SELECT Password FROM users WHERE User=”\L”
# Запросов на получение системного имени пользователя, или UID
MYSQLGetUID SELECT Uid FROM users WHERE User=”\L”
# Опционально: default UID вместо запроса на его извлечение MYSQLGetUID
#MYSQLDefaultUID 1000
# Запрос на получение имени группы или gid
MYSQLGetGID SELECT Gid FROM users WHERE User=”\L”
# Опционально: default GID – вместо запроса MYSQLGetGID
#MYSQLDefaultGID 1000
# Запрос на получения домашней директории
MYSQLGetDir SELECT Dir FROM users WHERE User=”\L”
# Опционально: Запрос на максимальное число файлов у пользователя
# Pure-FTPd должен был собран с поддержкой виртуальных квот.
# MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User=”\L”
# Опционально: запрос на квоту использования диска (виртуальных квот)
# Число должно быть в мегабайтах.
# Pure-FTPd должен был собран с поддержкой виртуальных квот.
# MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User=”\L”
# Опционально: Коэффициенты. Запросы на соотношение download/upload.
# Сервер должен быть собран с ratio поддержкой.
# MySQLGetRatioUL SELECT ULRatio FROM users WHERE User=”\L”
# MySQLGetRatioDL SELECT DLRatio FROM users WHERE User=”\L”
# Опционально: Полосой пропускания для пользователя. Сервер должен быть
# собран с throttling опцией. Значение в KB/s .
# MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User=”\L”
# MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User=”\L”
# Разрешить расширение “~” . НИКОГДА не делайте этого, если:
# 1) Вы точно знаете что делаете.
# 2) Совпадают реальные и виртуальные юзеры.
# MySQLForceTildeExpansion 1
# MySQLTransactions On
Теперь создадим базу данных:
mysql> CREATE DATABASE ftp;
Назначим права на базу для пользователя “ftp” с паролем “ftp”
mysql> GRANT ALL PRIVILEGES ON ftp.* TO ftp@localhost IDENTIFIED BY ‘ftp’;
mysql> CREATE TABLE users (
User varchar(16) NOT NULL default ”,
– логин пользователя;
Password varchar(64) NOT NULL default ”,
– пароль пользователя;
Uid int(11) NOT NULL default ‘10000′,
– uid пользователя;
Gid int(11) NOT NULL default ‘10000′,
– gid пользователя;
Dir varchar(128) NOT NULL default ”,
– директория пользователя;
UserIP varchar(15) NOT NULL default ”,
– ip, с которого может подключаться пользователь;
ServerIP varchar(15) NOT NULL default ”,
– ip сервера, на который может подключаться пользователь;
QuotaSize int(11) NOT NULL default ‘5′,
– квота пользователя (в MB);
ULBandwidth int(11) NOT NULL default ‘128′,
– ограничение скорости на download (в Kb/s);
BLBandwidth int(11) NOT NULL default ‘128′,
– ограничение скорости на upload (в Kb/s);
ULRatio int(11) NOT NULL default ‘1′,
DLRatio int(11) NOT NULL default ‘1′,
PRIMARY KEY (User)
);
Запустим Pure-Ftpd
/usr/local/sbin/pure-ftpd -B -A -f none -E -4 -H -U 133:022 -8 UTF-8 -9 cp1251
-p 30000:50000 -l mysql:/etc/pureftpd-mysql.conf -l unix
Проверим поднялся ли демон через: ps ax | grep pure-ftpd
Всё работает, теперь неплохо чтобы сервер стартовал при запуске системы.
Я рекомендую свой файл конфигурации для старта системы.
Создайте файл
touch/etc/pure-ftpd.conf
Отредактируйте его добавив в него следующее:
# Режим демона
-B
# Запирать пользователя в домашний каталог (chroot everyone)
-A
# Отключаем логирование
-f none
# Вместо стандартного, создаём альтернативный лог-файл в формате типа “apache”
-O clf:/var/log/pure-ftpd.log
# Подключаем MySQL
-l mysql:/etc/pureftpd-mysql.conf -l unix
# Запрещаем анонимный вход
-E
# Диапазон портов для пассивного соединения
-p 30000:50000
# Версия сетевого протокола, в нашем случае ipv4only
-4
# Не резольвить имена хостов в логах.
-H
# Маска для копируемых файлов и создаваемых директорий
-U 133:022
# Конвертируем кодировку на лету (для клиентов под Windows)
-8 UTF-8
-9 cp1251
Теперь необходимо в папке /etc/init.d (в различных ОС может быть /etc/rc.d) создать файл pureftpd.sh и добавьте в него следующее:
#!/bin/sh
#CONF=/etc/pure-ftpd.conf
ARGS=$(sed -e ‘/^\s*$/d’ -e ‘/^#/d’ $CONF)s=$1
if [ -z "$s" ]; then s=”start”; fi;case $s in
start)
/usr/local/sbin/pure-ftpd $ARGS
;;
stop)
killall -q /usr/local/sbin/pure-ftpd
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
echo “usage: $0 [start|stop|restart]”
;;
esac# End of file
Всё.. отправляйтесь в базу данных, создавайте пользователей. Не забудьте в фаерволе открыть порты 21, 30000-50000.