Виртуальный хостинг · 5 min read · Dec 03, 2025

Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Mandriva 2009.0

Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Mandriva 2009.0

Версия 1.0
Автор: Фалко Тимме

Этот документ описывает, как установить сервер PureFTPd, который использует виртуальных пользователей из базы данных MySQL вместо реальных системных пользователей. Это значительно более производительно и позволяет иметь тысячи ftp пользователей на одной машине. В дополнение к этому я покажу, как использовать квоты и ограничения на загрузку/выгрузку с этой настройкой. Пароли будут храниться в зашифрованном виде в виде строк MD5 в базе данных.

Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. phpMyAdmin - это удобный графический интерфейс, что означает, что вам не нужно возиться с командной строкой.

Этот учебник основан на Mandriva 2009.0. Вы должны уже настроить базовую систему Mandriva 2009.0, например, как описано в первых шести главах этого учебника: https://www.howtoforge.com/perfect-server-mandriva-2009.0-i386

Это руководство предназначено как практическое руководство; оно не охватывает теоретические основы. Они рассматриваются во многих других документах в сети.

Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует много способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться для вас, поэтому вам нужно заменить их там, где это необходимо.

2 Установка MySQL и phpMyAdmin

Все это можно установить одной командой:

urpmi MySQL MySQL-client phpmyadmin

По умолчанию сетевое взаимодействие не включено в пакет MySQL Mandriva 2009.0. Мы можем изменить это, закомментировав строку skip-networking в /etc/my.cnf:

vi /etc/my.cnf

| [...] # Не слушать на TCP/IP порту вообще. Это может быть улучшением безопасности, # если все процессы, которым необходимо подключиться к mysqld, работают на одном и том же хосте. # Все взаимодействия с mysqld должны осуществляться через Unix-сокеты или именованные каналы. # Обратите внимание, что использование этой опции без включения именованных каналов в Windows # (через опцию "enable-named-pipe") сделает mysqld бесполезным! # #skip-networking [...] |

После этого мы создаем системные ссылки для запуска MySQL и Apache…

chkconfig mysqld on chkconfig httpd on

… и запускаем оба сервиса:

/etc/init.d/mysqld start /etc/init.d/httpd restart

Создайте пароль для пользователя 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 изолировать каждого виртуального пользователя в его домашней директории, чтобы он не мог просматривать директории и файлы вне своей домашней директории. Строка 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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.