Создаём собственный хостинг, или Сам себе ISP. Часть 2::Журнал СА 12.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6252
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6955
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4244
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3021
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3815
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3833
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6328
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3179
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3472
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7288
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10655
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12375
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14013
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9137
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7090
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5398
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4628
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3436
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3167
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3411
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3034
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Создаём собственный хостинг, или Сам себе ISP. Часть 2

Архив номеров / 2007 / Выпуск №12 (61) / Создаём собственный хостинг, или Сам себе ISP. Часть 2

Рубрика: Администрирование /  Продукты и решения

Андрей ШетухинАндрей Шетухин

Создаём собственный хостинг, или Сам себе ISP
Часть вторая

В предыдущей части была описана общая схема веб-хостинга, первоначальная подготовка сервера к настройке, установка необходимого программного обеспечения и его минимальная настройка. Сегодня мы рассмотрим создание системы домашних каталогов пользователей, отделение пользователей друг от друга и от системы, а также настройку производительности системы.

Общие концепции

Как уже упоминалось в первой части (см. №4 за 2007 год), мы разделяем типы пользователей. То есть у нас есть отдельный пользователь c отдельным паролем для доступа к СУБД, FTP и для работы в шелле по SSH.

Чтобы не возникало неразберихи, следует как-то систематизировать все создаваемые сущности. Хорошим и проверенным методом является следующий: все пользователи данной техплощадки имеют один и тот же префикс в виде имени площадки. Пример: u00000, где u – сокращение от «user», а 00000 – порядковый номер площадки по базе данных.

Для площадки с номером 12345 у нас будут следующие реквизиты:

  • /home/www/u12345 – каталог с сайтами, например /home/www/u12345/somesite.ru;
  • u12345 – имя пользователя для работы по SSH и FTP;
  • u12345.ftp.ourhosting.ru – название хоста для доступа на техплощадку по FTP;
  • u12345.ssh.ourhosting.ru – название хоста для доступа на техплощадку по SSH;
  • u12345 – имя пользователя для работы c базой данных;
  • u12345 – собственно база данных;
  • u12345.mysql.ourhosting.ru – имя хоста, на котором расположена БД.

В случае, если пользователю понадобятся дополнительные базы данных, их имена будут u12345_2, u12345_3, u12345_4 и т. д.

Разумеется, у хостинга должны быть настроены зоны DNS так, чтобы при запросе имен хостов отдавались правильные IP-адреса.

Небольшое отступление. Очень плохая практика называть пользователей значимыми именами, например «alex» или «somesite_ru», это очень неудобно с точки зрения организации биллинга, системы резервного копирования и миграции данных между машинами, заставляет каждый раз придумывать новые имена, а самое главное – при наличии достаточного количества клиентов приводит к повторениям и дальнейшей путанице.

Профиль пользователя

На сегодняшний день реалии таковы, что большая часть сайтов имеют кодировку Windows-1251. Применительно к вопросу веб-хостинга это означает, что вся локализация консоли, веб-сервера и сервера базы данных должна быть ru_RU.CP1251. Для локализации консоли необходимо создать дополнительный класс russianwww в файле /etc/login.conf:

#

# Russian Web Users Accounts.

# Setup proper environment variables.

#

russianwww|Russian Users Accounts:\

        :charset=CP1251:\

        :lang=ru_RU.CP1251:\

        :umask=0007:\

        :tc=default:

После необходимых правок /etc/login.conf, пересоздаем базу данных:

cap_mkdb /etc/login.conf

Для локализации Apache придется изменить файл /usr/local/sbin/apachectl, внеся в него следующие строки:

#!/bin/sh

# Localization

umask 0002

LC_ALL=ru_RU.CP1251; export LC_ALL

LANG=ru_RU.CP1251; export LANG

MM_CHARSET=CP1251; export MM_CHARSET

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

CREATE DATABASE `u00001` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

Система каталогов пользователей

Как уже было описано в первой части статьи (см. №4 за 2007 год), пользователи виртуального хостинга размещаются на отдельном разделе /home в каталоге www. Если с течением времени свободное место в /home/www закончится, мы сможем установить в сервер дополнительный физический диск и смонтировать его в /home/www1. При этом общая схема работы хостинга не изменится, и дополнительная настройка не понадобится.

Для того чтобы пользователи не имели доступа к «чужим» данным, необходимо правильно выставить права и владельцев каталогов. Такая настройка каталогов пользователей – очень важный момент, поэтому остановимся на ней подробнее.

Итак, пользователи не должны иметь доступ к каталогам друг друга, но при этом надо позаботиться о доступности этих данных веб-серверу. К счастью, механизм UNIX permissions позволяет решить эту проблему: мы создадим специальную группу, в которую будут входить пользователи веб-хостинга и пользователь, от которого запущен веб-сервер Apache:

pw groupadd virtwww -M www

Создаем каталоги:

mkdir -p /home/www

chown root:wheel /home/www

Права на каталог /home/www должны быть 0711, чтобы нельзя было получить список файлов/каталогов внутри. Пользователи могут войти в каталог, но не могут получить листинг.

Создаем пользователя нашего веб-хостинга:

pw useradd u00001 -g virtwww -d /home/www/u00001 -s /usr/local/bin/bash -L russianwww -m

pw groupadd u00001 -M u00001

Таким образом, каждый пользователь имеет две группы: первичную – virtwww и дополнительную, совпадающую по имени с именем пользователя.

Устанавливаем права на домашний каталог пользователя:

chmod 04710 /home/www/u00001

chown u00001:www /home/www/u00001

При таких правах на каталог никто, кроме пользователя u00001 и веб-сервера, не будет иметь доступа к данным пользователя, а созданные внутри файлы и каталоги будут наследовать ID и GID владельца.

