Виртуальный хостинг · 5 min read · Feb 13, 2026

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

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

Версия 1.0
Автор: Фалько Тимме
Следите за мной в Twitter

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

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

Этот учебник основан на Fedora 18. Вы должны уже настроить базовую систему Fedora 18.

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

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

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

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

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

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

yum install mysql mysql-server phpMyAdmin httpd

Теперь мы настраиваем phpMyAdmin. Мы изменяем конфигурацию Apache, чтобы phpMyAdmin разрешал подключения не только с localhost (закомментировав все в разделе и добавив строку Require all granted):

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # phpMyAdmin - Веб-браузер MySQL на основе php # # По умолчанию разрешает только localhost # # Но разрешение phpMyAdmin для всех, кроме localhost, следует считать # опасным, если не обеспечить надлежащую безопасность с помощью SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # # Apache 2.4 # # Require ip 127.0.0.1 # Require ip ::1 # # # # # Apache 2.2 # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Require all granted # Apache 2.4 Require ip 127.0.0.1 Require ip ::1 # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # Эти директории не требуют доступа через HTTP - взято из оригинального # phpMyAdmin upstream tarball # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # Эта конфигурация предотвращает фильтрацию SQL и т.д. в директориях phpMyAdmin. # Это может нарушить вашу реализацию mod_security. # # # # SecRuleInheritance Off # # |

Затем мы создаем системные ссылки для автозагрузки MySQL и Apache (чтобы оба запускались автоматически при загрузке системы) и запускаем оба сервиса:

systemctl enable mysqld.service systemctl start mysqld.service

systemctl enable httpd.service systemctl start httpd.service

Создайте пароль для пользователя MySQL root (замените yourrootsqlpassword на пароль, который вы хотите использовать):

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation

ПРИМЕЧАНИЕ: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ MySQL
СЕРВЕРОВ В ПРОИЗВОДСТВЕ! Пожалуйста, внимательно прочитайте каждый шаг!

Чтобы войти в MySQL для его защиты, нам нужен текущий
пароль для пользователя root. Если вы только что
установили MySQL и еще не установили пароль root,
пароль будет пустым, поэтому вам просто нужно
нажать Enter здесь.

Введите текущий пароль для root (нажмите Enter для отсутствия): <– ENTER
OK, успешно использован пароль, продолжаем…

Установка пароля root гарантирует, что никто не сможет
войти в MySQL под пользователем root без
надлежащей авторизации.

Установить пароль root? [Y/n] <– ENTER
Новый пароль: <– yourrootsqlpassword
Повторите новый пароль: <– yourrootsqlpassword
Пароль успешно обновлен!
Перезагрузка таблиц привилегий..
… Успех!

По умолчанию установка MySQL имеет
анонимного пользователя, позволяя любому
войти в MySQL без необходимости создания
учетной записи для них. Это предназначено
только для тестирования и для того, чтобы
установить систему немного проще.
Вы должны удалить их перед переходом в
производственную среду.

Удалить анонимных пользователей? [Y/n] <– ENTER
… Успех!

Обычно root должен иметь возможность
подключаться только с ‘localhost’. Это
гарантирует, что кто-то не сможет
угадать пароль root из сети.

Запретить удаленный вход root? [Y/n] <– ENTER
… Успех!

По умолчанию MySQL поставляется с
базой данных под названием ‘test’, к которой
любой может получить доступ. Это также
предназначено только для тестирования и
должно быть удалено перед переходом в
производственную среду.

Удалить тестовую базу данных и доступ к ней? [Y/n] <– ENTER

  • Удаление тестовой базы данных…
    … Успех!
  • Удаление привилегий на тестовую базу данных…
    … Успех!

Перезагрузка таблиц привилегий гарантирует,
что все изменения, сделанные до сих пор,
вступят в силу немедленно.

Перезагрузить таблицы привилегий сейчас? [Y/n] <– ENTER
… Успех!

Очистка…

Все готово! Если вы выполнили все
вышеуказанные шаги, ваша установка MySQL
должна быть теперь защищена.

Спасибо за использование MySQL!

[root@server1 ~]#

3 Установите PureFTPd с поддержкой MySQL

Пакет PureFTPd для Fedora поддерживает различные бэкенды, такие как MySQL, PostgreSQL, LDAP и т.д. Поэтому все, что нам нужно сделать, это установить обычный пакет PureFTPd:

yum install pure-ftpd

Затем мы создаем группу 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) ) ENGINE=MyISAM;

quit;

Как вы могли заметить, с помощью команды quit; мы вышли из оболочки MySQL и вернулись в оболочку Linux.

Кстати, (я предполагаю, что имя хоста вашей ftp-системы server1.example.com) вы можете получить доступ к phpMyAdmin по адресу http://server1.example.com/phpMyAdmin/ (вы также можете использовать IP-адрес вместо server1.example.com) в браузере и войти как пользователь pureftpd. Затем вы можете взглянуть на базу данных. Позже вы можете использовать phpMyAdmin для администрирования вашего сервера PureFTPd.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.