Библиотека сайта rus-linux.net
Виртуальный хостинг на базе 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/
).
В любом случае, если вы хотите создать нового пользователя, вам нужно будет добавить запись в таблицу 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