Для хранения лог-файлов мы выберем каталог /var/log/apache.

Именно здесь нам потребуется введенная дополнительно группа у пользователя хостинга: при её помощи мы выдадим права на просмотр лог-файлов.

Создаем каталог, в котором будут храниться лог-файлы:

mkdir -p /var/log/apache

chmod 0711 /var/log/apache

chown root:wheel /var/log/apache

mkdir /var/log/apache/u00001

chmod 0750 /var/log/apache/u00001

chown root:u00001 /var/log/apache/u00001

Теперь осталось расписать процедуру заведения виртуального хоста для пользователя. Сделаем это на примере сайта example.ru:

  1. Создаем каталоги:
  2. mkdir -p /home/www/u00001/example.ru/www

    mkdir -p /home/www/u00001/example.ru/cgi

    mkdir -p /home/www/u00001/example.ru/tmp

    chown -R u00001:virtwww /home/www/u00001/example.ru

    chmod -R 04770 /home/www/u00001/example.ru

    mkdir /var/log/apache/u00001/example.ru

    chmod 0750 /var/log/apache/u00001/example.ru

  3. Прописываем конфигурацию для Apache:
  4. <VirtualHost 127.0.0.1:80>

            ServerName example.ru

            ServerAlias www.example.ru

            DocumentRoot /home/www/u00001/example.ru/www

            ScriptAlias  /cgi /home/www/u00001/example.ru/cgi

            ErrorLog     /var/log/apache/u00001/example.ru/error_log

            TransferLog  /var/log/apache/u00001/example.ru/access_log

            php_admin_value upload_tmp_dir /home/www/u00001/example.ru/tmp

            php_admin_value doc_root       /home/www/u00001/example.ru

            php_admin_value user_dir       www

            php_admin_value open_basedir   /home/www/u00001:/usr/local/share/smarty:/usr/local/share/pear

            php_admin_value session.save_path /home/www/u00001/example.ru/tmp

            User u00001

            Group virtwww

    </VirtualHost>

  5. Проверяем конфигурацию Apache:
  6. /usr/local/sbin/apachectl configtest

    Syntax OK

  7. Перезапускаем веб-сервер Apache и проверяем работу системы:
  8. /usr/local/sbin/apachectl restart

    echo "<? phpinfo(); ?>" > /home/www/u00001/example.ru/www/test.php

    fetch http://example.ru/test.html

    test.php                                         34 kB   13 MBps

    rm /home/www/u00001/example.ru/www/test.php

  9. Заводим FTP-доступ для пользвателя. Поскольку всех FTP-пользователей мы храним в БД, вся процедура создания доступа по FTP сводится к созданию ровно одной записи:

INSERT INTO ftp.ftpusers VALUES('u00001', 'topsecret', '1001', '1000', '/home/www/u00001', 0, 1, '');

где 1001 – UID пользователя, а 1000 – GID группы virtwww.

Проверяем доступ по FTP:

ftp localhost

Trying ::1...

Connected to localhost.

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

220-You are user number 1 of 50 allowed.

220-Local time is now 01:58. Server port: 21.

220-This is a private system - No anonymous login

220 You will be disconnected after 15 minutes of inactivity.

Name (localhost:stellar): u00001

331 User u00001 OK. Password required

Password:

230-User u00001 has group access to:  u00001   virtwww

230 OK. Current restricted directory is /

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> quit

221-Goodbye. You uploaded 0 and downloaded 0 kbytes.

221 Logout.

Для автоматизации создания учетных записей пользователей можно воспользоваться скриптом, доступным по адресу http://www.reki.ru/products/webhosting/addftpuser.

Настройка параметров системы

Настройка параметров системы преследует две цели. Первая цель: повысить уровень безопасности путем изоляции пользователей друг от друга и от системы и вторая – достичь оптимальной производительности хостинга.

Для изоляции клиентов хостинга на уровне файловой системы мы воспользовались системой UNIX permissions. Теперь необходимо изолировать клиентов на уровне доступа к списку процессов, используемых ресурсов и т. п. Для этого в файл /etc/sysctl.conf вносим строчку:

security.bsd.see_other_uids=0

и перечитываем конфигурацию:

/etc/rc.d/sysctl restart

Для того чтобы при падении программ система писала core-файлы в один каталог, а не во всю файловую систему, также добавляем строчки:

kern.sugid_coredump=0

kern.corefile=/var/tmp/%N.core

Для оптимизации работы системы пропишем следующие параметры:

kern.ipc.maxsockbuf=16777216

net.inet.tcp.rfc1323=1

net.inet.tcp.sendspace=1048576

net.inet.tcp.recvspace=1048576

net.inet.tcp.sack.enable=1

kern.maxfiles=204800

kern.maxfilesperproc=200000

net.inet.ip.portrange.first=1024

net.inet.ip.portrange.last=65535

net.inet.ip.portrange.randomized=0

net.inet.tcp.nolocaltimewait=1

Детальное их описание довольно сложно и выходит за рамки данного руководства; интересующимся следует обратиться к текстам докладов Первой конференции российских веб-разработчиков: http://www.rit2007.ru/org.html.

Выводы

Разумеется, это всего лишь прототип реального хостинга и при количестве клиентов до нескольких сотен будет работать в предлагаемой конфигурации. Для развертывания системы в эксплуатацию с несколькими тысячами пользователей необходимо, как минимум, разнести веб-сервер и сервер БД, а для биллинга выделить отдельную машину. Также следует рассмотреть вопросы организации резервных копий (backup), систему миграции пользователей между серверами хостинговой площадки, а также – систему миниторинга пользовательской активности. Возможно, об этом – в следующих статьях.

Удачи!


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru