Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_privileges

Описание: Поддержка привилегий Solaris и запуск виртуальных хостов под разными идентификаторами пользователей.
Статус: Экспериментальный
Идентификатор модуля: privileges_module
Файл исходного кода: mod_privileges.c
Совместимость: Доступно в Apache 2.3 и выше, на платформах Solaris 10 и OpenSolaris

Краткое описание

Этот модуль позволяет различным виртуальным хостам работать с разными идентификаторами пользователей (User) и групп (Group) 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_privileges:

  • Работа от имени системного пользователя вводит те же проблемы безопасности, что и mod_suexec, и аналогичные ему механизмы, такие как cgiwrap и suphp.
  • Злонамеренное расширение (модуль или скрипт) пользователя, осознающего привилегии, может повысить свои привилегии до любых, доступных процессу httpd в любом виртуальном хосте. Это вносит новые риски, если (и только если) mod_privileges скомпилирован с опцией BIG_SECURITY_HOLE.
  • Злонамеренное расширение (модуль или скрипт) пользователя, осознающего привилегии, может повысить привилегии, чтобы установить свой идентификатор пользователя другому системному пользователю (и/или группе).

Директива PrivilegesMode позволяет выбрать режим FAST или SECURE. Можно смешивать режимы, используя режим FAST для доверенных пользователей и полностью проверенных путей кода, а режим SECURE - когда недоверенный пользователь может вводить код.

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

Режим FAST
В режиме FAST запросы выполняются внутри процесса с выбранными uid/gid и привилегиями, поэтому накладные расходы незначительны. Это подходит для доброкачественных ситуаций, но не является безопасным против злоумышленника, повышающего привилегии с помощью модуля или скрипта в процессе.
Режим SECURE
Запрос в режиме SECURE порождает подпроцесс, который затем отказывается от привилегий. Это очень похожий случай с запуском CGI с suexec, но для всего цикла запроса и с преимуществом точного управления привилегиями.

Вы можете выбрать разные PrivilegesMode для каждого виртуального хоста, а также в контексте директории внутри виртуального хоста. Режим FAST подходит в случаях, когда пользователь(и) являются доверенными и/или не имеют привилегий для загрузки кода в процессе. Режим SECURE подходит для случаев, когда может запускаться недоверенный код в процессе. Однако даже в режиме SECURE нет защиты от злонамеренного пользователя, который может ввести код, осознающий привилегии, работающий *до начала цикла обработки запроса*.

Директива DTracePrivileges

Описание: Определяет, включены ли привилегии, необходимые для dtrace.
Синтаксис:
DTracePrivileges On|Off
Значение по умолчанию:
DTracePrivileges Off
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно на Solaris 10 и OpenSolaris с непоточными MPM (prefork или пользовательским MPM).

Эта директива для всего сервера определяет, будет ли Apache работать с привилегиями, необходимыми для запуска dtrace. Обратите внимание, что DTracePrivileges On сам по себе не активирует DTrace, но DTracePrivileges Off предотвратит его работу.

Директива PrivilegesMode

Описание: Компромисс между скоростью и эффективностью обработки и безопасностью от вредоносного кода, осознающего привилегии.
Синтаксис:
PrivilegesMode FAST|SECURE|SELECTIVE
Значение по умолчанию:
PrivilegesMode FAST
Контекст: настройка сервера, виртуальный хост, директория
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно на Solaris 10 и OpenSolaris с непоточными MPM (prefork или пользовательским MPM).

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

Эта директива немного отличается в контексте <Directory> (включая эквиваленты, такие как Location/Files/If) и на верхнем уровне или в контексте <VirtualHost>.

На верхнем уровне она устанавливает значение по умолчанию, которое будет унаследовано виртуальными хостами. В виртуальном хосте режимы FAST или SECURE действуют на весь HTTP-запрос, и любые настройки в контексте <Directory> будут **проигнорированы**. Третий псевдо-режим SELECTIVE делегирует выбор между FAST и SECURE директивам в контексте <Directory>.

В контексте <Directory> она применима только в том случае, если для виртуального хоста был установлен режим SELECTIVE. В этом контексте можно устанавливать только FAST или SECURE (SELECTIVE было бы бессмысленно).

Предупреждение

Если для виртуального хоста выбран режим SELECTIVE, активация привилегий должна быть отложена до *после* фазы сопоставления обработки запроса, которая определила, какой контекст <Directory> применяется к запросу. Это может дать злоумышленнику возможности ввести код через RewriteMap, работающий на верхнем уровне или <VirtualHost> контексте *до* понижения привилегий и установки userid/gid.

Директива VHostCGIMode

Описание: Определяет, может ли виртуальный хост запускать подпроцессы и привилегии, доступные для подпроцессов.
Синтаксис:
VHostCGIMode On|Off|Secure
Значение по умолчанию:
VHostCGIMode On
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно на Solaris 10 и OpenSolaris с непоточными MPM (prefork или пользовательским MPM).

Определяет, разрешено ли виртуальному хосту запускать fork и exec, привилегии, необходимые для запуска подпроцессов. Если это значение установлено в Off, виртуальному хосту запрещены привилегии, и он не сможет запускать традиционные CGI-программы или скрипты в традиционном mod_cgi, а также аналогичные внешние программы, такие как те, которые созданы с помощью mod_ext_filter или RewriteMap prog. Обратите внимание, что это не препятствует работе CGI-программ под альтернативными моделями обработки и безопасности, такими как mod_fcgid, что является рекомендуемым решением в Solaris.

