<-
Apache > HTTP Server > 文档 > 版本 2.4 > 模块

Apache 模块 mod_privileges

可用语言:  en  |  fr 

描述支持 Solaris 权限以及在不同用户 ID 下运行虚拟主机。
状态实验性
模块标识符privileges_module
源文件mod_privileges.c
兼容性在 Apache 2.3 及更高版本中可用,适用于 Solaris 10 和 OpenSolaris 平台

摘要

此模块允许不同的虚拟主机使用不同的 Unix 用户 ID 以及不同的 Solaris 权限 运行。特别是,它为不同虚拟主机之间的权限分离问题提供了解决方案,该问题最初由已废弃的 perchild MPM 承诺解决。它还提供其他安全增强功能。

与 perchild 不同,mod_privileges 本身不是 MPM。它在处理模型中工作,以在运行的进程中为每个请求设置权限和用户/组。因此,它与线程化的 MPM 不兼容,并且会拒绝在其中运行。

mod_privileges 引发了与 suexec 相似的安全问题。但与 suexec 不同,它不仅适用于 CGI 程序,还适用于整个请求处理周期,包括进程内应用程序和子进程。它非常适合在 mod_php 下运行 PHP 应用程序,mod_php 也与线程化的 MPM 不兼容。它也适用于其他进程内脚本应用程序,例如 mod_perlmod_pythonmod_ruby,以及在 C 中作为 apache 模块实现的应用程序,其中权限分离是一个问题。

Support Apache!

主题

指令

Bugfix 检查清单

另请参阅

top

安全注意事项

mod_privileges不受信任的代码 可能在 webserver 进程内 运行的情况下引入了新的安全问题。这适用于不受信任的模块以及在 mod_php 或 mod_perl 等模块下运行的脚本。在外部运行的脚本(例如作为 CGI 或在 mod_proxy 或 mod_jk 背后的应用程序服务器中运行)不受影响。

mod_privileges 的基本安全问题是

PrivilegesMode 指令允许您选择 FASTSECURE 模式。您可以混合使用模式,对受信任的用户和经过全面审核的代码路径使用 FAST 模式,同时在不受信任的用户有权引入代码的地方强制执行 SECURE 模式。

在描述模式之前,我们还应该介绍目标用例:良性与恶意。在良性情况下,您希望为了方便而将用户分开,并保护他们和服务器免受诚实错误带来的风险,但您信任您的用户不会故意破坏系统安全。在恶意情况下(例如商业托管),您可能会有用户故意攻击系统或彼此攻击。

FAST 模式
FAST 模式下,请求在进程内使用选定的 uid/gid 和权限运行,因此开销可以忽略不计。这适用于良性情况,但不能防止攻击者使用进程内模块或脚本提升权限。
SECURE 模式
处于 SECURE 模式的请求会派生一个子进程,然后子进程会放弃权限。这与使用 suexec 运行 CGI 非常相似,但适用于整个请求周期,并且可以更细粒度地控制权限。

您可以为每个虚拟主机选择不同的 PrivilegesMode,甚至可以在虚拟主机内的目录上下文中选择。在用户可信且/或没有权限加载进程内代码的情况下,FAST 模式是合适的。在可能在进程内运行不受信任的代码的情况下,SECURE 模式是合适的。但是,即使在 SECURE 模式下,也无法防止恶意用户能够在 请求处理周期开始之前 引入运行的权限感知代码。

top

DTracePrivileges 指令

描述确定是否启用了 dtrace 所需的权限。
语法DTracePrivileges On|Off
默认值DTracePrivileges Off
上下文服务器配置
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

此服务器范围的指令确定 Apache 是否将使用 权限 运行 dtrace。请注意,DTracePrivileges On 本身不会激活 DTrace,但 DTracePrivileges Off 会阻止它工作。

top

PrivilegesMode 指令

描述权衡处理速度和效率与针对恶意权限感知代码的安全性的关系。
语法PrivilegesMode FAST|SECURE|SELECTIVE
默认值PrivilegesMode FAST
上下文服务器配置、虚拟主机、目录
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

此指令权衡了性能与针对恶意权限感知代码的安全性的关系。在 SECURE 模式下,每个请求都在一个安全的子进程中运行,会产生很大的性能损失。在 FAST 模式下,服务器不受上述权限提升的保护。

此指令在 <Directory> 上下文(包括 Location/Files/If 等等效项)和顶级或 <VirtualHost> 之间略有不同。

在顶级,它设置一个默认值,该默认值将被虚拟主机继承。在虚拟主机中,FAST 或 SECURE 模式作用于整个 HTTP 请求,并且 <Directory> 上下文中的任何设置都会被 忽略。第三种伪模式 SELECTIVE 将 FAST 与 SECURE 的选择推迟到 <Directory> 上下文中的指令。

<Directory> 上下文中,它仅适用于为 VirtualHost 设置了 SELECTIVE 模式的场合。在此上下文中只能设置 FAST 或 SECURE(SELECTIVE 将毫无意义)。

警告

