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

Виртуальный хостинг с Proftpd и MySQL (включая квоты) на Debian Etch

Виртуальный хостинг с Proftpd и MySQL (включая квоты) на Debian Etch

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

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

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

Этот учебник основан на Debian Etch (Debian 4.0). Вы уже должны были настроить базовую систему Debian Etch, как описано в первых шести главах этого учебника: https://www.howtoforge.com/perfect_setup_debian_etch

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

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

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

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

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

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

apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

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

mysqladmin -u root password yourrootsqlpassword

Затем проверьте с помощью

netstat -tap | grep mysql

на каких адресах MySQL слушает. Если вывод выглядит так:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     2713/mysqld

это означает, что MySQL слушает только на localhost.localdomain, тогда вы в безопасности с паролем, который вы установили ранее. Но если вывод выглядит так:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

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

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

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

Для Debian доступен предварительно настроенный пакет proftpd-mysql. Установите его как отдельный демон следующим образом:

apt-get install proftpd-mysql

Вам будет задан следующий вопрос:

Запускать proftpd из inetd или как отдельный процесс? <– отдельный

Затем мы создаем группу ftp (ftpgroup) и пользователя (ftpuser), к которым будут сопоставлены все наши виртуальные пользователи. Замените идентификаторы группы и пользователя 2001 на номер, который свободен в вашей системе:

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

4 Создание базы данных MySQL для Proftpd

Теперь мы создаем базу данных с именем ftp и пользователя MySQL с именем proftpd, который демон proftpd будет использовать позже для подключения к базе данных ftp:

mysql -u root -p
create database ftp;  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password';  
FLUSH PRIVILEGES;

Замените строку password на любой пароль, который вы хотите использовать для пользователя MySQL proftpd. Все еще в оболочке MySQL мы создаем необходимые таблицы базы данных:

USE ftp;
CREATE TABLE ftpgroup (  
groupname varchar(16) NOT NULL default '',  
gid smallint(6) NOT NULL default '5500',  
members varchar(16) NOT NULL default '',  
KEY groupname (groupname)  
) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE ftpquotalimits (  
name varchar(30) default NULL,  
quota_type enum('user','group','class','all') NOT NULL default 'user',  
per_session enum('false','true') NOT NULL default 'false',  
limit_type enum('soft','hard') NOT NULL default 'soft',  
bytes_in_avail int(10) unsigned NOT NULL default '0',  
bytes_out_avail int(10) unsigned NOT NULL default '0',  
bytes_xfer_avail int(10) unsigned NOT NULL default '0',  
files_in_avail int(10) unsigned NOT NULL default '0',  
files_out_avail int(10) unsigned NOT NULL default '0',  
files_xfer_avail int(10) unsigned NOT NULL default '0'  
) TYPE=MyISAM;
CREATE TABLE ftpquotatallies (  
name varchar(30) NOT NULL default '',  
quota_type enum('user','group','class','all') NOT NULL default 'user',  
bytes_in_used int(10) unsigned NOT NULL default '0',  
bytes_out_used int(10) unsigned NOT NULL default '0',  
bytes_xfer_used int(10) unsigned NOT NULL default '0',  
files_in_used int(10) unsigned NOT NULL default '0',  
files_out_used int(10) unsigned NOT NULL default '0',  
files_xfer_used int(10) unsigned NOT NULL default '0'  
) TYPE=MyISAM;
CREATE TABLE ftpuser (  
id int(10) unsigned NOT NULL auto_increment,  
userid varchar(32) NOT NULL default '',  
passwd varchar(32) NOT NULL default '',  
uid smallint(6) NOT NULL default '5500',  
gid smallint(6) NOT NULL default '5500',  
homedir varchar(255) NOT NULL default '',  
shell varchar(16) NOT NULL default '/sbin/nologin',  
count int(11) NOT NULL default '0',  
accessed datetime NOT NULL default '0000-00-00 00:00:00',  
modified datetime NOT NULL default '0000-00-00 00:00:00',  
PRIMARY KEY (id),  
UNIQUE KEY userid (userid)  
) TYPE=MyISAM COMMENT='ProFTP user table';
quit;

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

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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.