Если значение установлено в On или Secure, виртуальному хосту разрешено запускать внешние программы и скрипты, как описано выше. Установка VHostCGIMode Secure имеет эффект отказа от предоставления привилегий подпроцессам, как описано для VHostSecure.

Директива VHostCGIPrivs

Описание: Назначение произвольных привилегий подпроцессам, созданным виртуальным хостом.
Синтаксис:
VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ...
Значение по умолчанию: None
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно на Solaris 10 и OpenSolaris с непоточными MPM (prefork или пользовательским MPM) и при компиляции mod_privileges с опцией BIG_SECURITY_HOLE.

VHostCGIPrivs может использоваться для назначения произвольных привилегий подпроцессам, созданным виртуальным хостом, как обсуждалось в VHostCGIMode. Каждое privilege-name - это имя привилегии Solaris, такое как file_setid или sys_nfs.

Имя privilege-name можно необязательно префиксровать + или -, соответственно разрешая или запрещая привилегию. Если использовать ни + ни -, все другие привилегии, назначенные виртуальному хосту, будут запрещены. Можно использовать это для переопределения наборов по умолчанию и построения собственного набора привилегий.

Безопасность

Эта директива может создать огромные бреши в безопасности в подпроцессах Apache, вплоть до запуска их с правами root. Используйте её только если вы полностью понимаете, что делаете!

Директива VHostGroup

Описание: Устанавливает идентификатор группы, под которым работает виртуальный хост.
Синтаксис:
VHostGroup unix-groupid
Значение по умолчанию:
Inherits the group id specified in Group
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно в Solaris 10 и OpenSolaris с не-потоковыми MPM (prefork или пользовательский MPM).

Директива VHostGroup устанавливает Unix-группу, под которой сервер будет обрабатывать запросы к виртуальному хосту. Группа устанавливается перед обработкой запроса и сбрасывается после неё с помощью Привилегий Solaris. Поскольку настройка применяется к процессу, она не совместима с потоковыми MPM.

Unix-group может быть:

Имя группы
Ссылается на группу по имени.
# за которым следует номер группы.
Ссылается на группу по её номеру.

Безопасность

Данная директива не может использоваться для запуска Apache от имени root! Тем не менее, она открывает потенциальные проблемы безопасности, аналогичные тем, которые обсуждаются в документации suexec.

См. также

  • Group
  • SuexecUserGroup

Директива VHostPrivs

Описание: Назначение произвольных привилегий виртуальному хосту.
Синтаксис:
VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ...
Значение по умолчанию: None
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно в Solaris 10 и OpenSolaris с не-потоковыми MPM (prefork или пользовательский MPM) и когда mod_privileges скомпилирован с опцией компиляции BIG_SECURITY_HOLE.

VHostPrivs может использоваться для назначения произвольных привилегий виртуальному хосту. Каждое privilege-name — имя привилегии Solaris, например, file_setid или sys_nfs.

Имя privilege-name можно необязательно префиксровать символами «+» или «-», что позволит соответственно разрешить или запретить привилегию. Если не использовать ни «+» ни «-», все привилегии, назначенные виртуальному хосту, будут запрещены. Это позволяет переопределить любые наборы по умолчанию и создать собственный набор привилегий.

Безопасность

Данная директива может привести к серьёзным проблемам безопасности в Apache, включая выполнение запросов с правами root. Используйте её только после полного понимания последствий!

Директива VHostSecure

Описание: Определяет, работает ли сервер с усиленной безопасностью для виртуального хоста.
Синтаксис:
VHostSecure On|Off
Значение по умолчанию:
VHostSecure On
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно в Solaris 10 и OpenSolaris с не-потоковыми MPM (prefork или пользовательский MPM).

Определяет, обрабатывает ли виртуальный хост запросы с усиленной безопасностью путём удаления привилегий, которые редко необходимы веб-серверу, но доступны по умолчанию обычному пользователю Unix и могут потребоваться модулям и приложениям. Рекомендуется оставить значение по умолчанию (Включено), если это не препятствует работе приложения. Поскольку настройка применяется к процессу, она не совместима с потоковыми MPM.

Примечание

Если VHostSecure препятствует работе приложения, это может быть сигналом к проверке приложения на предмет безопасности.

Директива VHostUser

Описание: Устанавливает идентификатор пользователя, под которым работает виртуальный хост.
Синтаксис:
VHostUser unix-userid
Значение по умолчанию:
Inherits the userid specified in User
Контекст: виртуальный хост
Статус: Экспериментальный
Модуль: mod_privileges
Совместимость: Доступно в Solaris 10 и OpenSolaris с не-потоковыми MPM (prefork или пользовательский MPM).

Директива VHostUser устанавливает Unix-идентификатор пользователя, под которым сервер будет обрабатывать запросы к виртуальному хосту. Идентификатор пользователя устанавливается перед обработкой запроса и сбрасывается после неё с помощью Привилегий Solaris. Поскольку настройка применяется к процессу, она не совместима с потоковыми MPM.

Unix-userid может быть:

Имя пользователя
Ссылается на пользователя по имени.
# за которым следует номер пользователя.
Ссылается на пользователя по его номеру.

Безопасность

Данная директива не может использоваться для запуска Apache от имени root! Тем не менее, она открывает потенциальные проблемы безопасности, аналогичные тем, которые обсуждаются в документации suexec.

См. также

  • User
  • SuexecUserGroup

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_privileges.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API