Настройка сервера · 6 min read · Jan 20, 2026
Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Debian Lenny - Страница 2
5 Настройка PureFTPd
Отредактируйте /etc/pure-ftpd/db/mysql.conf. Он должен выглядеть так:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf| MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |
Убедитесь, что вы заменили строку ftpdpass на реальный пароль для пользователя MySQL pureftpd в строке MYSQLPassword! Обратите внимание, что мы используем md5 в качестве метода MYSQLCrypt, что означает, что мы будем хранить пароли пользователей в виде строки MD5 в базе данных, что гораздо безопаснее, чем использование паролей в открытом виде!
Затем создайте файл /etc/pure-ftpd/conf/ChrootEveryone, который просто содержит строку yes:
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryoneЭто заставит PureFTPd chroot каждого виртуального пользователя в его домашний каталог, чтобы он не мог просматривать каталоги и файлы вне своего домашнего каталога.
Также создайте файл /etc/pure-ftpd/conf/CreateHomeDir, который снова просто содержит строку yes:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDirЭто заставит PureFTPd создать домашний каталог пользователя, когда пользователь входит в систему, и домашний каталог еще не существует.
Теперь мы должны настроить PureFTPd как автономный демон (в настоящее время он управляется inetd). Для этого откройте /etc/default/pure-ftpd-common и измените значение параметра STANDALONE_OR_INETD на standalone:
vi /etc/default/pure-ftpd-common| # Конфигурация для pure-ftpd # (этот файл используется /bin/sh, редактируйте соответственно) # STANDALONE_OR_INETD # допустимые значения "standalone" и "inetd". # Любое изменение здесь переопределяет настройку в debconf. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # использовать ли бинарный файл с поддержкой virtualchroot # допустимые значения "true" или "false" # Любое изменение здесь переопределяет настройку в debconf. VIRTUALCHROOT=false # UPLOADSCRIPT: если это установлено и демон работает в автономном режиме, # pure-uploadscript также будет запущен для запуска программы, указанной ниже # для обработки загрузок. см. /usr/share/doc/pure-ftpd/README.gz или # pure-uploadscript(8) # пример: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # если установлено, pure-uploadscript запустит $UPLOADSCRIPT с указанным # uid и gid UPLOADUID= UPLOADGID= |
Далее мы изменяем /etc/inetd.conf и комментируем строку ftp:
vi /etc/inetd.conf| [...] #:STANDARD: Это стандартные службы. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |
После этого мы перезапускаем Inetd и PureFTPd:
/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart6 Заполнение базы данных и тестирование
Чтобы заполнить базу данных, вы можете использовать оболочку MySQL:
mysql -u root -pUSE pureftpd;Теперь мы создаем пользователя exampleuser со статусом 1 (что означает, что его ftp-аккаунт активен), паролем secret (который будет храниться в зашифрованном виде с использованием функции MD5 MySQL), UID и GID 2001 (используйте идентификатор пользователя и идентификатор группы, которые вы создали в конце второго шага!), домашний каталог /home/www.example.com, пропускная способность загрузки и скачивания 100 КБ/с (килобайт в секунду) и квоту 50 МБ:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;Теперь откройте свою FTP-клиентскую программу на рабочей станции (что-то вроде WS_FTP или SmartFTP, если вы находитесь в системе Windows, или gFTP на настольном компьютере с Linux) и попробуйте подключиться. В качестве имени хоста используйте server1.example.com (или IP-адрес системы), имя пользователя - exampleuser, а пароль - secret.
Если вы смогли подключиться - поздравляем! Если нет, что-то пошло не так.
Теперь, если вы выполните
ls -l /homeвы должны увидеть, что каталог /home/www.example.com (домашний каталог exampleuser) был автоматически создан, и он принадлежит ftpuser и ftpgroup (пользователь/группа, которые мы создали в конце третьего шага):
server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2009-06-05 16:09 www.example.com
server1:~#7 Администрирование базы данных
Для большинства людей проще, если у них есть графический интерфейс для MySQL; поэтому вы также можете использовать phpMyAdmin (в этом примере по адресу http://server1.example.com/phpmyadmin/) для администрирования базы данных pureftpd.

Когда вы хотите создать нового пользователя, вам нужно создать запись в таблице ftpd, поэтому я объясню столбцы этой таблицы здесь:
Таблица ftpd:
- User: Имя виртуального пользователя PureFTPd (например, exampleuser).
- status: 0 или 1. 0 означает, что аккаунт отключен, пользователь не может войти в систему.
- Password: Пароль виртуального пользователя. Убедитесь, что вы используете функцию MD5 MySQL, чтобы сохранить пароль в зашифрованном виде как строку MD5:

- UID: Идентификатор пользователя ftp, который вы создали в конце второго шага (например, 2001).
- GID: Идентификатор группы ftp, который вы создали в конце второго шага (например, 2001).
- Dir: Домашний каталог виртуального пользователя PureFTPd (например, /home/www.example.com). Если он не существует, он будет создан, когда новый пользователь войдет в систему в первый раз через FTP. Виртуальный пользователь будет заключен в этот домашний каталог, т.е. он не сможет получить доступ к другим каталогам вне своего домашнего каталога.
- ULBandwidth: Пропускная способность загрузки виртуального пользователя в КБ/с (килобайты в секунду). 0 означает неограниченно.
- DLBandwidth: Пропускная способность скачивания виртуального пользователя в КБ/с (килобайты в секунду). 0 означает неограниченно.
- comment: Вы можете ввести любой комментарий здесь (например, для вашей внутренней администрации). Обычно это поле оставляют пустым.
- ipaccess: Введите здесь IP-адреса, которым разрешено подключаться к этой FTP-учетной записи. * означает, что любой IP-адрес может подключиться.
- QuotaSize: Дисковое пространство в МБ (не КБ, как в ULBandwidth и DLBandwidth!), которое виртуальный пользователь может использовать на FTP-сервере. 0 означает неограниченно.
- QuotaFiles: количество файлов, которые виртуальный пользователь может сохранить на FTP-сервере. 0 означает неограниченно.
8 Анонимный FTP
Если вы хотите создать анонимную ftp-учетную запись (ftp-учетную запись, в которую каждый может войти без пароля), вы можете сделать это так:
Сначала создайте пользователя ftp (с домашним каталогом /home/ftp) и группу ftp:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "анонимный ftp" -g ftp ftpЗатем создайте файл /etc/pure-ftpd/conf/NoAnonymous, который содержит строку no:
echo "no" > /etc/pure-ftpd/conf/NoAnonymousС этой конфигурацией PureFTPd позволит анонимные входы.
Перезапустите PureFTPd:
/etc/init.d/pure-ftpd-mysql restartЗатем создайте каталог /home/ftp/incoming, который позволит анонимным пользователям загружать файлы. Мы установим для каталога /home/ftp/incoming права 311, чтобы пользователи могли загружать, но не видеть или загружать какие-либо файлы в этом каталоге. Каталог /home/ftp будет иметь права 555, что позволяет видеть и загружать файлы:
cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/Теперь анонимные пользователи могут войти в систему, и они могут загружать файлы из /home/ftp, но загрузки ограничены каталогом /home/ftp/incoming (и как только файл загружен в /home/ftp/incoming, его нельзя читать или загружать оттуда; администратор сервера должен переместить его в /home/ftp, чтобы сделать его доступным для других).
9 Ссылки
- PureFTPd: http://www.pureftpd.org
- MySQL: http://www.mysql.com
- phpMyAdmin: http://www.phpmyadmin.net
- Debian: http://www.debian.org
Get new posts in your inbox
No spam. Unsubscribe anytime.