Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800521

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
4.21 Mб
Скачать

11.2.Модульность

Ядро Apache включает в себя основные функциональные возможности, такие как обработка конфигурационных файлов, протокол HTTP и система загрузки модулей. Ядро (в отличие от модулей) полностью разрабатывается Apache Software Foundation, без участия сторонних программистов. Запускается Apache от рутового пользователя, а все последующие операции выполняет от лица непривилегированного пользователя.

Модули представляют из себя код, расширяющий функционал Apache. Модули могут быть статически слинкованы с ядром, либо загружаться динамически. В первом случае они собираются на этапе компиляции самого Apache. Во втором случае они загружаются при загрузке Apache, для этого есть дополнительный встроенный модуль mod_so.

Кроме того, имеется набор библиотек — Apache Portable Runtime (APR), который реализует кросс-платформенную поддержку системных функций.

Специальный модуль системного уровня — MultiProcessing Module (MPM) — дает возможность оптимизировать Apache в условиях конкретной операционной системы, предоставляя еще один вариант доступа к системным сервисам.

161

Рис. 11.2. Схема модулей

После стартовой начальной инициализации ядро передает управление модулю MPM, который поддерживает пул рабочих процессов/потоков, реализует интерфейс между сервером и данной операционной системой, оптимизируя работу сервера. MPM появился тогда, когда Apache был перенесен на Windows.

MPM имеет 2 основных режима работы:

●Prefork — это традиционный non-threaded вариант,

присущий версии 1.3.

●Worker — многопоточный вариант, которому присущ меньший расход памяти.

Модуль взаимодействует с ядром с помощью простого интерфейса: в ядре регистрируется обработчик (handler), который потом может быть вызван. Также модуль может взаимодействовать с ядром с помощью специальных Apache API, которые позволяют модулям работать со структурами данных ядра.

Существует 4 основных типа обработчиков:

162

●Обработчики-переключатели. ●Конфигурационные обработчики. ●Фильтры.

●Функции-опции.

Обработчики-переключатели занимаются переключением обработчиков, выполняя роль событийного триггера. Такой обработчик имеет префикс ap_run_HOOKNAME. Они бывают двух типов:

●RUN_ALL/VOID — вызываются всегда, независимо от статуса выполняемой задачи;

●RUN_FIRST — вызываются до тех пор, пока задача не выполнена.

Модуль регистрирует в первую очередь обработчики этого типа. Вообще регистрация обработчиков отличается в первом и во втором Apache. В первом все обработчики регистрируются автоматически при старте. Во втором модуль регистрирует 4 обработчика-переключателя, остальные регистрируются потом с помощью функции ap_run_xxx.

Порядок, в котором вызываются переключатели, для первого Apache тот же, в котором они регистрируются. Во втором Apache механизм изменился: вызов ap_hook_xxx может изменить порядок регистрируемого переключателя. Каждый модуль может определить собственный набор конфигурационных директив. Конфигурационные обработчики выделяют память для чтения таких директив и определяют, что с ними делать.

Фильтры и функции-опции появились во втором Apache. Функции-опции похожи на обработчики.

11.3.Конфигурация

Для конфигурации Apache есть 4 основных подхода:

1.Компиляция / инсталляция: сборка из исходников позволяет выбрать необходимые модули, установить нужные флаги, пути и т. д.

163

2.Параметры командной строки: позволяют конфигурировать Apache при запуске.

3.Глобальные конфигурационные файлы: главный файл по умолчанию называется httpd.conf.

4.Локальные конфигурационные файлы: использование

.htaccess.

5.Конфигурационные директивы в файле httpd.conf можно разбить на 3 категории:

6.Директивы, контролирующие общий процесс работы.

7.Директивы виртуальных хостов.

8.Настройки виртуальных хостов.

Кдирективам первой группы относятся <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, <LocationMatch>.

Они применяются в привязке к конкретной файловой структуре либо к URL. В первом случае это <Directory>, во втором — <Location>. Apache может обслуживать одновременно несколько веб-сайтов с различными именами, реализуя виртуальный хостинг, что делается на основе директивы <VirtualHost>. Для того, чтобы изменения в главном конфиге вступили в силу, сервер должен быть перезапущен.

Локальная конфигурация реализована на основе

.htaccess. Имя этого файла можно изменить в секции AccessFileName. Изменения в файле .htaccess вступают в силу немедленно, без перезапуска, его действие распространяется на каталог, в котором он лежит, со всеми вложенными подкаталогами. Избыточное использование .htaccess может повлиять на производительность сервера.

