Серверы · 3 min read · Feb 10, 2026

Виртуальный хостинг с vsftpd и MySQL на Debian Lenny

Виртуальный хостинг с vsftpd и MySQL на Debian Lenny

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

Vsftpd — один из самых безопасных и быстрых FTP-серверов для Linux. Обычно vsftpd настраивается для работы с системными пользователями. Этот документ описывает, как установить сервер vsftpd, который использует виртуальных пользователей из базы данных MySQL вместо реальных системных пользователей. Это гораздо более производительно и позволяет иметь тысячи FTP-пользователей на одной машине.

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

Этот учебник основан на Debian Lenny (Debian 5.0). Вы должны уже настроить базовую систему Debian Lenny, как описано в первых семи главах этого учебника: Идеальный сервер - Debian Lenny (Debian 5.0) [ISPConfig 2]

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

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

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

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

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

Vsftpd не имеет встроенной поддержки MySQL, поэтому мы должны использовать PAM для аутентификации в базе данных MySQL. Поэтому мы устанавливаем libpam-mysql в дополнение к vsftpd, MySQL и phpMyAdmin:

aptitude install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

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

Новый пароль для пользователя MySQL “root”: <– вашпарольmysql
Повторите пароль для пользователя MySQL “root”: <– вашпарольmysql
Веб-сервер для автоматической перенастройки: <– apache2

3 Создание базы данных MySQL для vsftpd

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

mysql -u root -p
CREATE DATABASE vsftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

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

USE vsftpd;
CREATE TABLE `accounts` (  
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
`username` VARCHAR( 30 ) NOT NULL ,  
`pass` VARCHAR( 50 ) NOT NULL ,  
UNIQUE (  
`username`  
)  
) ENGINE = MYISAM ;
quit;

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

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

4 Настройка vsftpd

Сначала мы создаем непривилегированного пользователя с именем vsftpd (с домашним каталогом /home/vsftpd), принадлежащего группе nogroup. Мы будем запускать vsftpd от имени этого пользователя, а FTP-каталоги наших виртуальных пользователей будут находиться в каталоге /home/vsftpd (например, /home/vsftpd/user1, /home/vsftpd/user2 и т. д.).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Затем мы создаем резервную копию оригинального файла /etc/vsftpd.conf и создаем свой собственный:

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig  
cat /dev/null > /etc/vsftpd.conf  
vi /etc/vsftpd.conf

Файл должен содержать следующие данные:

| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |

Опции конфигурации объясняются на http://vsftpd.beasts.org/vsftpd_conf.html. Важные параметры для нашей виртуальной настройки — это chroot_local_user, guest_enable, guest_username, user_sub_token, local_root и virtual_use_local_privs.

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

mkdir /etc/vsftpd_user_conf

Теперь мы должны настроить PAM так, чтобы он использовал базу данных MySQL для аутентификации наших виртуальных FTP-пользователей вместо /etc/passwd и /etc/shadow. Конфигурация PAM для vsftpd находится в /etc/pam.d/vsftpd. Мы создаем резервную копию оригинального файла и создаем новый следующим образом:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig  
cat /dev/null > /etc/pam.d/vsftpd  
vi /etc/pam.d/vsftpd

| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |

Пожалуйста, убедитесь, что вы заменили пароль MySQL на свой собственный!

После этого мы перезапускаем vsftpd:

/etc/init.d/vsftpd restart
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.