Пункт 168. Модуль Apache mod_привилегии
Этот модуль позволяет запускать разные виртуальные хосты с разными идентификаторами пользователя и группы Unix и с разными привилегиями Solaris. В частности, он предлагает решение проблемы разделения привилегий между разными виртуальными хостами, впервые обещанной заброшенным perchild MPM. Он также предлагает другие улучшения безопасности.
В отличие от perchild, mod_privileges
сам по себе не является MPM. Он работает в модели обработки для установки привилегий и пользователей/групп для каждого запроса в запущенном процессе. Поэтому он не совместим с многопоточным MPM и отказывается работать под ним.
mod_privileges
вызывает проблемы с безопасностью, аналогичные проблемам с suexec. Но в отличие от suexec, он применяется не только к CGI-программам, но и ко всему циклу обработки запроса, включая внутрипроцессные приложения и подпроцессы. Он идеально подходит для запуска PHP-приложений под mod_php , что также несовместимо с многопоточными MPM. Он также хорошо подходит для других внутрипроцессных скриптовых приложений, таких как mod_perl ,
mod_python и mod_ruby , а также для приложений, реализованных на C в виде модулей Apache, где разделение привилегий является проблемой.
Вопросы безопасности
mod_privileges
вводит новые проблемы безопасности в ситуациях, когда в процессе веб-сервера может выполняться
ненадежный код . Это относится к ненадежным модулям и сценариям, работающим под такими модулями, как mod_php или mod_perl. Скрипты, работающие извне (например, как CGI или на сервере приложений за mod_proxy или mod_jk), НЕ затрагиваются.
Основные проблемы безопасности с mod_privacy:
- Запуск от имени системного пользователя вызывает те же проблемы с безопасностью, что и mod_suexec, и его почти эквиваленты, такие как cgiwrap и suphp.
- Вредоносное пользовательское расширение (модуль или сценарий), осведомленное о привилегиях, может повысить свои привилегии до любого объекта, доступного процессу httpd на любом виртуальном хосте. Это создает новые риски, если (и только если) mod_privacy скомпилирован с
параметром BIG_SECURITY_HOLE .
- Вредоносное пользовательское расширение (модуль или сценарий), осведомленное о привилегиях, может повысить привилегии, чтобы установить свой идентификатор пользователя для другого системного пользователя (и/или группы).
Директива PrivilegesMode
позволяет выбрать режим FAST или SECURE . Вы можете смешивать режимы, используя режим FAST для доверенных пользователей и полностью проверенные пути кода, в то же время навязывая режим SECURE, когда ненадежный пользователь может ввести код.
Прежде чем описывать режимы, мы также должны представить целевые варианты использования: доброкачественные и враждебные. В благоприятной ситуации вы хотите разделить пользователей для их удобства и защитить их и сервер от рисков, связанных с честными ошибками, но вы уверены, что ваши пользователи не подрывают безопасность системы намеренно. Во враждебной ситуации — например, при коммерческом хостинге — пользователи могут преднамеренно атаковать систему или друг друга.
- Быстрый режим
- В режиме FAST запросы выполняются внутри процесса с выбранным uid/gid и привилегиями, поэтому накладные расходы незначительны. Это подходит для безобидных ситуаций, но не защищает от повышения привилегий злоумышленником с помощью внутрипроцессного модуля или сценария.
- БЕЗОПАСНЫЙ режим
- Запрос в режиме SECURE разветвляет подпроцесс, который затем теряет привилегии. Это очень похоже на запуск CGI с помощью suexec, но для всего цикла запроса и с преимуществом детального контроля привилегий.
Вы можете выбрать разные PrivilegesMode
s для каждого виртуального хоста и даже в контексте каталога внутри виртуального хоста. Режим FAST подходит, когда пользователь (пользователи) является доверенным и/или не имеет права загружать внутрипроцессный код.
Режим SECURE подходит для случаев, когда в процессе может выполняться ненадежный код. Однако даже в режиме SECURE нет защиты от злоумышленника, который может внедрить код с привилегиями, работающий до начала цикла обработки запроса.
Директива DTracePrivileges
Описание: | Определяет, включены ли привилегии, необходимые для dtrace. |
Синтаксис: | DTracePrivileges On|Off |
По умолчанию: | DTracePrivileges Off |
Контекст: | конфигурация сервера |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Эта общесерверная директива определяет, будет ли Apache работать с привилегиями, необходимыми для запуска dtrace. Обратите внимание, что DTracePrivileges On сам по себе не активирует DTrace, но DTracePrivileges Off не позволит ему работать.
Директива PrivilegesMode
Описание: | Найдите компромисс между скоростью и эффективностью обработки и защитой от вредоносного кода, поддерживающего привилегии. |
Синтаксис: | PrivilegesMode FAST|SECURE|SELECTIVE |
По умолчанию: | PrivilegesMode FAST |
Контекст: | конфигурация сервера, виртуальный хост, каталог |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Эта директива обеспечивает компромисс между производительностью и безопасностью против вредоносного кода, осведомленного о привилегиях. В режиме SECURE каждый запрос выполняется в защищенном подпроцессе, что приводит к существенному снижению производительности. В режиме FAST сервер не защищен от повышения привилегий, как обсуждалось выше.
Эта директива немного отличается для <Directory>
контекста (включая эквиваленты, такие как Location/Files/If) и верхнего уровня или <VirtualHost>
.
На верхнем уровне он устанавливает значение по умолчанию, которое будет унаследовано виртуальными хостами. В виртуальном хосте режим FAST или SECURE действует на весь HTTP-запрос, и любые настройки в контексте <Directory>
будут игнорироваться . Третий псевдорежим SELECTIVE откладывает выбор между FAST и SECURE директивами в контексте
<Directory>
.
В <Directory>
контексте это применимо только в том случае, если для VirtualHost был установлен ВЫБОРОЧНЫЙ режим. В этом контексте можно установить только FAST или SECURE (SELECTIVE не имеет смысла).
Предупреждение
Если для виртуального хоста выбран режим SELECTIVE, активация привилегий должна быть отложена до тех пор,
пока на этапе сопоставления обработки запроса не будет определен
<Directory>
контекст, применимый к запросу. Это может дать злоумышленнику возможность ввести код через
RewriteMap
выполнение на верхнем уровне или
<VirtualHost>
в контексте
до того, как привилегии будут удалены и установлен идентификатор пользователя/gid.
Директива VHostCGIMode
Описание: | Определяет, может ли виртуальный хост запускать подпроцессы, и привилегии, доступные для подпроцессов. |
Синтаксис: | VHostCGIMode On|Off|Secure |
По умолчанию: | VHostCGIMode On |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Определяет, разрешено ли виртуальному хосту запускать fork и exec, привилегии, необходимые для запуска подпроцессов. Если для этого параметра установлено значение «
Выкл. », виртуальному хосту будет отказано в привилегиях, и он не сможет запускать ни традиционные CGI-программы, ни сценарии под традиционными
mod_cgi
, а также подобные внешние программы, например, созданные mod_ext_filter
или
RewriteMap
prog . Обратите внимание, что это не мешает программам CGI работать с альтернативными моделями процессов и безопасности, такими как mod_fcgid, что является рекомендуемым решением в Solaris.
Если установлено значение On или Secure , виртуальному хосту разрешено запускать внешние программы и сценарии, как указано выше. Настройка VHostCGIMode
Secure приводит к отказу в привилегиях для подпроцессов, как описано для VHostSecure
.
Директива VHostCGIprivs
Описание: | Назначьте произвольные привилегии подпроцессам, созданным виртуальным хостом. |
Синтаксис: | VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
По умолчанию: | None |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM) и при mod_privileges компиляции с
параметром времени компиляции BIG_SECURITY_HOLE . |
VHostCGIPrivs
может использоваться для назначения произвольных привилегий подпроцессам, созданным виртуальным хостом, как описано в разделе VHostCGIMode
. Каждое имя-привилегии
является именем привилегии Solaris, например, file_setid
или sys_nfs .
Имя привилегии может дополнительно иметь префикс + или -, что соответственно разрешает или запрещает привилегию. Если используется ни +, ни -, все привилегии, назначенные виртуальному хосту, будут запрещены. Вы можете использовать это, чтобы переопределить любой из наборов по умолчанию и создать свой собственный набор привилегий.
Безопасность
Эта директива может открыть огромные дыры в безопасности подпроцессов apache, вплоть до запуска их с полномочиями корневого уровня. Не используйте его, если вы полностью не понимаете, что делаете!
Директива VHostGroup
Описание: | Задает идентификатор группы, под которым работает виртуальный хост. |
Синтаксис: | VHostGroup unix-groupid |
По умолчанию: | Inherits the group id specified in
Group |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Директива VHostGroup
устанавливает группу Unix, в рамках которой сервер будет обрабатывать запросы к виртуальному хосту. Группа устанавливается перед обработкой запроса и затем сбрасывается с помощью привилегий Solaris. Поскольку параметр применяется к
процессу , он несовместим с многопоточными MPM.
Юникс-групп является одним из:
- Имя группы
- Относится к данной группе по имени.
-
#
затем номер группы.
- Относится к группе по ее номеру.
Безопасность
Эту директиву нельзя использовать для запуска apache с правами root! Тем не менее, это открывает потенциальные проблемы безопасности, подобные тем, которые обсуждаются в документации suexec.
Смотрите также
Директива VHostPrivs
Описание: | Назначьте произвольные привилегии виртуальному хосту. |
Синтаксис: | VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
По умолчанию: | None |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM) и при mod_privileges компиляции с
параметром времени компиляции BIG_SECURITY_HOLE . |
VHostPrivs
может использоваться для назначения произвольных привилегий виртуальному хосту. Каждое имя-привилегии
является именем привилегии Solaris, например, file_setid
или sys_nfs .
Имя привилегии может дополнительно иметь префикс + или -, что соответственно разрешает или запрещает привилегию. Если используется ни +, ни -, все привилегии, назначенные виртуальному хосту, будут запрещены. Вы можете использовать это, чтобы переопределить любой из наборов по умолчанию и создать свой собственный набор привилегий.
Безопасность
Эта директива может открыть огромные дыры в безопасности apache, вплоть до выполнения запросов с полномочиями корневого уровня. Не используйте его, если вы полностью не понимаете, что делаете!
Директива VHostSecure
Описание: | Определяет, работает ли сервер с повышенной безопасностью для виртуального хоста. |
Синтаксис: | VHostSecure On|Off |
По умолчанию: | VHostSecure On |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Определяет, обрабатывает ли виртуальный хост запросы с усиленной безопасностью за счет удаления привилегий, которые редко требуются на веб-сервере, но которые доступны по умолчанию обычному пользователю Unix и поэтому могут требоваться модулями и приложениями. Рекомендуется оставить значение по умолчанию (Вкл.), если только оно не препятствует запуску приложения. Поскольку параметр применяется к процессу , он несовместим с многопоточными MPM.
Примечание
Если VHostSecure
приложение не работает, это может быть предупреждением о том, что приложение следует проверить на предмет безопасности.
Директива VHostUser
Описание: | Задает идентификатор пользователя, под которым работает виртуальный хост. |
Синтаксис: | VHostUser unix-userid |
По умолчанию: | Inherits the userid specified in
User |
Контекст: | виртуальный хост |
Положение дел: | Экспериментальный |
Модуль: | мод_привилегии |
Совместимость: | Доступно в Solaris 10 и OpenSolaris с непотоковыми MPM ( prefork или пользовательскими MPM). |
Директива VHostUser
устанавливает идентификатор пользователя Unix, под которым сервер будет обрабатывать запросы к виртуальному хосту. Идентификатор пользователя задается перед обработкой запроса и затем сбрасывается с помощью привилегий Solaris. Поскольку параметр применяется к
процессу , он несовместим с многопоточными MPM.
Unix-userid является одним из:
- Имя пользователя
- Относится к данному пользователю по имени.
-
#
затем номер пользователя.
- Обращается к пользователю по его номеру.
Безопасность
Эту директиву нельзя использовать для запуска apache с правами root! Тем не менее, это открывает потенциальные проблемы безопасности, подобные тем, которые обсуждаются в документации suexec.
Смотрите также