Виртуальный хостинг · 6 min read · Jan 31, 2026

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

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

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

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

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

Этот учебник основан на CentOS 6.4. Вы уже должны были настроить базовую систему CentOS 6.4, например, как описано в первых шести главах этого учебника: Идеальный сервер - CentOS 6.4 x86_64 (Apache2, Dovecot, ISPConfig 3)

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

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

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

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

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

Сначала мы включаем репозиторий EPEL на нашей системе CentOS, так как некоторые пакеты, которые мы собираемся установить в ходе этого учебника, недоступны в официальных репозиториях CentOS 6.4:

rpm --import https://fedoraproject.org/static/0608B895.txt  
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  
rpm -ivh epel-release-6-8.noarch.rpm
yum install yum-priorities

Отредактируйте /etc/yum.repos.d/epel.repo…

vi /etc/yum.repos.d/epel.repo

… и добавьте строку priority=10 в секцию [epel]:

| [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |

Теперь мы можем установить MySQL и phpMyAdmin следующим образом:

yum install mysql mysql-server phpMyAdmin httpd

После этого мы должны отредактировать файл /etc/httpd/conf.d/phpMyAdmin.conf, чтобы сделать phpMyAdmin доступным с любых IP-адресов. По умолчанию он доступен только с 127.0.0.1. Закомментируйте этот раздел:

#  
#   Order Deny,Allow  
#   Deny from All  
#   Allow from 127.0.0.1  
#   Allow from ::1  
#

так что файл будет выглядеть так:

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

| # phpMyAdmin - Веб-интерфейс для браузера MySQL, написанный на php # # По умолчанию разрешает только localhost # # Но разрешение phpMyAdmin для любого, кроме localhost, следует считать # опасным, если не обеспечить надлежащую безопасность с помощью SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # 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 и т.д. модулем mod_security в директориях phpMyAdmin. # Это может сломать вашу реализацию mod_security. # # # # SecRuleInheritance Off # # |

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

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start
chkconfig --levels 235 httpd on  
/etc/init.d/httpd start

Создайте пароль для пользователя 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 для CentOS поддерживает различные бэкенды, такие как 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.