Серверы FTP · 4 min read · Feb 11, 2026

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

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

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

Этот учебник основан на Debian Squeeze (Debian 6.0). Вы уже должны были настроить базовую систему Debian Squeeze.

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

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

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

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

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

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

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

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

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

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

5 Создание первого виртуального пользователя

Чтобы заполнить базу данных, вы можете использовать оболочку MySQL:

mysql -u root -p
USE vsftpd;

Теперь мы создаем виртуального пользователя testuser с паролем secret (который будет храниться в зашифрованном виде с использованием функции PASSWORD MySQL):

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));  
quit;

domains testuser — это /home/vsftpd/testuser; к сожалению, vsftpd не создает этот каталог автоматически, если он не существует. Поэтому мы создаем его вручную и делаем владельцем пользователя vsftpd и группы nogroup:

mkdir /home/vsftpd/testuser  
chown vsftpd:nogroup /home/vsftpd/testuser

Теперь откройте свою FTP-клиентскую программу на рабочей станции (что-то вроде FileZilla или FireFTP) и попробуйте подключиться. В качестве имени хоста используйте server1.example.com (или IP-адрес системы), имя пользователя — testuser, а пароль — secret.

Если вам удалось подключиться — поздравляю! Если нет, что-то пошло не так.

6 Администрирование базы данных

Для большинства людей проще, если у них есть графический интерфейс для MySQL; поэтому вы также можете использовать phpMyAdmin (в этом примере по адресу http://server1.example.com/phpmyadmin/) для администрирования базы данных vsftpd.

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

7 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.