Серверы 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 -pCREATE 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 restart5 Создание первого виртуального пользователя
Чтобы заполнить базу данных, вы можете использовать оболочку MySQL:
mysql -u root -pUSE 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 Ссылки
- vsftpd: http://vsftpd.beasts.org/
- Debian: http://www.debian.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.