Брандмауэры и специальное программное обеспечение



Pdf просмотр
страница34/42
Дата15.02.2017
Размер6.16 Mb.
Просмотров3465
Скачиваний0
ТипАнализ
1   ...   30   31   32   33   34   35   36   37   ...   42
Листинг 20.4. Выражения и объявления, которые допускается использовать в рамках разделов файла httpd.conf
Options
None, Indexes, Includes, IncludesNoExec, FollowSymLinks, SymLinksIfOwnerMatch, ExecCGI, MultiViews, All.
AllowOverride
None, Filelnfo, AuthConfig, Limit, All
Order либо allow,deny, либо deny,allow
Allow
All или конкретные узлы, домены, сети, IP-адреса
Deny то же, что и для Allow
раздел, который должен замыкаться меткой и должен полностью входить в раздел
Аргументами являются: GET, POST, OPTIONS, PROPFIND, PUT, DELETE, PATCH, PROPPATCH,
MKCOL, COPY, MOVE. LOCK, UNLOCK и объявления: Order, Allow, Deny, как показано ранее.
- Аргумент None для любого объявления запрещает любые изменения для данного объявления.
- Аргумент АИ соответствует полному списку всех аргументов, допустимых для данного объявления.
Однако если вы хотите использовать аргумент MultiViews, вы должны явно добавить его к аргументу All, так как аргумент All для объявления Options не подразумевает использования MuitiViews.
- Аргумент Indexes разрешает клиенту просмотр содержимого каталога, если отсутствует документ
Directory-Index (как определено в файле httpd.conf). Чтобы ограничить просмотр одного или нескольких файлов, см. описание выражения далее.
- Аргумент Includes разрешает включать в состав файла другие файлы, даже если эти файлы расположены вне каталога DocumentRoot или каталога, являющегося псевдонимом. Таким образом можно
обеспечить выполнение файла, включенного в include. Эта возможность чрезвычайно опасна и должна использоваться с особой осторожностью.
- Аргумент IncludeNoExec разрешает включение файлов в состав других файлов, однако запрещает исполнять эти файлы. Это более безопасная альтернатива аргумента Includes.
- Аргумент FollowSymLinks разрешает клиентам перемещаться по символическим ссылкам, указывающим на ресурсы вне текущего дерева каталогов. Этот аргумент является таким же опасным, как и аргумент Includes.
- Аргумент SymLinksIfOwnerMatch — обеспечивает значительно более безопасный способ обработки символических ссылок. Разрешает следовать по ссылке только в случае, если пользователь является владельцем ресурса. Непривилегированные пользователи редко когда владеют чем-либо, расположенным за рамками непривилегированных каталогов, поэтому аргумент SymLinksIfOwnerMatch обеспечивает гибкость (в особенности внутри пользовательских каталогов) и при этом не снижает безопасность так, как это делает аргумент FollowSymLinks.
- Аргумент ExecCGI — это еще один весьма опасный аргумент, который разрешает исполнение файлов. Если эти файлы являются файлами SUID, они запускаются от лица владельца файла. Используя этот аргумент, следует быть осторожным, размещая файлы в каталоге.
- Аргумент MultiViews разрешает серверу обсудить с клиентом возвращаемое в ответ на запрос содержимое в случае, если запрашиваемый клиентом файл не существует. Этот аргумент на самом деле создает в системе безопасности огромную дыру, так как сервер и клиент получают возможность договориться о том, какой файл будет передан в ответ на запрос. Вы не обладаете никаким контролем над данным процессом, единственное, что вы можете сделать, это наложить ограничения на то, какие файлы содержатся в данном каталоге.
ВНИМАНИЕ
Будьте очень осторожны в отношении аргументов Includes, FollowSymLinks, ExecCGI и MultiViews. Везде, где это
возможно, используйте более безопасные аргументы IncludesNoExec и SymLinksIfOwnerMatch. Избегайте
использования MultiViews.
- Объявление AllowOverride должно использоваться с осторожностью, так как в результате его использования могут возникнуть проблемы с безопасностью.
- Аргумент Options позволяет использовать файл .htaccess для изменения специальных параметров, определенных для данного каталога. Если вы не хотите использовать некоторые из параметров, вы не должны указывать AUowOverride Options или ALL
- Аргумент Filelnfo разрешает вносить изменения в сведения о файловом типе, как объявлено (или нет) в файле http.conf. Этот аргумент также позволяет изменять значки, которые используются для обозначения определенных файловых типов.
- Аргумент AuthConfig позволяет использовать в отношении подкаталога механизмы управления доступом, благодаря чему перед тем, как разрешить пользователю вход в каталог, система будет просить его аутентифицировать себя. Об этом будет подробнее рассказано далее.
- Аргумент Limit позволяет ограничивать изменения ограничений, объявляемых внутри файла
.htaccess.
ВНИМАНИЕ
Объявление AUowOverride может как расширить, так и сузить возможности контроля текущего каталога.
Некоторые специальные аргументы, такие как All, Options или Limit, следует использовать с осторожностью.
- Имя директивы Order (порядок применения) говорит само за себя — эта директива определяет порядок применения политик.
- Директивы Allow и Deny, доступ к которым осуществляется с использованием директивы Order, могут использоваться для того, чтобы наложить ограничения на местоположение клиентов, имеющих право обращения к системе. Это можно сделать множеством способов. Однако следует иметь в виду, что при перенап равлении клиентов с использованием механизма proxy сервер Apache может подумать, что все клиенты обращаются к серверу из одного места — proxy (такое поведение зависит от используемого proxy). При некоторых условиях директивы Allow и Deny могут обрабатываться не так, как вы этого ожидаете. Чтобы обеспечить их правильную обработку, убедитесь в том, что программное обеспечение proxy передает соединения клиентов абсолютно прозрачно.
- Выражение позволяет гибко настраивать систему доступа к каталогу таким образом, что в
рамках этого каталога некоторые действия будут разрешены, в то время как некоторые другие действия будут запрещены. Внутри угловых скобок выражения указывается разделенный пробелами список аргументов. Специальные объявления Order, Allow from и/или Deny from размещаются между метками и
. Совместно с допускается использовать следующие аргументы (методы):
GET — загрузить файл (через HTTP или FTP);
POST — разместить информацию в форме;
PUT — передать на сервер файл через FTP;
DELETE — удалить файл;
CONNECT — любое соединение;
OPTIONS — наложить ограничения на допустимые параметры;
TRACE — включить трассировку;
PROPFIND — получить свойства документа;
PATCH — изменить файл;
PROPATCH — изменить свойства документа;
COPY — скопировать файл;
MOVE — переместить файл;
LOCK — блокировать доступ к файлу со стороны других процессов;
UNLOCK — снять блокировку с файла.
Предполагается, что выражения Directory, расположенные ниже выражения Directory, относящегося к
DirectoryRoot, относятся к каталогам, которые являются частью корневого каталога документов (DirectoryRoot).
Иными словами, подразумевается, что указанный в выражении Directory подкаталог входит в иерархию каталогов, начинающуюся с DirectoryRoot. Однако выражение Directory можно отнести также и к какому-либо каталогу, который не входит в DirectoryRoot. Для этого перед этим выражением Directory следует разместить одно из трех специальных объявлений. Эти объявления перечисляются далее. Каждое из них принимает два аргумента. Первый аргумент — это аргумент доступа к каталогу — некоторая последовательность символов, которую клиент указывает в качестве составной части URL для того, чтобы получить доступ к каталогу. Второй аргумент — это местоположение каталога в файловой системе. Именно туда Apache будет перенаправлять клиентов. Аргумент доступа к каталогу, как правило, указывается в форме /cgi-bin/, а местоположение каталога
— это полный путь к этому каталогу в файловой системе
Linux. Местоположение может указываться в форме
/home/httpd/cgi-bin/. Специальные объявления это:
- Alias (псевдоним) — позволяет перенаправлять клиента к некоторому специальному месту в файловой системе;
- ScriptAlias — то же, что и Alias, однако предполагается, что каталог обладает разрешением ExecCGI
(это разрешение должно быть явно указано в соответствующем выражении );
- UserDir — домашний каталог пользователя, доступ к которому, как правило, осуществляется при помощи метки /
имя_пользователя/.
Еще одним полезным выражением, похожим на выражение , является выражение .
В выражении указывается разделенный пробелами список аргументов. По умолчанию в файле httpd.conf содержатся две записи: «
» и «\ .ht». Первая запись соответствует файлам, в именах которых содержится символ тильды (
). Эта запись, как правило, используется программами, которые создают резервные копии файлов. Вряд ли вы захотите, чтобы клиенты обладали доступом к этим устаревшим версиям файлов. Вторая запись является регулярным выражением (regular expression, regex). Оно соответствует всем файлам, в именах которых первые три символа являются символами .ht. Первый символ регулярного выражения — стрелочка вверх (^) — обозначает первый символ имени. Второй символ — обратная косая (\) — является esc-символом. Этот символ сообщает системе, что она не должна выполнять специальную интерпретацию символа, следующего за данным. Иными словами, символ, расположенный сразу же после символа обратной косой, не интерпретируется как спецсимвол, а рассматривается как обыкновенный символ. Сразу же за символом обратной косой стоит символ точки (.). В регулярных выражениях символ точки имеет специальное значение — им обозначают любой символ (подобно символу вопросительного знака ? при работе с командной оболочкой bash). Однако в данном случае имеется в виду именно символ точки, а не любой допустимый символ, поэтому чтобы отключить специальную интерпретацию этого символа, перед ним поставлен esc-сим-вол обратной косой черты. Определив таким образом в выражении некоторый набор файлов, вы можете разместить в разделе начиная с метки
и заканчивая меткой директивы Order с объявлениями Allow и/или Deny, благодаря чему вы получаете возможность контролировать доступ к заданным файлам.
В файле httpd.conf используется также объявление AccessFilesName, которое располагается, как правило, до выражения и указывает имя файла .htaccess, в котором содержится информация об изменениях (если такие изменения разрешены) правила доступа в рамках данного каталога. Если вы меняете это имя файла, вы должны также изменить соответствующее выражение , в противном случае любой желающий сможет прочитать данный файл (и, если ему разрешена запись в каталог,
модифицировать или заменить данный файл).
Еще одним важным объявлением является директива DirectoryIndex, которая имеет большое значение для каталогов, содержимое которых не разрешается просматривать напрямую. В данном объявлении через пробел перечисляются допустимые имена так называемых индексных файлов. Если клиент обращается к серверу, указывая в URL только лишь имя каталога (а не конкретный файл), система произведет в указанном каталоге поиск файлов, на которые указывает директива DirectoryIndex. Поиск имен файлов будет производиться в том порядке, в котором они указаны в директиве DirectoryIndex.
Первый подходящий обнаруженный системой файл будет передан в ответ на запрос пользователя. Если ни одного из указанных в директиве DirectoryIndex файлов обнаружить не удалось, сервер передаст клиенту список файлов в данном каталоге (если это разрешено). Если передача содержимого каталога клиенту запрещена, сервер вернет клиенту сообщение об ошибке. Если вы используете РНРЗ, выражение
DirectoryIndex для вашего сервера может выглядеть следующим образом:
Directorylndex index.html index.php3 index.phtml
Кроме того, возможно, вы захотите добавить и расширить ранее закомментированную строку:
AddType application/x-httpd-php3 .php3 .phtml
Эта строка разрешает использование файлов РНРЗ, обладающих расширениями либо рhрЗ, либо phtml.
Следующие три директивы разрешают использование на сервере CGI и/или HTML-документов, грамматический разбор которых выполняется на стороне сервера. Директива CGI разрешает запуск сценариев CGI из каталогов, которые не объявлены как ScriptAlias. Если каталог объявлен как ScriptAHas, для него не требуется использовать директиву CGI.
#AddHandler cgi-script .cgi
#AddType text/html .shtml
#AddHandler server-parsed .shtml
Комбинация двух последних директив объявляет тип файлов shtml и предписывает серверу выполнять грамматический анализ HTML-файлов на стороне сервера. Возможность грамматического анализа на стороне сервера добавляет вашему серверу гибкости, однако также увеличивает риск. Как директива CGI, так и директивы shtml снижают уровень защиты сервера и часто используются злоумышленниками для того, чтобы получить доступ к системе. Для некоторых web-узлов эти директивы являются необходимостью, однако если вы можете обойтись без CGI и грамматического разбора на стороне сервера, вы не должны использовать данные директивы.
Чтобы защитить вашу систему от непреднамеренных ошибок в конфигурации, добавьте в нее следующее выражение:

