Spec-Zone.ru › Apache HTTP Server

Модуль 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.

См. также

  • 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 и поэтому могут требоваться модулям и приложениям. Рекомендуется оставить значение по умолчанию (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.

См. также

  • 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