Модуль Apache mod_privileges
| Описание: | Поддержка привилегий Solaris и запуска виртуальных хостов с разными идентификаторами пользователей. |
|---|---|
| Статус: | Экспериментальный |
| Идентификатор модуля: | privileges_module |
| Исходный файл: | mod_privileges.c |
| Совместимость: | Доступен в Apache 2.3 и более поздних версиях на платформах Solaris 10 и OpenSolaris |
Краткое описание
Этот модуль позволяет запускать разные виртуальные хосты с разными идентификаторами Unix-пользователей (User) и групп (Group), а также с разными привилегиями Solaris. В частности, он предлагает решение проблемы разделения привилегий между разными виртуальными хостами, которое впервые было обещано в заброшенном MPM perchild. Кроме того, модуль обеспечивает другие улучшения безопасности.
В отличие от 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, но применяется ко всему циклу обработки запроса и позволяет точно контролировать привилегии.
Для каждого виртуального хоста можно выбрать отдельные значения PrivilegesModes, а также задать их в контексте каталога внутри виртуального хоста. Режим 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 и поэтому могут требоваться модулям и приложениям. Рекомендуется оставить значение по умолчанию (On), если только оно не мешает работе приложения. Поскольку настройка применяется к процессу, она несовместима с многопоточными 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