Настройка apache 1.3.X для массового виртуального вебхостинга.
Написав    П'ятниця, 08 червня 2007, 10:47    PDF Друк e-mail
Адміністрування

    Теория
Для создания полноценного сервера вебхостинга необходимо выполнить как
минимум следующие условия:

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 0755 /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/cgi

Здесь владелец может делать что угодно.

Создаем каталог для лог-файлов. Строго говоря, лог-файлы следует

хранить в отдельном разделе, во избежание переполнения /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 Ця електронна адреса захищена від спам-ботів, Вам потрібно включити JavaScript для перегляду

ErrorLog /var/log/apache/www/username/error_log

CustomLog /var/log/apache/www/username/error_log combined

</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' NOCREATEDB 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.  

 

Останнє оновлення ( Понеділок, 03 вересня 2007, 03:39 )
 

Відвідування

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterСьогодні100
mod_vvisit_counterВчора205
mod_vvisit_counterЗа цей тиждень887
mod_vvisit_counterЗа минулий тиждень1459
mod_vvisit_counterЦього місяця2951
mod_vvisit_counterПопереднього місяця5862
mod_vvisit_counterВсього564622

Кількість користувачів: 7
Ваш IP: 54.196.47.128
,
Сьогодні: лист. 17, 2017