Apache HTTP Server 版本 2.4
描述 | 支持 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_perl、mod_python 和 mod_ruby,以及在 C 中作为 apache 模块实现的应用程序,其中权限分离是一个问题。
mod_privileges
在 不受信任的代码 可能在 webserver 进程内 运行的情况下引入了新的安全问题。这适用于不受信任的模块以及在 mod_php 或 mod_perl 等模块下运行的脚本。在外部运行的脚本(例如作为 CGI 或在 mod_proxy 或 mod_jk 背后的应用程序服务器中运行)不受影响。
mod_privileges 的基本安全问题是
PrivilegesMode
指令允许您选择 FAST 或 SECURE 模式。您可以混合使用模式,对受信任的用户和经过全面审核的代码路径使用 FAST 模式,同时在不受信任的用户有权引入代码的地方强制执行 SECURE 模式。
在描述模式之前,我们还应该介绍目标用例:良性与恶意。在良性情况下,您希望为了方便而将用户分开,并保护他们和服务器免受诚实错误带来的风险,但您信任您的用户不会故意破坏系统安全。在恶意情况下(例如商业托管),您可能会有用户故意攻击系统或彼此攻击。
您可以为每个虚拟主机选择不同的 PrivilegesMode
,甚至可以在虚拟主机内的目录上下文中选择。在用户可信且/或没有权限加载进程内代码的情况下,FAST 模式是合适的。在可能在进程内运行不受信任的代码的情况下,SECURE 模式是合适的。但是,即使在 SECURE 模式下,也无法防止恶意用户能够在 请求处理周期开始之前 引入运行的权限感知代码。
描述 | 确定是否启用了 dtrace 所需的权限。 |
---|---|
语法 | DTracePrivileges On|Off |
默认值 | DTracePrivileges Off |
上下文 | 服务器配置 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。 |
此服务器范围的指令确定 Apache 是否将使用 权限 运行 dtrace。请注意,DTracePrivileges On 本身不会激活 DTrace,但 DTracePrivileges Off 会阻止它工作。
描述 | 权衡处理速度和效率与针对恶意权限感知代码的安全性的关系。 |
---|---|
语法 | 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 将毫无意义)。
<Directory>
上下文适用于请求之后。这可能会给攻击者机会通过在 权限被放弃和用户 ID/组 ID 被设置 之前在顶级或 <VirtualHost>
上下文中运行的 RewriteMap
中引入代码。描述 | 确定虚拟主机是否可以运行子进程,以及子进程可用的权限。 |
---|---|
语法 | VHostCGIMode On|Off|Secure |
默认值 | VHostCGIMode On |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。 |
确定虚拟主机是否允许运行 fork 和 exec,以及运行子进程所需的 权限。如果将其设置为 Off,则虚拟主机将被拒绝权限,并且将无法运行传统的 CGI 程序或脚本,这些脚本在传统的 mod_cgi
下运行,也不能运行类似的外部程序,例如由 mod_ext_filter
或 RewriteMap
prog 创建的程序。请注意,它不会阻止 CGI 程序在替代进程和安全模型下运行,例如 mod_fcgid,这是 Solaris 中推荐的解决方案。
如果设置为 On 或 Secure,则虚拟主机将被允许运行外部程序和脚本,如上所述。将 VHostCGIMode
设置为 Secure 会对子进程拒绝权限,如 VHostSecure
所述。
描述 | 将任意权限分配给虚拟主机创建的子进程。 |
---|---|
语法 | VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
默认值 | 无 |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用,并且当 mod_privileges 使用 BIG_SECURITY_HOLE 编译时选项编译时可用。 |
VHostCGIPrivs
可用于将任意 权限 分配给虚拟主机创建的子进程,如 VHostCGIMode
所述。每个 privilege-name 都是 Solaris 权限的名称,例如 file_setid 或 sys_nfs。
可选地,privilege-name 可以以 + 或 - 为前缀,分别表示允许或拒绝权限。如果既不使用 + 也不使用 -,则分配给虚拟主机的所有其他权限都将被拒绝。您可以使用它来覆盖任何默认集并构建自己的权限集。
此指令可能会在 apache 子进程中打开巨大的安全漏洞,甚至包括以 root 级别权限运行它们。除非您完全了解自己在做什么,否则请勿使用它!
描述 | 设置虚拟主机运行的组 ID。 |
---|---|
语法 | VHostGroup unix-groupid |
默认值 | 继承 |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。 |
VHostGroup
指令设置服务器将使用哪个 Unix 组来处理对虚拟主机的请求。组在处理请求之前设置,并在之后使用 Solaris 权限 重置。由于设置适用于 进程,因此它与线程化的 MPM 不兼容。
Unix-group 是以下之一:
#
后跟组号。此指令不能用于以 root 身份运行 apache!尽管如此,它还是会打开类似于 suexec 文档中讨论的潜在安全问题。
描述 | 将任意权限分配给虚拟主机。 |
---|---|
语法 | VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
默认值 | 无 |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用,并且当 mod_privileges 使用 BIG_SECURITY_HOLE 编译时选项编译时可用。 |
VHostPrivs
可用于将任意 权限 分配给虚拟主机。每个 privilege-name 都是 Solaris 权限的名称,例如 file_setid 或 sys_nfs。
可选地,privilege-name 可以以 + 或 - 为前缀,分别表示允许或拒绝权限。如果既不使用 + 也不使用 -,则分配给虚拟主机的所有其他权限都将被拒绝。您可以使用它来覆盖任何默认集并构建自己的权限集。
此指令可能在 Apache 中打开巨大的安全漏洞,包括以 root 权限运行请求。除非您完全了解自己在做什么,否则请勿使用它!
描述 | 确定服务器是否以增强的安全性运行虚拟主机。 |
---|---|
语法 | VHostSecure On|Off |
默认值 | VHostSecure On |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。 |
确定虚拟主机是否以增强的安全性处理请求,该安全性通过删除 权限 来实现,这些权限在 Web 服务器中很少需要,但默认情况下可供普通 Unix 用户使用,因此模块和应用程序可能需要它们。建议您保留默认值(On),除非它阻止应用程序运行。由于该设置适用于进程,因此它与线程化的 MPM 不兼容。
如果 VHostSecure
阻止应用程序运行,这可能是应用程序应该进行安全审查的警告信号。
描述 | 设置虚拟主机运行的 User ID。 |
---|---|
语法 | VHostUser unix-userid |
默认值 | 继承 |
上下文 | 虚拟主机 |
状态 | 实验性 |
模块 | mod_privileges |
兼容性 | 在具有非线程化 MPM(prefork 或自定义 MPM)的 Solaris 10 和 OpenSolaris 上可用。 |
VHostUser
指令设置服务器将用于处理对虚拟主机的请求的 Unix 用户 ID。用户 ID 在处理请求之前设置,并在之后使用 Solaris 权限 重置。由于该设置适用于进程,因此它与线程化的 MPM 不兼容。
Unix-userid 是以下之一
#
后跟用户编号。此指令不能用于以 root 身份运行 apache!尽管如此,它还是会打开类似于 suexec 文档中讨论的潜在安全问题。