Содержимое основного конфига httpd.conf можно разделить на 5 секций:

1.Глобальные директивы.

2.<VirtualHost> — применимы к выиртуальным серверам.

164

3.<Directory>, <DirectoryMatch> — применимы к каталогам.

4.<Files>, <FilesMatch> — применимы к файлам.

5.<Location>, <LocationMatch> — применимы к URL.

Директива может иметь несколько параметров, тип

параметров может различаться.

Каждая директива обрабатывается определенным модулем.

Например, директива

LoadModule foo_module modules/mod_foo.so

будет обработана mod_so, в этой команде 2 аргумента — имя загружаемого модуля и имя файла.

Следующая директива будет обработана ядром:

DocumentRoot /usr/local/apache/htdocs

Следующая директива будет обработана модулем mod_env, будет установлена переменная окружения:

SetEnv hello ”Hello, World!”

Контейнер — специальная форма директивы с использованием скобок, которая имеет свой внутренний контекст. Например, контейнер <VirtualHost>:

<VirtualHost 10.31.2.139> ServerName www.example.com DocumentRoot /usr/www/example ServerAdmin webmaster@example.com CustomLog /var/log/www/example.log </VirtualHost>

Содержимое локального файла .htaccess можно разделить также на 5 секций:

1.AuthConfig — контроль авторизации.

2.Limits — контроль доступа.

3.Options — конкретные настройки каталогов.

4.FileInfo — установка атрибутов для документов.

5.Indexes — индексация каталогов.

165

11.4.Безопаcность

Зачастую сервер Apcahe используется для хостинга различных сайтов и сервисов, написанных на PHP.

PHP — это один из самых популярных серверных языков программирования с открытым исходным кодом. Он используется не только для создания сайтов, но и в качестве языка программирования общего назначения, а также для написания серверной части различных веб-приложений.

Выполнять скрипты на PHP могут веб-серверы Apache, Nginx и Lighttpd. Также PHP может выполняться интерпретатором прямо из командной строки. Но поскольку PHP установлен на сервере, он может создать ряд проблем с безопасностью, поэтому его нужно применять осторожно.

Все программы содержат уязвимости и PHP не исключение. В этой статье мы собрали советы, которые помогут вам поддерживать безопасность в PHP, а следовательно, безопасность вашего сервера на высшем уровне.

Все приведенные ниже советы рассчитаны на то, что PHP работает под управлением Nginx или Apache, сам интерпретатор PHP недоступен из внешней сети. А теперь, перейдем к рассмотрению того как выполняется защита php кода, сайта и сервера в целом.

Приложения на основе PHP могут подвергаться различным типам атак, вот основные из них:

●XSS — это уязвимость в веб-приложениях, с помощью которой злоумышленники могут выполнять произвольный JavaScript код в браузере пользователей, и таким образом, украсть его данные. Возникает из-за отсутствия проверки на данных в скриптах на правильность;

●SQL инъекция — это уязвимость в коде работы с базой данных. Если пользовательский ввод неверно фильтруется скриптом, и используется для формирования запроса к базе данных, то злоумышленники могут выполнить любые запросы

166

к базе данных. Для предотвращения такой проблемы рекомендуется фильтровать данные функцией mysql_real_escape_string() перед отправкой запроса;

●Загрузка файлов — позволяет посетителю загружать файлы на ваш сервер. Загрузив определенный тип файлов, пользователи могут получить доступ к системе или даже украсть информацию из базы данных, поэтому нужно следить чтобы можно было загружать только картинки;

●Удаленное выполнение — злоумышленник может удаленно выполнять php файлы, которые есть на сервере, поэтому вместе с возможностью загрузки PHP файлов это представляет серьезную опасность;

●Eval() — позволяет выполнить код PHP, переданный в строке, часто используется злоумышленниками, чтобы скрыть свой код на вашем сервере;

●CSRF атака — позволяет заставить пользователя выполнить нежелательные действия в веб-приложениях. Если пользователь является администратором, это может поставить под угрозу все приложение.

Рекомендуется использовать только самые необходимые модули, чтобы увеличить безопасность. Например, вы можете отключить модуль sqlite. Для этого можно удалить его конфигурационный файл в /etc/php5/conf.d/. Но для полного удаления нужно пересобрать PHP без этого модуля.

Если установлено значение On, то PHP будет отправлять версию PHP в ответ на все запросы в заголовке X-Powered-By. Также рекомендуется скрыть версию Apache и другую информацию. Защита php от взлома, это не только аккуратное программирование, но и сокрытие информации о системе.

