Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Серверные службы Linux

Виртуальный хостинг на базе PureFTPd и MySQL (в т.ч. квоты и управление полосой пропускания) в Ubuntu 8.10 (Intrepid Ibex)

Оригинал: Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On Ubuntu 8.10 (Intrepid Ibex)
Автор: Falko Timme,
Дата: 01 июня 2008 г.
Перевод: Сергей Супрунов
Дата перевода: 02 февраля 2009 г.

Этот документ описывает, как установить сервер PureFTPd, работающий с виртуальными пользователями из базы MySQL вместо реальных системных пользователей. Это удобнее и позволяет поддерживать тысячи ftp-пользователей на одной машине. Кроме того, я продемонстрирую использование квот и ограничений скорости загрузки/выгрузки. Пароли в базе данных будут храниться в зашифрованном виде как MD5-строки.

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

В этом пособии мы будем использовать Ubuntu 8.10 (Intrepid Ibex). Базовая система в серверной инсталляции уже должна быть у вас установлена (этот процесс описан в первых десяти главах этого учебника: http://www.howtoforge.com/perfect-server-ubuntu-8.10).

Данную статью следует рассматривать как практическое руководство; она не затрагивает теоретические основы - им в Сети посвящено множество документов.

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

1. Предварительные замечания

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

Убедитесь, что вы вошли в систему как root (набрав sudo su), потому что все шаги этого руководства вам нужно будет выполнять с правами суперпользователя. Также, если вы хотите использовать текстовый редактор vi (что и подразумевается в этой статье), рекомендую вам запустить apt-get install vim-nox. Пакет vim-nox даёт вам гарантию, что редактор vi будет вести себя так, как ожидается (без vim-nox вы можете столкнуться с некоторыми странностями).

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

Это можно выполнить одной-единственной командой:

apt-get install mysql-server mysql-client phpmyadmin apache2
Вам придётся ввести некоторые данные:
  • New password for the MySQL "root" user (пароль MySQL-пользователя "root"): <-- yourrootsqlpassword
  • Repeat password for the MySQL "root" user (ещё раз этот пароль): <-- yourrootsqlpassword
  • Web server to reconfigure automatically (какой веб-сервер настраивать): <-- apache2

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

Для Ubuntu 8.10 существует предварительно настроенный пакет pure-ftpd-mysql. Его и установим:

apt-get install pure-ftpd-mysql

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

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

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

Теперь мы создадим БД с именем pureftpd и MySQL-пользователя pureftpd, с именем которого демон PureFTPd будет в дальнейшем подключаться к базе:

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

USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

quit;

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

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

5. Настройка PureFTPd

Отредактируйте файл /etc/pure-ftpd/db/mysql.conf. Он должен выглядеть следующим образом:

Убедитесь, что в строке MYSQLPassword вы заменили ftpdpass правильным паролем MySQL-пользователя pureftpd! Также обратите внимание, что мы в качестве метода MYSQLCrypt используем md5, благодаря чему пользовательские пароли будут храниться в базе данных как MD5-строки, что намного безопаснее, чем использование открытых паролей!

Затем создайте файл /etc/pure-ftpd/conf/ChrootEveryone, содержащий единственную строку yes:

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Благодаря этому PureFTPd будет "запирать" каждого виртуального пользователя в его домашнем каталоге, так что он не сможет просматривать каталоги и файлы за пределами своего каталога.

Создайте ещё один файл, /etc/pure-ftpd/conf/CreateHomeDir, также с единственной строкой yes:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Теперь PureFTPd при подключении пользователя будет создавать его домашний каталог, если он ещё не существует.

После всех этих действий, перезагрузите PureFTPd:

/etc/init.d/pure-ftpd-mysql restart

6. Заполнение базы данных и тестирование

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

mysql -u root -p

USE pureftpd;

Теперь создадим пользователя exampleuser со статусом 1 (означающим, что эта учётная запись активна), паролем secret (который будет сохранён в зашифрованном виде благодаря MySQL-функции MD5), 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-клиент (что-нибудь типа FileZilla, WS_FTP, SmartFTP или gFTP) и попробуйте подключиться к серверу. В качестве имени хоста мы используем server1.example.com (или IP-адрес сервера), пользователь - exampleuser, пароль - secret.

Если вы смогли подключиться - принимайте поздравления! Если нет, значит, что-то вы сделали неправильно; ищите ошибку.

Теперь, если вы запустите ls -l /home, вы должны увидеть автоматически созданный каталог /home/www.example.com (домашний каталог пользователя exampleuser), принадлежащий ftpuser и ftpgroup (созданным на втором шаге):

root@server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2008-11-04 15:48 administrator
drwxr-xr-x 2 ftpuser       ftpgroup      4096 2009-01-06 16:36 www.example.com
root@server1:~#

7. Администрирование

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

Указываем шифрование пароля

Интерфейс phpMyAdmin

В любом случае, если вы хотите создать нового пользователя, вам нужно будет добавить запись в таблицу ftpd, поэтому сейчас я объясню назначение столбцов этой таблицы:

Поле таблицыНазначение
UIDИдентификатор системного пользователя, созданного на втором шаге (в нашем случае 2001).
GIDИдентификатор группы, созданной на втором шаге (в нашем случае 2001).
DirДомашний каталог виртуального пользователя PureFTPd (например, /home/www.example.com). Если он не существует, то он будет создан при первом подключении соответствующего пользователя к серверу по FTP. Виртуальный пользователь будет "заперт" в этом каталоге, т.е. у него не будет доступа к данным за пределами своего домашнего каталога.
ULBandwidthПредельная скорость загрузки файлов на сервер, в кБ/с (килобайт в секунду). 0 означает отсутствие ограничений.
DLBandwidthПредельная скорость скачивания с сервера, в кБ/с (килобайт в секунду). 0 означает отсутствие ограничений.
commentЗдесь можно задать любые комментарии (например, используемые для внутреннего администрирования). Обычно это поле остаётся пустым.
ipaccessЗдесь указываются IP-адреса, с которых пользователь может подключаться к серверу. * означает любой адрес.
QuotaSizeДисковое пространство в МБ (не в кБ, как для скорости загрузки и скачивания!), доступное данному виртуальному пользователю на этом FTP-сервере. 0 означает отсутствие ограничений.
QuotaFilesЧисло файлов, которые виртуальный пользователь может сохранить на FTP-сервере. 0 означает отсутствие ограничений.

8. Анонимный доступ

Если вы хотите создать анонимную учётную запись ftp (под которой каждый сможет подключаться к серверу без пароля), вам нужно выполнить следующее.

Прежде всего, создайте системного пользователя ftp (с домашним каталогом /home/ftp) и группу ftp:

groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous 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, в который разрешим анонимным пользователям загружать файлы. Этому каталогу мы зададим права 311 (d-wx--x--x), чтобы пользователи могли записывать туда файлы, но не могли их просматривать или скачивать. Каталог /home/ftp будет иметь права 555 (dr-xr-xr-x), чтобы можно было просматривать его содержимое и скачивать файлы:

cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/

Теперь анонимные пользователи смогут заходить на сервер, скачивать файлы из /home/ftp, но загружать только в /home/ftp/incoming (и как только файл будет загружен в каталог incoming, его нельзя будет скачать оттуда; чтобы файл стал доступен для пользователей, администратор сервера должен перенести его в /home/ftp).

9. Ссылки

PureFTPd: http://www.pureftpd.org
MySQL: http://www.mysql.com
phpMyAdmin: http://www.phpmyadmin.net
Ubuntu: http://www.ubuntu.com