Модуль 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.
См. также
Директива 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.
См. также
© 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