PHP поддерживает динамическую загрузку расширений. По умолчанию загружаются все расширения, конфигурационные файлы которых есть в /etc/php/conf.d/. Также загружаются модули, которые указаны директивой extension в основном конфиге php.ini. Мы можете удалить ненужное.

167

Сообщения об ошибках содержат много информации, не позволяйте их смотреть всем пользователям сайта, однако убедитесь, что вы сохраняете все ошибки в лог файл.

Если загрузка файлов не нужна, запретите ее, но если такая функция необходима, то лучше ограничить размер файла.

Если параметр allow_url_fopen включен, php может использовать такие файловые функции, как file_get_contents. С помощью нее скрипт может загружать файлы из удаленных серверов. Программисты часто забывают выполнить надлежащую фильтрацию данных, и тем самым открывают уязвимость.

В безопасном режиме SQL, интерпретатор игнорирует все аргументы, передаваемые в функции mysql_connect и mysql_pcconnect. Но в таком режиме будут работать не все скрипты, например, не будет работать WordPress, так что используйте аккуратно.

Также рекомендуется отключить функцию magic_quotes_gpc, вместо нее лучше использовать mysql_escape_string

Метод POST используется, когда браузер хочет передать веб-серверу определенное количество данных как часть запроса, например, при загрузке файла. Злоумышленники могут использовать большие запросы, чтобы истратить ресурсы сервера.

Вы можете указать максимальное время выполнения для каждого скрипта, максимальное количество памяти и максимальное время чтения данных, это увеличит безопасность сайта php в плане DOS атак.

PHP содержит множество функций, которые могут использоваться для взлома сервера, например, те, которые позволяют выполнять команды оболочки.

PHP может работать через FastCGI, это уменьшает использование памяти вашего веб-сервера. Нужно включить директиву force_redirect чтобы предотвратить прямое

168

выполнение php скриптов из строки запроса, например, cgibin/php/hackerdir/backdoor.php.

Если вы используете внешний FastCGI сервер, то нужно чтобы он был запущен не от пользователя root. Запускайте php от имени непривелигированного пользователя. Как вы знаете, у PHP есть функции, которые позволяют выполнять команды оболочки. Очень небезопасно, если они будут выполняться от суперпользователя.

Директива open_basedir позволяет установить каталог, в котором php может получить доступ к файлам с помощью таких функций, как fopen, file_get_contents и т д. Если файл находится вне этой директории PHP откажется его открывать. Вы даже не сможете использовать символические ссылки.

Нужна не только защита php сайта, чтобы скрипты не смогли причинить вред системе, но и чтобы пользователи не могли получить доступ к файлам php. Сессии в php позволяют сохранить определенную информацию между обращениями пользователя. Путь, где будет храниться эта информация указан в файле /etc/php/php.ini. Убедитесь, что этот путь находится вне /var/www/ и недоступен для чтения или записи для других пользователей системы.

Все программы могут содержать различные уязвимости, поэтому важно выполнять регулярное обновление системы, чтобы вовремя применить все патчи безопасности. Нужно обновлять не только PHP, а весь программный стек, в том числе Apache.

SELinux — это система безопасности, используемая по умолчанию в RedHat. Ее можно использовать для предотвращения несанкционированного доступа к файлам и ресурсам. Например, вы можете установить политики безопасности для веб-сервера Apache или отдельного сервера PHP. Это тоже отличная защита PHP и не только.

Установите mod_security, этот модуль Apache для обнаружения и предотвращения в веб-приложения. Он может защитить php и ваше приложение от XSS и SQL-Inj атак.

169

Регулярно просматривайте файлы журналов Apache и PHP, вы сможете получить некоторые представление о том, как работает сервер и проверить уровень безопасности.

11.5.Лабораторная работа № 10

УСТАНОВКА APACHE

На данный момент, самая новая версия программы 2.4 поэтому и будет рассмотрена настройка apache 2.4. Для установки в Ubuntu сначала обновим систему до самой новой версии:

sudo apt update $ sudo apt upgrade

Затем установка apache2: sudo apt install apache2

В других дистрибутивах пакет программы называется либо так, либо httpd и его установка у вас не вызовет трудностей. После установки Apache, для проверки работоспособности веб-сервера, введите в браузере localhost (или 127.0.0.1). Вы должны увидеть такую картинку:

Рис. 11.3. Default page

170