在为虚拟主机选择 SELECTIVE 模式的情况下,必须将权限的激活推迟到 请求处理的映射阶段 确定哪个 <Directory> 上下文适用于请求之后。这可能会给攻击者机会通过在 权限被放弃和用户 ID/组 ID 被设置 之前在顶级或 <VirtualHost> 上下文中运行的 RewriteMap 中引入代码。
top

VHostCGIMode 指令

描述确定虚拟主机是否可以运行子进程,以及子进程可用的权限。
语法VHostCGIMode On|Off|Secure
默认值VHostCGIMode On
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

确定虚拟主机是否允许运行 fork 和 exec,以及运行子进程所需的 权限。如果将其设置为 Off,则虚拟主机将被拒绝权限,并且将无法运行传统的 CGI 程序或脚本,这些脚本在传统的 mod_cgi 下运行,也不能运行类似的外部程序,例如由 mod_ext_filterRewriteMap prog 创建的程序。请注意,它不会阻止 CGI 程序在替代进程和安全模型下运行,例如 mod_fcgid,这是 Solaris 中推荐的解决方案。

如果设置为 OnSecure,则虚拟主机将被允许运行外部程序和脚本,如上所述。将 VHostCGIMode 设置为 Secure 会对子进程拒绝权限,如 VHostSecure 所述。

top

VHostCGIPrivs 指令

描述将任意权限分配给虚拟主机创建的子进程。
语法VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ...
默认值
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用,并且当 mod_privileges 使用 BIG_SECURITY_HOLE 编译时选项编译时可用。

VHostCGIPrivs 可用于将任意 权限 分配给虚拟主机创建的子进程,如 VHostCGIMode 所述。每个 privilege-name 都是 Solaris 权限的名称,例如 file_setidsys_nfs

可选地,privilege-name 可以以 + 或 - 为前缀,分别表示允许或拒绝权限。如果既不使用 + 也不使用 -,则分配给虚拟主机的所有其他权限都将被拒绝。您可以使用它来覆盖任何默认集并构建自己的权限集。

安全

此指令可能会在 apache 子进程中打开巨大的安全漏洞,甚至包括以 root 级别权限运行它们。除非您完全了解自己在做什么,否则请勿使用它!

top

VHostGroup 指令

描述设置虚拟主机运行的组 ID。
语法VHostGroup unix-groupid
默认值继承 Group 中指定的组 ID
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

VHostGroup 指令设置服务器将使用哪个 Unix 组来处理对虚拟主机的请求。组在处理请求之前设置,并在之后使用 Solaris 权限 重置。由于设置适用于 进程,因此它与线程化的 MPM 不兼容。

Unix-group 是以下之一:

组名
按名称引用给定的组。
# 后跟组号。
按编号引用组。

安全

此指令不能用于以 root 身份运行 apache!尽管如此,它还是会打开类似于 suexec 文档中讨论的潜在安全问题。

另请参阅

top

VHostPrivs 指令

描述将任意权限分配给虚拟主机。
语法VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ...
默认值
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用,并且当 mod_privileges 使用 BIG_SECURITY_HOLE 编译时选项编译时可用。

VHostPrivs 可用于将任意 权限 分配给虚拟主机。每个 privilege-name 都是 Solaris 权限的名称,例如 file_setidsys_nfs

可选地,privilege-name 可以以 + 或 - 为前缀,分别表示允许或拒绝权限。如果既不使用 + 也不使用 -,则分配给虚拟主机的所有其他权限都将被拒绝。您可以使用它来覆盖任何默认集并构建自己的权限集。

安全

此指令可能在 Apache 中打开巨大的安全漏洞,包括以 root 权限运行请求。除非您完全了解自己在做什么,否则请勿使用它!

top

VHostSecure 指令

描述确定服务器是否以增强的安全性运行虚拟主机。
语法VHostSecure On|Off
默认值VHostSecure On
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

确定虚拟主机是否以增强的安全性处理请求,该安全性通过删除 权限 来实现,这些权限在 Web 服务器中很少需要,但默认情况下可供普通 Unix 用户使用,因此模块和应用程序可能需要它们。建议您保留默认值(On),除非它阻止应用程序运行。由于该设置适用于进程,因此它与线程化的 MPM 不兼容。

注意

如果 VHostSecure 阻止应用程序运行,这可能是应用程序应该进行安全审查的警告信号。

top

VHostUser 指令

描述设置虚拟主机运行的 User ID。
语法VHostUser unix-userid
默认值继承 User 中指定的 userid。
上下文虚拟主机
状态实验性
模块mod_privileges
兼容性在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。

VHostUser 指令设置服务器将用于处理对虚拟主机的请求的 Unix 用户 ID。用户 ID 在处理请求之前设置,并在之后使用 Solaris 权限 重置。由于该设置适用于进程,因此它与线程化的 MPM 不兼容。

Unix-userid 是以下之一

用户名
按名称引用给定的用户。
# 后跟用户编号。
按编号引用用户。

安全

此指令不能用于以 root 身份运行 apache!尽管如此,它还是会打开类似于 suexec 文档中讨论的潜在安全问题。

另请参阅

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题无关,我们的版主可能会将其删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表