The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка apache 1.3.X для массового виртуального вебхостинга. (apache vhost virtual web)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: apache, vhost, virtual, web,  (найти похожие документы)
From: Шетухин Андрей Владимирович <http://stellar.df.ru.>; Date: Mon, 16 Dec 2007 14:31:37 +0000 (UTC) Subject: Настройка apache 1.3.X для массового виртуального вебхостинга. Оригинал: http://reki.ru/massvirthosting.html Теория Для создания полноценного сервера вебхостинга необходимо выполнить как минимум следующие условия: 1) Безопасность. 2) Расширяемость. 3) Легкость в администрировании. 4) Простота в использовании клиентами. Соответственно план действий будет следующим: I. Настройка системы аутентификации пользователей. II. Создание необходимой файловой структуры и установка прав доступа. III. Установка квот для пользователей. IV. Сборка и настройка http сервера. Сборка и настройка ftp сервера. V. Запуск и тестирование системы. I. Минимальный аудит безопасности системы. Отключаем возможность просмотра других процессов для всех, кроме рута. В файл /etc/sysctl.conf вставляем строчки: security.bsd.see_other_uids=0 # Для FreeBSD 5.X kern.ps_showallprocs=0 # Для FreeBSD 4.X Создаем класс russianwww в /etc/login.conf и прописываем лимиты и переменные окружения для русификации. Читаем hier(7). На разных OS он выглядит по-разному (что естественно), однако в большинстве случаев по поводу каталога /home (/usr/home) написано, что именно здесь должны располагаться домашние каталоги пользователей. Не в /var/www, как это сделано в RedHat, и не в /www, /usr/local/www, как это делается во FreeBSD/OpenBSD. Для упрощения администрирования устанавливаем пакет pam_pgsql (в нем тоже есть ошибки, но они устраняются патчем). Все пароли пользователей будут храниться с базе. Тип криптования пароля может быть произвольным, главное - избежать хранения его в открытом виде. cd /usr/ports/security/pam-pgsql make install Из-за гомерического количества критических ошибок заменяем sendmail на qmail. Это - один из немногих, если не единственный случай, когда оправданно использование qmail. Устанавливаем права на каталоги. Единого правила здесь нет, но общий принцип следующий: пользователь не должен иметь доступа к тому, что он не будет использовать. Создаем отдельный раздел и включаем для него поддержку квот. Как это сделать, описано в системном руководстве. Cоздаем группу virtwww и вносим пользователя www в эту группу. pw groupadd virtwww pw groupmod virtwww -M www Права на каталог /home должны быть 0711, чтобы нельзя было получить список файлов/каталогов внутри. Создаем каталог /home/www с правами доступа 0710 и владельцем www:virtwww. Пользователи могут войти в каталог, но не могут получить листинг. mkdir /home/www chmod 0710 /home/www chown www:virtwww /home/www Монтируем в этот каталог свежесозданный раздел. При монтировании не забываем про ключ nosuid. Как только место в разделе закончится, мы создадим еще один каталог /home/www1 и замонтируем туда дополнительный раздел по той же самой схеме. А случае upgrade системы достаточно будет перемонтировать разделы без копирования данных. Создаем пользователя; например, username c первичной группой virtwww pw useradd username -g virtwww -d /home/www/username -s /usr/local/bin/bash -L russianwww -m chmod 0750 /home/www/username chown username:www /home/www/username В каталог username может войти только пользователь www (от которого будет запущен apache) + сам владелец. Устанавливаем квоту для пользователя. Создаем структуру домашнего каталога для пользователя. mkdir -p /home/www/username/public_html/cgi chmod -R 0750 /home/www/username/public_html/cgi chown -R username:virtwww /home/www/username/public_html Здесь владелец может делать что угодно. Создаем каталог для лог-файлов. Строго говоря, лог-файлы следует хранить в отдельном разделе, во избежание переполнения /var. mkdir -p /var/log/apache/www chmod -R 0711 /var/log/apache/www chown -R 0:0 /var/log/apache Создаем каталог для лог-файлов пользователя mkdir /var/log/apache/www/username chmod 0700 /var/log/apache/www/username chown username:virtwww /var/log/apache/www/username Лог-файлы могут читаться только владельцем. Apache пишет в лог всегда от рута. Даем пользователю доступ к лог-файлам ln -s /var/log/apache/username /home/www/username/logs Настраиваем ротацию логов. Это можно сделать при помощи newsyslog.conf (5), либо ротатором логов Apache. Конфигурируем Apache и ftp сервер. Установка apache с поддержкой suexec Как обычно, все приложения устанавливаем из портов. Для правильной работы suexec необходимо установить следующие переменные окружения: setenv WITH_APACHE_SUEXEC yes setenv APACHE_SUEXEC_DOCROOT /home setenv APACHE_SUEXEC_LOG /var/log/apache/suexec_log Устанавливам apache. cd /usr/ports/www/apache13 make install make clean Правим httpd.conf CustomLog /var/log/apache/access_log combined ErrorLog /var/log/apache/error_log AddHandler cgi-script .cgi .pl AddType text/html .shtml AddHandler server-parsed .shtml <Directory /home/*/*/public_html> Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec +ExecCGI AllowOverride All </Directory> <Directory /home/*/*/public_html/cgi> Options -Indexes AllowOverride All </Directory> NameVirtualHost a.b.c.d:80 <VirtualHost a.b.c.d:80> ServerName www.mysite.ru ServerAlias mysite.ru DocumentRoot /home/www/username/public_html ScriptAlias /cgi /home/www/username/public_html/cgi ServerAdmin email@user.ru ErrorLog /var/log/apache/www/username/error_log CustomLog /var/log/apache/www/username/error_log combined User username Group virtwww </VirtualHost> В принципе, вместо прописывания для каждого сервера конфигурации в httpd.conf можно использовать модуль mod_vhost_alias. Документация для него доступна на сайте http://httpd.apache.org. Устанавливаем ftp сервер. В данный момент одним из самых безопасных сверверов является pure-ftpd. К тому же, этот ftp сервер имеет возможность создания виртуальных пользователей. В целях повышения безопасности пароль для захода пользователя по ftp должен быть отличным от пароля для захода через ssh. cd /usr/ports/ftp/pure-ftpd setenv WITH_PGSQL=1 setenv WITH_PRIVSEP=1 make install Конфигурируем postgresql для хранения базы паролей. Запуcкаем шелл psql от суперпользователя PostgreSQL: psql -U pgsql template1 Создаем пользователя и базу данных для хранения паролей: Добро пожаловать в psql 7.3.4 - Интерактивный Терминал PostgreSQL. Наберите: \copyright для условий распространения \h для подсказки по SQL командам \? для подсказки по внутренним slash-командам (\команда) \g или ";" для завершения и выполнения запроса \q для выхода template1=# CREATE USER passwdmanager WITH ENCRYPTED PASSWORD 'njExk29sjJH' NOC REATEDB NOCREATEUSER; CREATE USER template1=# CREATE DATABASE passwdmanager WITH ENCODING='KOI8' OWNER=passwdmanager; CREATE DATABASE passwdmanager=# \c passwdmanager passwdmanager Вы теперь подсоединены к базе данных passwdmanager как пользователь passwdmanager. passwdmanager=> CREATE TABLE userinfo ( passwdmanager(> login varchar(16) NOT NULL, passwdmanager(> systempassword varchar(32) NOT NULL, passwdmanager(> ftp_uid int NOT NULL CHECK (ftp_uid > 1000), passwdmanager(> ftp_gid int NOT NULL CHECK (ftp_uid > 1000), passwdmanager(> ftp_quota_files int NOT NULL, passwdmanager(> ftp_quota_size int NOT NULL, passwdmanager(> ftp_home_dir varchar(255) NOT NULL, passwdmanager(> ftp_ul_ratio int NOT NULL DEFAULT 0, passwdmanager(> ftp_dl_ratio int NOT NULL DEFAULT 0, passwdmanager(> ftp_ul_bandwith int NOT NULL DEFAULT 0, passwdmanager(> ftp_dl_bandwith int NOT NULL DEFAULT 0, passwdmanager(> ftp_password varchar(32) NOT NULL, passwdmanager(> CONSTRAINT userinfo_p_key PRIMARY KEY(login) passwdmanager(> ); NOTICE: CREATE TABLE / PRIMARY KEY создаст неявный индекс 'userinfo_p_key' для таблицы 'userinfo' CREATE TABLE passwdmanager=> INSERT INTO userinfo (login, ftp_uid, ftp_gid, ftp_quota_files, passwdmanager(> ftp_quota_size, ftp_home_dir, ftp_ul_ratio, passwdmanager(> ftp_dl_ratio, ftp_ul_bandwith, ftp_dl_bandwith, passwdmanager(> ftp_password) passwdmanager-> VALUES ('stellar', 1002, 1002, 10000, passwdmanager(> 1000000, '/home/www/stellar', 0, passwdmanager(> 0, 0, 0, passwdmanager(> 'XXXXXXXXXXXXXXXX'); INSERT 298773 1 Настраиваем pureftpd-pgsql.conf PGSQLServer a.b.c.d PGSQLPort 5432 PGSQLUser passwdmanager PGSQLPassword njExk29sjJH PGSQLDatabase passwdmanager PGSQLCrypt md5 PGSQLGetPW SELECT ftp_password FROM userinfo WHERE login='\L' PGSQLGetUID SELECT ftp_uid FROM userinfo WHERE login='\L' PGSQLGetGID SELECT ftp_gid FROM userinfo WHERE login='\L' PGSQLGetDir SELECT ftp_home_dir FROM userinfo WHERE login='\L' PGSQLGetQTAFS SELECT ftp_quota_files FROM userinfo WHERE login='\L' PGSQLGetQTASZ SELECT ftp_quota_size FROM userinfo WHERE login='\L' PGSQLGetRatioUL SELECT ftp_ul_ratio FROM users WHERE login='\L' PGSQLGetRatioDL SELECT ftp_dl_ratio FROM users WHERE login='\L' PGSQLGetBandwidthUL SELECT ftp_ul_bandwith FROM users WHERE login='\L' PGSQLGetBandwidthDL SELECT ftp_dl_bandwith FROM users WHERE login='\L' Настраиваем pure-ftpd.conf PGSQLConfigFile /usr/local/etc/pureftpd-pgsql.conf Запускаем и тестируем # /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -fftp -H -I15 -lpgsql:/usr/local/etc/pureftpd-pgsql.conf -L2000:8 -m4 -s -U133:022 -u100 -w -k99 -Z zedd!stellar:~$ ftp localhost Trying ::1... Trying 127.0.0.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 13:53. Server port: 21. 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:stellar): 331 User stellar OK. Password required Password: 230-User stellar has group access to: stellar 230-This server supports FXP transfers 230-OK. Current restricted directory is / 230-0 files used (0%) - authorized: 10000 files 230 0 Kbytes used (0%) - authorized: 1024 Kb Remote system type is UNIX. Using binary mode to transfer files. Заключение. Разумеется, это не все действия, необходимые для настройки безопасного массового вебхостинга. И конечно это не единственный метод. Однако действуя подобно тому, как описано здесь, можно создать простой в администрации, удобный для клиентов и безопасный вебхостинг. Остается только добавить, что подобная схема успешно применяется с 2001 года на хостинговых площадках http://www.bizoppstats.com, http://www.akmosoft.com. Приложение. * Скрипт для автоматического заведения пользователей. © 2004 stellar. При воспроизведении материала поставьте ссылку на http://stellar.df.ru.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру