|
||
Ответить |
|
#1
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,627
в 1,832 сообщениях |
Создание собственного хостинга -
22.06.2009, 17:00
Создание собственного хостинга или Сам Себе ISP
Процесс сетапа системы для массового виртуального вебхостинга. Введение Собственно говоря, только ленивый не писал на тему виртуального вебхостинга. Это хорошо. Плохо то, что бОльшая часть информации очень слабо структурирована и не имеет отношения к собственно высокопроизводительному, безопасному и массовому виртуальному вебхостингу. В этой статье описано создание полностью рабочей системы "с нуля". Задачи - создать максимально производительный и в то же время безопасный вебхостинг - позволить mod_php создавать файлы от имени пользователя, а не с правами вебсервера - обезопасить пользователей друг от друга - обезопасить систему от вторжения пользователей - обезопасить систему от вторжения извне Общая схема построения хостинга В качестве вебсервера будем использовать Apache 1.3 с модулем mod_php и возможностью запуска cgi скриптов, как наиболее популярный среди вебмастеров. СУБД - MySQL 5.1. Для "продвинутых" клиентов предоставим в пользование компилятор gcc. Не следует бояться давать пользователю доступ к компилятору - на правильно настроенной системе даже при наличии компилятора ничего сломать не получится. Мы строим именно правильно настроенную систему, поэтому в распоряжении пользователя будет весь комплекс программного обеспечения. Чтобы снизить нагрузку на Apache, установим акселерирующий прокси-сервер. Из собственной многолетней практики, наиболее подходящим акселератором на данный момент является nginx - стабильный и качественный многофункциональный вебсервер/акселератор, разрабатываемый Игорем Сысоевым. Таким образом, сначала запрос от пользователя поступает на акселератор nginx, который ожидает приема всех данных и проксирует данные на Apache только после полного его получения. Этим мы снижаем нагрузку на Apache, который каждый запрос обрабатывает в отдельном тяжеловесном процессе. Для по-настоящему безопасной работы необходимо чтобы программы на площадке каждого клиента выполнялись от своего пользователя. Для CGI скриптов эта задача решается путем настройки suexec. Модуль PHP, который по определению является частью Apache, выполняется с правами пользователя, от которого запущен вебсервер. Есть альтернативный вариант с использованием suphp, однако это очень сильно грузит систему и потому такая схема для массового вебхостинга неприменима. Мы выберем компромиссный вариант: PHP будет работать как модуль Apache, а безопасность обеспечим настройками файловой системы и модуля PHP. Осталось решить последнюю проблему, а именно - создание файлов при работе mod_php с правами пользователя-владельца площадки, а не с правами вебсервера. Обратимся к руководству по команде mount(8) , из которого следует, что для наследования владельца при создании объектов внути каталога, необходимо замонтировать раздел с опцией suiddir. Доступ по FTP следует предоставлять только через виртуальных пользователей. Это требование обусловлено тем, что пароли по протоколу FTP передаются в нешифрованном виде и их очень легко перехватить. Чтобы исключить возможность вторжения в систему по SSH, перехватив пароль для FTP и необходимы виртуальные пользователи - не существующие в системе, следовательно, бесполезные для потенциального взломщика. Итак, полученная нами схема выглядит следующим образом: PHP код:
Первоначальная подготовка сервера Конфигурация сервера: Intel(R) Xeon(TM) 3.0GHz / 2G RAM / Mirror SATA RAID (2 * 150G). Операционная система: FreeBSD 6.2-STABLE SMP i386. Диски: PHP код:
PHP код:
PHP код:
Изменяем файл /etc/fstab так, чтобы раздел /home монтировался с suiddir. Дополнительно отключаем запись времени последнего доступа к файлам; это дает некоторый выигрыш в производительности: PHP код:
PHP код:
Перед установкой добавляем в /etc/make.conf PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
В качестве фронтэнда у нас будет работать вебсервер nginx, задача которого - проксировать HTTP запросы на сервер Apache. Это дает резкое снижение нагрузки из-за того, что nginx - мультиплексирующий сервер, способный обслуживать десятки тысяч одновременных подключений без порождения сотен дополнительных процессов или тредов. Схема выглядит следующим образом: PHP код:
Итак, устанавливаем nginx: PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
В выводе команды полностью отсутствуют упоминания о mysql, gd, iconv и прочих функциях. Что неудивительно, ибо в системе FreeBSD все дополнительные модули ставятся отдельно. Чтобы установить необходимые модули можно воспользоваться двумя тактиками: поставить все за один раз, подав команды PHP код:
Или - собрать каждый модуль по отдельности: PHP код:
По окончании установки, прописываем в файл /etc/rc.conf параметры для запуска nginx и Apache: PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
|
#2
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,627
в 1,832 сообщениях |
22.06.2009, 17:01
Указываем, что собирать сервер следует с поддержкой СУБД PostgreSQL, в которой будут храниться виртуальные пользователи. Выбор базы данных зависит от используемой системы управления хостингом. В нашем случае она построена на основе собственной разработки, базирующейся на СУБД PostgreSQL.
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
Во второй части мы проведем предварительный аудит безопасности системы, рассмотрим создание пользователей хостинга, вопросы нагрузочного тестирования полученного комплекса ПО, аудит системы во время работы и тонкости, связанные с работой некоторых модулей PHP. |
#3
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,627
в 1,832 сообщениях |
Создание собственного хостинга продолжение -
22.06.2009, 19:25
Создание собственного хостинга продолжение
Введение В предыдущей статье была описана общая схема вебхостинга, первоначальная подготовка сервера к настройке, установка необходимого программного обеспечения и его минимальная настройка. В этой части статьи мы рассмотрим следующие вопросы: - создание системы домашних каталогов пользователей - отделение пользователей друг от друга и от системы - настройка производительности системы Общие концепции Как уже упоминалось в предыдущей статье, мы разделяем типы пользователей. То есть, у нас есть отдельный пользователь c отдельным паролем для доступа к СУБД, FTP и для работы в шелле по SSH. Чтобы не возникало неразберихи, следует как-то систематизировать все создаваемые сущности. Хорошим и проверенным методом является следующий: все пользователи данной техплощадки имеют один и тот же префикс в виде имени площадки. Пример: u00000, где u - сокращение от "user", а 00000 - порядковый номер площадки по базе данных. То есть, для площадки с номером 12345 у нас будут следующие реквизиты: PHP код:
Небольшое отступление. Очень плохая практика называть пользователей значимыми именами, например "alex" или "somesite_ru": это очень неудобно с точки зрения организации биллинга, системы резервного копирования и миграции данных между машинами, заставляет каждый раз придумывать новые имена, а самое главное - при наличии достаточного количества клиентов приводит к повторениям и дальнейшей путанице. Профиль пользователя На сегодняшний день реалии таковы, что большая часть сайтов имеют кодировку utf-8. Применительно к вопросу вебхостинга это означает что вся локализация консоли, вебсервера и сервера базы данных должна быть ru_RU.CP1251. Для локализации консоли необходимо создать дополнительный класс russianwww в файле /etc/login.conf: PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
Как уже было описано в предыдущей статье, пользователи виртуального хостинга размещаются на отдельном разделе /home в каталоге www. Если с течением времени место в /home/www закончится, мы сможем установить в сервер дополнительный физический диск и смонтировать его в /home/www1. При этом общая схема работы хостинга не изменится и дополнительная настройка не понадобится. Для того чтобы пользователи не имели доступа к "чужим" даныым необходимо правильно выставить права и владельцев каталогов. Такая настройка - очень важный момент, поэтому остановимся на ней подробнее. Итак, пользователи не должны иметь доступ к каталогам друг друга, но при этом надо позаботиться о доступности этих данных вебсерверу. К счастью, механизм UNIX permissions позволяет решить эту проблему: мы создадим специальную группу в которую будут входить пользователи вебхостинга и пользователь, от которого запущен вебсервер Apache PHP код:
PHP код:
Создаем пользователя нашего вебхостинга: PHP код:
Устанавливаем права на домашний каталог пользователя: PHP код:
Для хранения лог-файлов мы выберем каталог /var/log/apache. Именно здесь нам потребуется введенная дополнительно группа у пользователя хостинга: при помощи нее мы выдадим права на просмотр лог-файлов. Создаем каталог, в котором будут храниться лог-файлы: PHP код:
1) Создаем каталоги PHP код:
PHP код:
3) Проверяем конфигурацию Apache: PHP код:
PHP код:
PHP код:
PHP код:
|
#4
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,627
в 1,832 сообщениях |
22.06.2009, 19:27
Настройка параметров системы
Настройка параметров системы преследует две цели. Первая цель: повысить уровень безопасности путем изоляции пользователей друг от друга и от системы и вторая - достичь оптимальной производительности хостинга. Для изоляции клиентов хостинга на уровне файловой системы мы воспользовались системой unix permissions. Теперь необходимо изолировать клиентов на уровне доступа к списку процессов, используемых ресурсов и т.п. Для этого в файл /etc/sysctl.conf вносим строчку PHP код:
Для того чтобы при падении программ система писала core-файлы в один каталог, а не во всю файловую систему, также добавляем строчки PHP код:
PHP код:
Выводы Разумеется, это - всего лишь прототип реального хостинга и при количестве клиентов до нескольких сотен будет работать в предлагаемой конфигурации. Для развертывания системы в эксплуатацию с несколькими тысячами пользователей необходимо, как минимум, разнести вебсервер и сервер БД, а для биллинга выделить отдельную машину. Также следует рассмотреть вопросы организации резервных копий (backup), систему миграции пользователей между серверами хостнговой площадки, а также - систему миниторинга пользовательской активности. |
#5
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,627
в 1,832 сообщениях |
Создание собственного хостинга, faq -
22.06.2009, 19:31
Создание собственного хостинга, FAQ
Настройка PHP Q: Как увеличить скорость работы PHP? A: Установить в систему eAccelerator или ZendOptimizer, обычно, это не представляет сложностей. На FreeBSD делается так: 1) eAccelerator: PHP код:
PHP код:
PHP код:
PHP код:
A: Прописать eaccelerator.debug = 0 и перезапустить apache Q: Я настроил все так, как написано в статье, но сессии не работают! A: Скорее всего, указана неверная umask в стартовых скриптах. Проверить это можно запустив скрипт <?php echo umask(); ?>. Если выведется '2', значит, umask прописана неверно. Внимательно изучите содержимое файлов /usr/local/sbin/apachectl и /usr/local/etc/rc.d/apache.sh. Во второй строке в них должна быть надпись umask 0022. Q: Pure-ftpd не пускает пользователей! A: ВНИМАТЕЛЬНО проверьте права и владельца пользовательского каталога. |
Ответить |
Опции темы | |
Опции просмотра | |
|
|