Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
□ KeepAlive — разрешение обрабатывать несколько запросов за одно соединение. По умолчанию этот параметр выключен (off), и для получения каждого файла требуется отдельное соединение. Это неэффективно и приводит к расходу лишних ресурсов. Допустим, что пользователь запросил страницу с 10 картинками. В ответ на это браузер клиента страницу с 10 картинками. В ответ на это браузер клиента откроет одиннадцать соединений с Web-сервером (одно для получения документа html и десять — для картинок документа). Если включить этот параметр, то за одно подключение может быть обработано несколько запросов;
□ MaxKeepAliveRequests — максимальное число запросов, которое может быть выполнено в течение одного соединения;
□ KeepAliveTimeout — время ожидания в секундах очередного запроса от одного и того же клиента. Если за указанный период запрос не поступит, то соединение завершается;
□ MaxClients — максимальное количество клиентов, которые могут подключиться одновременно. Если сделать это значение слишком большим, то злоумышленник сможет произвести атаку DoS (отказ от обслуживания), открыв слишком много соединений, с которыми не справится сервер. По умолчанию установлено 150, но этого будет достаточно только для небольшого сервера. Apache способен обработать намного больше даже на слабеньком железе. Вы должны указать такое значение, при котором сервер сможет обрабатывать максимальное число запросов и при этом успешно работать (не зависнуть) с предельной загрузкой;
□ MaxRequestsPerChild — число запросов, которое позволено обрабатывать дочернему процессу до переполнения. Если Apache или используемые им библиотеки допускают некорректную работу с памятью (выделяют, но не освобождают) или другими ресурсами, то во избежание проблем при длительной непрерывной работе сервера дочерний процесс при переполнении будет принудительно завершен. Большинству систем это не требуется, но некоторые (например, Solaris) страдают заметными "утечками" в библиотеках.
7.2. Модули
При настройке сервиса Apache очень важным звеном являются модули. Загрузка их описана в конфигурационном файле /etc/httpd/conf/httpd.conf следующим образом:
<IfDefine HAVE_PERL>
LoadModule perl_module modules/libperl.so
</IfDefine>
В первой строке проверяется параметр HAVE_PERL. Если он установлен, то команда LoadModule загружает модуль modules/libperl.so, необходимый для интерпретации Perl-сценариев.
Следом идет подключение модулей, которое похоже на загрузку, но используется команда AddModule:
<IfDefine HAVE_PERL>
AddModule mod_perl.c
</IfDefine>
По умолчанию загружаются все установленные модули или те, которые включены в дистрибутив. Но ото не оптимально, потому что разработчик не может знать, что нам понадобится. Рассмотрим основные модули поддержки сценариев, которые могут загружаться:
□ perl_module — Perl;
□ php_module — PHP;
□ php3_module — PHP версии 3;
□ php4_module — PHP версии 4:
□ python_module — на языке Python.
Эти модули являются наиболее опасными для Web-сервера, потому что позволяют выполнять сценарии, через которые могут происходить взломы. Например, воспользовавшись ошибкой в сценарии PHP, злоумышленник может выполнять какие-либо команды на сервере. Хорошие сайты используют какой-то один язык Web-программирования: Perl, PHP или Python, и вы должны оставить только тот модуль, который необходим, а остальные лучше отключить.
Я рекомендую взять на вооружение для программирования PHP, потому что он гибок в настройках и может обеспечить большую безопасность. Да и по моему опыту, злоумышленники чаще используют Perl для создания rootkit (набор администратора или программа, которая позволяет выполнять необходимые хакеру действия на удаленной системе) на взломанной системе. Но это мое мнение, которое отнюдь не претендует на истину в последней инстанции. Хороший программист на Perl сможет легко написать программу, которая будет абсолютно безопасной и доставит много хлопот хакеру. На любом языке, даже самом "дырявом", можно написать супер защищенную программу, а на самом проверенном — наделать дыр. Это уже полностью зависит от программиста и его умений.
Неиспользуемые модули необходимо отключить, это значительно сузит возможности злоумышленника. Ничего не напоминает вам такая рекомендация? Да, это снова самое популярное мое правило: лишняя программа — враг администратора и дополнительная дверь для хакера.
Обязательно уделите внимание рассмотрению загружаемых модулей и удалите или закомментируйте то, что ненужно. Сделав это, вы повысите безопасность Web-сервера более чем на 50%. Почему? Если Python хакерами используется редко, то Perl и PHP очень популярны. Получается, что у вас в системе две большие двери. Если закрыть хотя бы одну, то останется ровно половина.
7.3. Права доступа
В данном разделе нам предстоит познакомиться с основными параметрами файла конфигурации /etc/httpd/conf/httpd.conf. Они отвечают за права доступа, относящиеся к директориям, и имеют следующий вид:
<Directory /var/www/html>
Order allow,deny
Allow from all
</Directory>
или, например:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .your-domain.com
</Location>
Первое объявление задает права доступа к определенной директории на диске (в данном случае /var/www/html), а второе — ограничивает доступ к виртуальной директории (в приведенном примере http://servername/server-status).
Если вы знакомы с HTML (HyperText Markup Language, язык разметки гипертекста) или XML (Extensible Markup Language, расширенный язык разметки), то такое объявление будет вам известно и понятно без дополнительных разъяснений. Для тех, кто не в курсе, я сделаю несколько пояснений на примере директорий. Объявление начинается со следующей строки:
<Directory Путь>
В угловых скобках указывается ключевое слово Directory и путь к каталогу, права доступа к которому нужно изменить. Это начало описания, после которого идут команды, определяющие права. Блок заканчивается строкой:
</Directory>
Параметры доступа к директории могут быть описаны не только в файле /etc/httpd/conf/httpd.conf, но и в файле .htaccess, который может находиться в указанном каталоге. Сам файл требует отдельного рассмотрения (см. разд. 7.5.1), а сейчас вы должны только знать, что разрешения, указанные в конфигурации Web-сервера, могут быть переопределены.
Теперь рассмотрим, как задаются права доступа. Для этого используются следующие директивы:
□ Allow from параметр — определяет, с каких хостов можно получить доступ к указанной директории. В качестве параметр можно использовать одно из следующих значений:
• all — доступ к директории разрешен всем;
• доменное имя — определяет домен, с которого можно получить доступ к директории. Например, можно указать domain.com. В этом случае только пользователи этого домена смогут получить доступ к директории через Web. Если какая-либо папка содержит опасные файлы, с которыми должны работать только вы, то лучше ограничить доступ своим доменом или только локальной машиной, указав allow from localhost;
• IP-адрес — сужает доступ к директории до определенного IP-адреса. Это очень удобно, когда у вашего компьютера есть выделенный адрес, и вы хотите обеспечить доступ к каталогу, содержащему администраторские сценарии, только для себя. Адрес может быть как полным, так и неполным, что позволяет ограничить доступ к директории определенной сетью;
• env=ИмяПеременной — доступ разрешен, если определена указанная переменная окружения. Полный формат директивы: allow from env=ИмяПеременной;
□ Deny from параметр — запрещение доступа к указанной директории. Параметры такие же, как у команды allow from, только в данном случае закрывается доступ для указанных адресов, доменов и т.д.;
□ Order параметр — очередность, в которой применяются директивы allow и deny. Может быть три варианта:
• Order deny, allow — изначально все разрешено, потом первыми применяются запреты, а затем разрешения. Рекомендуется использовать только на общих директориях, в которые пользователи могут самостоятельно закачивать файлы, например, свои изображения;
• Order allow, deny — сначала все запрещено, вслед за этим применяются разрешения, затем запрещения. Рекомендуется применять для всех директорий со сценариями;
• Order mutual-failure — исходно запрещен доступ всем, кроме перечисленных в allow и в то же время отсутствующих в deny. Советую использовать для всех каталогов, где находятся файлы, используемые определенным кругом лиц, например, администраторские сценарии;