Виртуальный хостинг · 5 min read · Dec 05, 2025
Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Mandriva 2007 Spring
Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Mandriva 2007 Spring
Версия 1.0
Автор: Фалко Тимме
Этот документ описывает, как установить сервер PureFTPd, который использует виртуальных пользователей из базы данных MySQL вместо реальных системных пользователей. Это гораздо более производительно и позволяет иметь тысячи ftp пользователей на одной машине. В дополнение к этому я покажу использование квот и ограничений на загрузку/выгрузку с этой настройкой. Пароли будут храниться в зашифрованном виде в виде строк MD5 в базе данных.
Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, который также будет установлен в этом руководстве. phpMyAdmin — это удобный графический интерфейс, что означает, что вам не нужно возиться с командной строкой.
Этот учебник основан на Mandriva 2007 Spring (Mandriva 2007.1). Вы уже должны были настроить базовую систему Mandriva 2007 Spring, например, как описано в первых четырех главах этого учебника: https://www.howtoforge.com/perfect_server_mandriva_spring_2007
Это руководство предназначено как практическое руководство; оно не охватывает теоретические основы. Они рассматриваются во многих других документах в интернете.
Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбрал. Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться для вас, поэтому вам нужно заменить их в соответствующих местах.
2 Установка MySQL и phpMyAdmin
Все это можно установить одной командой:
urpmi MySQL MySQL-client phpmyadmin
По умолчанию сетевое взаимодействие не включено в пакете MySQL для Mandriva 2007 Spring. Мы можем изменить это, закомментировав строку skip-networking в /etc/my.cnf:
vi /etc/my.cnf
| [...] # Не слушать на TCP/IP порту вообще. Это может быть улучшением безопасности, # если все процессы, которым необходимо подключиться к mysqld, работают на одном и том же хосте. # Все взаимодействия с mysqld должны осуществляться через Unix-сокеты или именованные каналы. # Обратите внимание, что использование этой опции без включения именованных каналов в Windows # (через опцию "enable-named-pipe") сделает mysqld бесполезным! # #skip-networking [...] |
После этого мы запускаем MySQL и Apache:
/etc/init.d/mysqld start /etc/init.d/httpd start
Создайте пароль для пользователя MySQL root (замените yourrootsqlpassword на пароль, который вы хотите использовать):
mysqladmin -u root password yourrootsqlpassword mysqladmin -h server1.example.com -u root password yourrootsqlpassword
3 Установка PureFTPd с поддержкой MySQL
Пакет PureFTPd для Mandriva поддерживает различные бэкенды, такие как MySQL, PostgreSQL, LDAP и т. д. Мы устанавливаем его следующим образом:
urpmi pure-ftpd pure-ftpd-anon-upload pure-ftpd-anonymous
Затем мы создаем группу ftp (ftpgroup) и пользователя (ftpuser), к которым будут привязаны все наши виртуальные пользователи. Замените идентификаторы группы и пользователя 2001 на число, которое свободно в вашей системе:
groupadd -g 2001 ftpgroup useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
4 Создание базы данных MySQL для PureFTPd
Теперь мы создаем базу данных под названием pureftpd и пользователя MySQL с именем pureftpd, который позже будет использоваться демоном PureFTPd для подключения к базе данных pureftpd:
mysql -u root -p
CREATE DATABASE pureftpd; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass'; FLUSH PRIVILEGES;
Замените строку ftpdpass на любой пароль, который вы хотите использовать для пользователя MySQL pureftpd. Все еще в оболочке MySQL мы создаем таблицу базы данных, которая нам нужна (да, есть только одна таблица!):
USE pureftpd;
CREATE TABLE ftpd ( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ) TYPE=MyISAM;
quit;
Как вы могли заметить, с помощью команды quit; мы вышли из оболочки MySQL и вернулись в оболочку Linux.
Кстати, (я предполагаю, что имя хоста вашей системы ftp-сервера — server1.example.com) вы можете получить доступ к phpMyAdmin по адресу http://server1.example.com/phpmyadmin/ (вы также можете использовать IP-адрес вместо server1.example.com) в браузере и войти как пользователь pureftpd. Затем вы можете взглянуть на базу данных. Позже вы можете использовать phpMyAdmin для администрирования вашего сервера PureFTPd.
5 Настройка PureFTPd
Отредактируйте /etc/pure-ftpd/pure-ftpd.conf и убедитесь, что строки ChrootEveryone, MySQLConfigFile и CreateHomeDir включены и выглядят следующим образом:
vi /etc/pure-ftpd/pure-ftpd.conf
| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |
Настройка ChrootEveryone заставит PureFTPd chroot каждого виртуального пользователя в его домашний каталог, чтобы он не мог просматривать каталоги и файлы вне своего домашнего каталога. Строка CreateHomeDir заставит PureFTPd создать домашний каталог пользователя, когда пользователь входит в систему, и домашний каталог еще не существует.
Затем мы редактируем /etc/pure-ftpd/pureftpd-mysql.conf. Он должен выглядеть следующим образом:
cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf vi /etc/pure-ftpd/pureftpd-mysql.conf
| MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |
Убедитесь, что вы заменили строку ftpdpass на реальный пароль для пользователя MySQL pureftpd в строке MYSQLPassword! Пожалуйста, обратите внимание, что мы используем md5 в качестве метода MYSQLCrypt, что означает, что мы будем хранить пароли пользователей в виде строки MD5 в базе данных, что гораздо безопаснее, чем использование паролей в открытом виде!
Теперь мы запускаем PureFTPd:
/etc/init.d/pure-ftpd start
Get new posts in your inbox
No spam. Unsubscribe anytime.