Order deny,allow
Deny from all

Это выражение запрещает кому-либо намеренный или непреднамеренный просмотр всей вашей файловой системы. Связанные с этим предупреждения содержатся в разделе «Дополнительные замечания,
связанные с безопасностью» далее в данной главе.
Также будет лучше, если вы отключите доступ к пользовательскому каталогу учетной записи root.
Для этого используется следующая простая директива:
UserDir disabled root

Записи SSL
Если вы компонуете Apache с использованием модуля mod_ssl, в конец файла httpd.conf добавляется раздел, который имеет отношение к SSL.
ВНИМАНИЕ
Прежде чем приступить к использованию вашего сервера SSL, вы обязаны выполнить настройку этого раздела.
Значения некоторых параметров следует оставить такими, какие они есть. Ранее у вас уже была возможность изменить номер порта, через который сервер будет ожидать поступления новых соединений.
Данные, которые необходимо заменить в первую очередь, располагаются в разделе .
Выражение VirtualHost содержит в себе метку _default_, которая указывает на то, что система будет
использовать следующие далее записи, если только для SSL-сервера, к которому клиент обращается по имени, не существует другого раздела VirtualHost, в котором указываются другие параметры. Вам также потребуется изменить номер порта для того, чтобы он соответствовал любым сделанным вами ранее изменениям.
Для данного узла набор параметров General будет выглядеть в точности так же, как и для обычной, не защищенной части HTTP-сервера. Это означает, что защищенный корневой каталог web-документов
(DirectoryRoot) совпадает с незащищенным корневым каталогом web-документов.
ВНИМАНИЕ
Использование одного и того же корневого каталога Web-документов как для защищенной, так и для незащищенной
части web-сервера — плохая идея. Директива DirectoryRoot защищенного сервера ни в коем случае не должна
указывать на тот же самый каталог, что и директива DirectoryRoot незащищенного сервера. Эти два каталога не
должны совпадать и не должны обладать общими подкаталогами. Два соответствующих дерева подкаталогов
должны существовать полностью отдельно друг от друга, в противном случае создание защищенного web-сервера
теряет смысл.
Разделить два дерева подкаталогов можно несколькими методами. Например, для незащищенной части web-сервера можно использовать каталог /home/httpd/ htdocs, а для защищенной части сервера создать параллельную структуру каталогов с другим именем (например secure). В частности, вы можете создать подкаталог secure в каталоге httpd и в качестве защищенного корневого каталога документов использовать каталог /home/httpd/secure. Другой вариант предусматривает создание двух раздельных подкаталогов в каталоге htdocs. Их можно назвать secure и nonsecure или public и private. Вам потребуется внести соответствующие изменения в конфигурацию обычного и защищенного web-серверов.
Для каждого из этих каталогов можно создать отдельный подкаталог cgi-bin. Это не является обязательным условием, однако если ваш незащищенный web-сервер использует множество сценариев
CGI, возможно, вы не захотите, чтобы эти сценарии можно было запустить на стороне защищенного сервера.
Значение параметра ServerName может быть одним и тем же для обоих серверов, так как для обращения к защищенному серверу клиент будет использовать префикс https, а для обращения к незащищенной стороне будет использоваться обычный префикс http.
Возможно, будет более удобным, если вы будете использовать для защищенной и незащищенной стороны вашего сервера раздельные журналы ошибок и трансферов, однако, опять же, это не является обязательным и может быть реализовано на ваше усмотрение.
Многие параметры, о которых говорилось ранее, могут применяться также и в отношении защищенной стороны вашего сервера. Я надеюсь, что читатели смогут самостоятельно освоить использование этих параметров.
ВНИМАНИЕ
Если ваш защищенный и незащищенный web-серверы работают на одном и том же компьютере и один из этих
серверов был взломан, можете считать, что второй сервер столь же уязвим. Будьте чрезвычайно осторожны в
выборе сценариев CGI и параметров, действующих на незащищенной стороне вашего web-сервера.
В отношении Apache можно использовать множество других, более совершенных возможностей, однако я не буду описывать их в данной книге. К таким возможностям относятся директивы ограничения используемых шифров (таких как idea) и директивы определения уровня кодирования, который требуется от клиентов (например, запрещение 40-битных шифров), и т. п. Более подробно об этом можно узнать из электронной документации Apache.
Первые запуск и обращение к Apache
После того как вы внесли в конфигурацию сервера описанные ранее изменения и разместили в защищенном дереве каталогов по крайней мере один файл index, html, вы можете приступить к проверке механизмов доступа к web-содержимому. И если файл index.html защищенного сервера отличается от файла index.html незащищенного сервера, вы сможете со всей очевидностью обнаружить любые возникающие проблемы.
Для начала запустите Apache в качестве незащищенного сервера. Для этого можно использовать команду apachectl start. После этого запустите web-браузер и обратитесь по адресу http://localhost/, чтобы убедиться в том, что web-сервер функционирует. Если вы выбрали порт, номер которого отличается от номера по умолчанию 80 (например 8080), вы должны указать номер используемого сервером порта в составе URL (например, http://localhost:8080/). Если браузер отобразит корректную индексную HTML-
страницу, значит, половина вашего сервера работает нормально. Если система сработает некорректно, обратитесь к файлам журналов для того, чтобы понять, в чем проблема. Если все работает нормально, остановите сервер командой apachectl stop.
Теперь запустите web-сервер Apache с поддержкой SSL. Для этого необходимо использовать команду apachectl startssl. Если при создании серверного сертификата вы указали ключевую фразу, при запуске сервера Apache в режиме SSL система попросит вас ввести эту фразу. После того как сервер
Apache начал работу, прежде всего обратитесь к незащищенной web-странице так, как это было описано в предыдущем абзаце, — это необходимо для того, чтобы убедиться, что незащищенная часть сервера, как и прежде, работает нормально. После этого в строке адреса вашего браузера введите URL: https://localhost/.
Обратите внимание на присутствие буквы «s» в названии протокола https. Если вы используете порт, отличающийся от порта по умолчанию 443 (например, 8443), вы должны указать номер этого порта в составе URL (например, https://localhost:8443/). Если все работает так, как должно, на экране перед вами появится диалоговое окно New Site Certificate (сертификат нового узла). Это диалоговое окно появляется на экране потому, что ваш браузер не распознает авторитетный сертифицирующий орган, который является источником данного сертификата. Используя появляющиеся на экране диалоговые окна, сообщите системе всю необходимую информацию (например, срок использования сертификата) и примите сертификат. Если вы создали сертификат для некоторого конкретного имени сетевого узла, на экране появится сообщение о том, что указанный вами сетевой узел (localhost) не соответствует имени узла, которое содержится внутри сертификата. Это нормально. Если вы обратитесь к серверу, используя в точности то же имя, которым вы пользовались при создании серверного сертификата (о создании серверного сертификата было рассказано ранее в данной главе), предупреждение о несоответствии имен на экране не появится. Убедитесь в том, что сервер обращается к правильному корневому каталогу web- документов. Если все работает нормально, вы можете приступить к использованию вашего защищенного web-сервера.
Использование файлов .htaccess
Файл .htaccess может содержать множество разнообразных параметров и может использоваться для множества различных целей. Прежде всего, этот файл может использоваться для ограничения доступа к некоторому каталогу. Если вы хотите, чтобы доступом к каталогу обладали только лица, обладающие определенными именами и паролями, вы можете реализовать это с использованием файла .htaccess.
Прежде всего вы должны отредактировать файл /etc/httpd/conf/httpd.conf. Добавьте в этот файл выражение , в котором содержится объявление Allow/Override Authconfig. Этим вы разрешаете использование в отношении данного каталога специального механизма авторизации. Не забудьте выполнить команду apachectl restart для того, чтобы приказать серверу заново прочитать содержимое конфигурационных файлов.
После этого создайте файл .htaccess. При создании необходимо добавить в файл .htaccess четыре строки, показанные в листинге 20.5. В первой строке содержится ключевое слово AuthName и имя. Имя может быть любым, однако оно должно быть по смыслу связано с той информацией, доступ к которой вы защищаете. Параметр AuthType всегда имеет значение Basic. Параметр AuthUserFile должен указывать на файл, который вы намерены использовать для аутентификации клиентов. Файл аутентификации клиентов создается с использованием htpasswd. В последней строке содержится директива require valid-user.
Листинг 20.5. Файл .htaccess
AuthName "foo"
AuthType Basic
AuthUserFile /путь/к/.htpasswd require valid-user
Файл .htaccess может использоваться также для того, чтобы расширить или изменить любые из директив файла /etc/httpd/conf/httpd.conf для данного каталога. Для этого вы должны.внести в раздел
для данного каталога объявление AllowOverride Options. Формат файла .htaccess в точности совпадает с форматом файла httpd.conf, и фактически любые записи, которые используются в файле httpd.conf, могут быть использованы также в файле .htaccess.
Дополнительные замечания, связанные с безопасностью
Некоторые выражения, которые допускается использовать в файле httpd.conf, не обсуждались ранее, так как они не используются в конфигурационном файле по умолчанию. Эти выражения имеют отношение
к выражениям Directory и Files. К этим дополнительным выражениям относятся выражения DirectoryMatch,
FilesMatch, Location и LocationMatch. Синтаксис этих выражений совпадает с синтаксисом выражений
Directory и Files, однако добавка Match указывает на то, что в составе этих выражений используются аргументы, являющиеся регулярными выражениями (regular expression, regex). Аргументы, являющиеся регулярными выражениями, отличаются от обычных аргументов. Дополнительно об использовании этих аргументов рассказывается в электронной документации.
ПРИМЕЧАНИЕ
Термин гедех обозначает regular expression — регулярное выражение. В Linux регулярные выражения используются
для описания некоторого символьного шаблона. В рамках этого шаблона допускается использовать специальные
символы (такие как * и ?) для того, чтобы указать неопределенный символ или набор символов. При помощи
регулярных выражений вы можете специфицировать строки, начинающиеся с определенного набора символов,
заканчивающиеся определенным набором символов, содержащие в себе определенный набор символов и т. п. Более
подробно о регулярных выражениях и методах их использования можно узнать из книги, посвященной
программированию sed, awk или Perl. Регулярные выражения — это чрезвычайно мощный и очень гибкий механизм,
однако для новичков овладение этим механизмом может оказаться непростым делом.
Необходимо отметить, что выражения Location и LocationMatch соответствуют не файлам и каталогам, a URL. Также необходимо отметить порядок, в котором обрабатываются все эти выражения.
Любое выражение Directory обрабатывается в первую очередь. Если следующее за ним выражение Files содержит в себе конфигурационные значения, которые противоречат заданным в рамках выражения
Directory, директивы Directory будут перекрыты директивами Files. Иными словами, выражение Files обладает более высоким приоритетом. В этом есть смысл, так как файл является более специфичным элементом файловой системы, чем весь каталог. Выражение Location перекрывает собой как выражения
Directory, так и выражения Files. Такое распределение приоритетов менее очевидно, так как местоположение URL является виртуальной концепцией, в отличие от каталогов и файлов. Выражение
Location обеспечивает большую гибкость, однако повышает сложность конфигурирования. Применив выражение Location, вы непреднамеренно можете перекрыть директивы, определенные с использованием
Directory и Files. Используя выражения Location, будьте внимательны и осторожны.



Поделитесь с Вашими друзьями:
1   ...   30   31   32   33   34   35   36   37   ...   42


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал