Библиотека сайта или "Мой Linux Documentation Project"
"Linux по-русски". Виртуальный хостинг на базе PureFTPd и MySQL
Виртуальный хостинг на базе PureFTPd и MySQL (в т.ч. квоты и управление полосой пропускания) в Ubuntu 8.10 (Intrepid Ibex)
Оригинал:
Автор: Falko Timme,
Дата: 01 июня 2008 г.
Перевод: Сергей Супрунов
Дата перевода: 02 февраля 2009 г.
Этот документ описывает, как установить сервер PureFTPd, работающий с виртуальными пользователями из базы MySQL вместо реальных системных пользователей. Это удобнее и позволяет поддерживать тысячи ftp-пользователей на одной машине. Кроме того, я продемонстрирую использование квот и ограничений скорости загрузки/выгрузки. Пароли в базе данных будут храниться в зашифрованном виде как MD5-строки.
Для управления базой данных MySQL вы можете использовать инструменты с веб-интерфейсом, наподобие phpMyAdmin, который мы тоже установим. phpMyAdmin - это удобный графический интерфейс, избавляющий вас от возни с командной строкой.
В этом пособии мы будем использовать Ubuntu 8.10 (Intrepid Ibex). Базовая система в серверной инсталляции уже должна быть у вас установлена (этот процесс описан в первых десяти главах этого учебника:
).
Данную статью следует рассматривать как практическое руководство; она не затрагивает теоретические основы - им в Сети посвящено множество документов.
Эта статья не подразумевает никаких гарантий! Я имею в виду, что не существует единственно возможного способа решения поставленной задачи. Существует множество путей достижения цели, и здесь просто описан тот путь, который выбрал я. И я не гарантирую, что он подойдёт и вам.
1. Предварительные замечания
В этом пособии я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Ваши параметры будут другими, так что заменяйте их там, где это необходимо.
Убедитесь, что вы вошли в систему как root (набрав sudo su), потому что все шаги этого руководства вам нужно будет выполнять с правами суперпользователя. Также, если вы хотите использовать текстовый редактор vi (что и подразумевается в этой статье), рекомендую вам запустить apt-get install vim-nox. Пакет vim-nox даёт вам гарантию, что редактор vi будет вести себя так, как ожидается (без vim-nox вы можете столкнуться с некоторыми странностями).
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) тем значением, которое свободно в вашей системе:
Теперь мы создадим БД с именем 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 МБ:
Теперь запустите на своей рабочей станции FTP-клиент (что-нибудь типа FileZilla, WS_FTP, SmartFTP или gFTP) и попробуйте подключиться к серверу. В качестве имени хоста мы используем server1.example.com (или IP-адрес сервера), пользователь - exampleuser, пароль - secret.
Если вы смогли подключиться - принимайте поздравления! Если нет, значит, что-то вы сделали неправильно; ищите ошибку.
Теперь, если вы запустите ls -l /home, вы должны увидеть автоматически созданный каталог /home/www.example.com (домашний каталог пользователя exampleuser), принадлежащий ftpuser и ftpgroup (созданным на втором шаге):
Большинству из нас проще работать с графическими оболочками к 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:
Затем создайте файл /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. Ссылки
Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если
войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.
Комментарии
Максим Тармосин пишет 13.02.2010: Вс? работает,но вот почему интернет пользователей не пускает,а пускает только кто из сети?Хотя сетевой кабель 1 подключен и фаерволов не стоит!