Конфигурирование
главного сервера
На Apache-сервере можно
создать сколько угодно виртуальных хостов. Но каждый Apache-сервер требует главного
хоста. Директивы в секции главного сервера определяют параметры по умолчанию
для главного хоста, равно как и любые директивы, не заданные в рамках любого
виртуального хоста.
Port
Команда Port - второй важный
элемент. Подразумевается, что по умолчанию Web-сервер работает с 80-м портом.
Когда браузер запрашивает URL без порта, он подразумевает, что URL запрашивается
с сервера через порт 80. Если вы используете брандмауер с высоким или средним
уровнем защиты, удостоверьтесь в том, что он настроен на разрешение приема WWW-данных,
как описано в гл. 31.
Из-за уязвимости процессов,
работающих с номерами портов меньше 1024, можно попробовать запустить сервер
чеоет порт с номером выше 1024 (если запускается Web-сервер с ограниченным
доступом по сети internet
и необходимо избежать риска, связанного с номерами портов меньше 1024). Обычно
для таких Web-серверов используются порты 8000 и 8080, но можно выбрать любой
свободный порт. Если вы используете брандмауер с высоким уровнем защиты, удостоверьтесь
в том, что он настроен на разрешение приема WWW-данных для выбранного порта.
Настраивая свой брандмауер с помощью утилиты lokkit, описанной в главе Chapter
31, при использовании порта 8080, введите 8080 :udp, 8080: top в поле Other
Ports (Другие порты) в разделе Customization (Настройка).
User
И Group
Команды User и Group -
критические элементы, так как они оказывают существенное влияние на безопасность
системы. Обычно httpd запускается как root, но этот процесс не прослушивает
соединения. Чаще этот процесс запускает один или несколько дочернюифоцессов
user и group (указанные именем либо iD-номером), определенных этими командами
конфигурации.
Запуск процессов Web-сервером,
включая программы CGi, в режиме root является огромным риском, особенно если
плохо написанный сценарий CGi оставляет большие бреши в защите. Запустив Web-сервер
и связанные с ним дочерние процессы под именем пользователя с ограниченными
привилегиями, можно снизить опасность успешных атак на сервер.
Обычно Web-сервер запускают
под именем apache группой apache или #-1. Автор книги чаще всего использует
имя apache и группу apache, так как их легко илентифицировать при чтении файла
конфигурации. Это имя (apache) имеет ограниченные привилегии в системе и потенциальный
хакер может нанести ограниченный вред, если сценарий CGi позволит ему прорваться
в систему.
ServerAdmin
Эта команда устанавливает
электронный адрес администратора Web-сайта. Когда сервер генерирует автоматическое
сообщение об ошибке, например, об отсутствии запрашиваемой страницы, то этот
электронный адрес добавляется к странице, сообщающей, к кому нужно обращаться
для извещения об ошибке. Убедитесь, что это правильный адрес, который действительно
является адресом администратора сервера.
ServerName
Команда ServerName устанавливает
имя хоста, возвращаемое клиентам с запрашиваемыми страницами. Это должно быть
одно из допустимых имен сервера в соответствии с DNS-записью или таблицей хостов
сети. В среде intranet имя хоста можно определить в таблицах хостов, используя
NiS, либо на сервере DNS вашего сайта. Для Web-сервера intranet нужно убедиться,
что указанное в этой команде имя допустимо в DNS-записи вашего домена. Если
уверенности в этом нет, уточните у администратора записей имен доменов.
В этом примере для ServerName
задано значение localhost. Если у вас есть свой домен, вы можете изменить это
имя на имя Интернет-домена, например, mommabears. com.
DocumentRoot
Команда DocumentRoot указывает
местоположение корневого каталога для файлов HTmL. Для Red Hat Linux 7.1 по
умолчанию это каталог /var/www/html. Если для ServerName задано значение mommabears.
com, клиент с браузером должен иметь возможность получить доступ к файлу /var/www/html
/file, html, используя URL-адрес http: //www.mommabears.com/ file.html.
Разрешение
каталога HTmL
Приведенный далее код является
разделом примера файла httpd. conf, имеющего отношение к корневому каталогу
f-HTmL-документов. Комментарии удалены.
<Directory
/var/www/html>
Options indexes
includes followSymLinks
AllowOverride
None
order allow,deny
allow from all
</Directory>
Структура этого элемента
такова, что необходимые команды помещаются между открывающим и закрывающим дескрипторами
<Directory> и </Directory> соответственно. Открывающий дескриптор
указывает каталог, на который распространяются все команды, находящиеся между
дескрипторами, в данном случае /var/www/html.
Обратите внимание: между
дескрипторами <Directory> и </Directory> находятся четыре команды.
Команда Options указывает,
какие специальные действия можно выполнить с файлами, находящимися в каталоге
и его подкаталогах. Возможны значения None, All, indexes, includes, followSymLinks,
ExecCGi и multiViews. Для HTmL каталогов обычно используются значения None,
когда на сайте находятся только обычные файлы HTmL и рисунки, и includes, если
планируется разрешить серверу обработку HTmL. (Некоторые обрабатываемые сервером
файлы HTmL позволяют включать другие файлы в содержимое HTmL-файла, и эта опция
разрешает такое действие).
Следующая команда, AllowOverride,
указывает, как влияет локальный файл . htaccess на переопределение элементов
файла глобального доступа httpd. conf. Возможны значения None, All, Options,
fileinfo, AuthConfig и Limit. Например, величина Options ограничивает возможности
файла .htaccess переопределением команды Options. На тех серверах, где Web-мастер
полностью контролирует содержимое, проще всего санкционировать файлу httpd.
conf полное право переопределения. Если имеется сервер с несколькими пользователями,
которые контролируют состав своих собственных каталогов, будет разумно ограничить
их привилегии по переопределению конфигурации глобального доступа.
Команды order и allow используются
вместе для определения тех, кто имеет доступ к страницам каталога. Приведенная
в примере команда order al low, deny указывает, что сначала следует использовать
команду allow и, если она не позволяет пользователю получить требуемый файл,
то тогда применяется команда deny.
Обычно приходится использовать
order allow, deny, если не применяется управление доступом. Если необходимо
решшзовать управление доступом, то order deny, allow является лучшей командой
(это станет понятно позже при построении небольшого Web-сайта с контролем доступа).
После команды order находится
команда allow, которая указывает, что всем пользователем разрешается доступ.
Чтобы узнать, как запретить доступ пользователей, прочтите документацию по Apache
(http: / /httpd. apache. org).
UserDir
UserDir полезна тогда,
когда Web-мастер разрешает каждому пользователю системы иметь собственную Web-страничку.
Пользователь организовывает свою Web-страничку в подкаталоге, находящемся в
его домашнем каталоге. Эта команда указывает имя подкаталога в домашнем каталоге
пользователя, который нужно принимать за его Web-каталог.
Обычно используется public_html.
Поэтому если у пользователя testuser есть каталог /home/ testuser/public_html,
то к этому каталогу можно получить доступ через Web, используя URL
http://servername/
~testuser.
Directory-index
Directory index указывает,
какие файлы должны приниматься как индексные. Это позволяет для такого URL,
как http: / /www. mommabears. com получить доступ к нужному файлу.
В примере httpd.conf имеется
семь элементов в Directorylndex: index.html, index.htm, index.shtml, index.php,
index.php4, index.php3 и index.cgi. Это означает, что для любого URL, в котором
не указано имя файла, а только имя каталога, сервер сначала попробует вернуть
файл index. html из указанного каталога. Если такого файла нет, будет передан
файл index. htm; если этого файла нет, то клиенту будет передан файл index.
shtml и т.д. - вплоть до последнего седьмого.
Если ни один файл не найден,
то сервер возвращает листинг каталога либо сообщение об ошибке, в зависимости
от других настроек конфигурации.
AccessfileName
AccessfileName используется
для указания имени файла, содержащего информацию управления доступом для данного
каталога. Можно хранить информацию управления доступом в конфигурационном файле
httpd. conf или в файлах . htaccess в каждом каталоге.
В примере указано, что
если в каталоге есть файл . htaccess, то он содержит информацию управления доступом
для каталога.
ScriptAlias
Очень важно корректно использовать
команду ScriptAlias, чтобы указать каталог размещения программ CGi и сценариев.
ScriptAlias указывает, какой каталог используется для сценариев CGi, и какой
URL соответствует этому каталогу. Это единственное место, куда можно поместить
программы CG1, пока не будут назначены другие условия для запуска CGl-программ
по расширениям (как это выполнено далее посредством команды AddHandler).
В примере, приведенном
выше, используется следующая команда.
ScriptAlias /cgi-bin/
"/var/www/cgi-bin"
Эта строка показывает,
что URL http: //www.moramabears.com/cgi-bin/ соответствует /var/www/cgi-bin/.
Подразумевается, что все файлы в этом каталоге являются сценариями CGi и сервер
пытается запустить их, вместо того, чтобы возвратить их запрашиваемому клиенту.
Разрешение
каталога CGi
По сравнению с описанием
HTmL-каталога, приведенным ранее, описание CGi-каталога выглядит несколько иначе:
<Directory /var/www/cgi-bin>
AllowOverride None Options ExecCGi Order allow,deny Allow from all
</Directory>
Обратите внимание, что
все переопределения запрещены. Это вполне разумно, поскольку CGi представляет
собой брешь в защите даже для хорошо сконфигурированной системы. Такой подход
позволяет избежать различных ошибок защиты, связанных с CGi-каталогами.
AddHandler
и AddType
Команды AddHandler и AddType
нужно рассматривать вместе.
AddHandler позволяет отождествить
файлы, имеющие указанное расширение, с определенным действием, которое можно
реализовать как встроенное в сервере (например, запуск программ CGi), или как
внешнее действие, обычно вызывающее специальную программу вне сервера и передающее
запрашиваемый файл.
AddType создает новый тип
mimE для указанного расширения. Типы mimE важны для указания клиенту, как нужно
обращаться с файлом. Например, если в браузер передается файл с типом mimE text
/plain, то браузер не интерпретирует код HTmL в этом файле, в то время как тип
mimE text /html заставляет браузер обрабатывать принимаемый файл как файл HTmL.
Эти команды обычно применяются
для того, чтобы разрешить выполнение сценариев CGi вне указанного каталога CGi-сценариев
и разрешить серверу обрабатывать HTmL, что позволяет обрабатывать встроенные
в HTmL-файл специальные дескрипторы перед возвращением страницы.
Разрешение
сценариев CGi
Вы можете использовать
команду AddHandler, чтобы разрешить обработку CGi вне заданного для CGi каталога.
В примере файла httpd. conf используется команда
AddHandler cgi-script
.cgi
которая указывает, что
любой файл с расширением .cgi вне заданного каталога CGi должен рассматриваться
как программа CGi и обязательно обрабатываться. Без этой команды любой
сценарий CGi, находящийся
вне каталога CGi, не рассматривается как программа CGi. Клиенту просто будет
возвращено содержимое файла: пользователь увидит фактический^код программы сценария,
а не результаты его выполнения.
Разрешение
обработки HTmL для сервера
Для этого используются
обе команды - AddHandler и AddType- Для Apache обычно указывается:
AddType text/html
.shtml AddHandler server-parsed .shtml
Здесь AddType гарантирует,
что результат обработки сервером файла HTmL (эти файлы имеют расширение . shtml)
рассматривается браузером клиента как файл HTmL и отображается соответственно.
Строка AddHandler указывает, что файлы с расширением . shtml обрабатываются сервером. Это эффективно разрешает обработку сервером HTmL для файлов . shtml.