mod_privileges
描述: | 支持 Solaris 权限以及在不同用户 ID 下运行虚拟主机。 |
状态: | 试验 |
模块标识符: | privileges_module |
源文件: | mod_privileges.c |
兼容性: | 在 Solaris 10 和 OpenSolaris 平台上的 Apache 2.3 及更高版本中可用 |
摘要
此模块允许不同的虚拟主机使用不同的 Unix 用户和 Group ID 运行,并使用不同的Solaris 权限。特别是,它提供了解决不同虚拟主机之间的权限分离问题的解决方案,首先由废弃的 perchild MPM 承诺。它还提供其他安全增强功能。
与 perchild 不同,mod_privileges本身不是 MPM。它在处理 model 中工作,以在 running process 中为每个请求设置权限和 User/Group。因此它与线程 MPM 不兼容,并拒绝在一个下运行。
mod_privileges引发类似于suEXEC的安全问题。但与 suexec 不同,它不仅适用于 CGI 程序,还适用于整个请求处理周期,包括 in-process applications 和 subprocesses。它非常适合在mod_php下运行 PHP applications,这也与线程 MPM 不兼容。它也适用于其他 in-process 脚本应用程序,例如mod_perl,modpython和mod_ruby,以及作为 apache 模块在 C 中实现的 applications,其中权限分离是一个问题。
安全注意事项
在网络服务器 process 中不受信任的 code**可能是 run **的情况下,mod_privileges引入了新的安全问题。这适用于不受信任的模块,以及在 mod_php 或 mod_perl 等模块下运行的脚本。外部运行的脚本(e.g.作为 CGI 或 mod_proxy 或 mod_jk 后面的 appserver)不受影响。
mod_privileges 的基本安全问题是:
- Running 作为系统用户引入了与 mod_suexec 和 near-equivalents 相同的安全问题,例如 cgiwrap 和 suphp。
- privileges-aware 恶意用户扩展(模块或脚本)可以将其权限升级为任何虚拟 host 中 httpd process 可用的任何内容。如果(并且仅当)mod_privileges 使用 BIG_SECURITY_HOLE 选项编译时,这会引入新的风险。
- privileges-aware 恶意用户扩展(模块或脚本)可以升级权限以将其用户 ID 设置为另一个系统用户(and/or group)。
PrivilegesMode
指令允许您选择 FAST 或 SECURE 模式。您可以使用 FAST 模式为受信任的用户和 fully-audited code paths 混合模式,同时强制使用 SECURE 模式,其中不受信任的用户可以引入 code。
在描述模式之前,我们还应该介绍目标用例:Benign vs Hostile。在良好的情况下,您希望将用户分开以方便使用,并保护他们和服务器免受诚实错误带来的风险,但您相信您的用户不会故意破坏系统安全性。处于敌对状态- e.g.商业主机-您可能会让用户故意攻击系统或相互攻击。
- 快速模式
在 FAST 模式下,请求 run in-process 具有所选的 uid/gid 和权限,因此开销可以忽略不计。这适用于良性情况,但对于使用 in-process 模块或脚本的攻击者升级权限是不安全的。 - 安全模式
SECURE 模式下的请求会分叉 subprocess,然后会丢弃权限。这是一个非常类似于使用 suexec 运行 CGI 的情况,但是对于整个请求周期,以及 fine-grained 控制权限的好处。
您可以为每个虚拟 host 选择不同的PrivilegesMode
,甚至可以在虚拟 host 中的 context 目录中选择。在 user(s)受信任的情况下,FAST 模式是合适的 and/or 没有加载 in-process code 的权限。 SECURE 模式适用于不受信任的 code 可能是 run in-process 的情况。但是,即使在安全模式下,也无法防止能够在 request-processing 周期开始之前引入 privileges-aware code running 的恶意用户。
DTracePrivileges 指令
描述: | 确定是否启用 dtrace 所需的权限。 |
句法: | DTracePrivileges On\|Off |
默认: | DTracePrivileges Off |
Context: | 服务器配置 |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
此 server-wide 指令确定 Apache 是否将_r与_r所需的特权运行。请注意,DTracePrivileges On 本身不会激活 DTrace,但 DTracePrivileges Off 将阻止它工作。
PrivilegesMode 指令
描述: | 权衡处理速度和效率与安全性对抗恶意 privileges-aware code。 |
句法: | PrivilegesMode FAST\|SECURE\|SELECTIVE |
默认: | PrivilegesMode FAST |
Context: | server config,virtual host,目录 |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
该指令将 performance vs security 与恶意的 privileges-aware code 进行权衡。在 SECURE 模式下,每个请求都在一个安全的 subprocess 中运行,从而导致严重的性能损失。在快速模式下,如上所述,服务器不受保护以防止特权升级。
该指令在<Directory>
context(包括诸如 Location/Files/If 的等价物)和 top-level 或<VirtualHost>
之间略有不同。
在 top-level,它设置了一个将由虚拟主机继承的默认值。在虚拟 host 中,FAST 或 SECURE 模式作用于整个 HTTP 请求,context 中的任何设置都将被忽略**。第三个 pseudo-mode SELECTIVE 将 FAST 与 SECURE 的选择推迟到<Directory>
context 中的指令。
在<Directory>
context 中,仅适用于为 VirtualHost 设置 SELECTIVE 模式的情况。只能在此 context 中设置 FAST 或 SECURE(SELECTIVE 将毫无意义)。
警告
如果为虚拟 host 选择了 SELECTIVE 模式,则必须延迟激活权限,直到请求处理的映射阶段确定<Directory>
context 应用于请求为止。这可能会让攻击者有机会在 top-level 或<VirtualHost>
context 之前通过RewriteMap 指令 running 引入 code,然后才能删除权限并设置 userid/gid。
VHostCGIMode 指令
描述: | 确定虚拟主机是否可以 run 子进程以及子进程可用的权限。 |
句法: | VHostCGIMode On\|Off\|Secure |
默认: | VHostCGIMode On |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
确定是否允许虚拟 host 运行 run fork 和 exec,特权是否需要 run 子进程。如果将此设置为 Off,则虚拟主机将被拒绝权限,并且无法在传统的mod_cgi下运行传统的 CGI 程序或脚本,也无法执行类似的外部程序,例如mod_ext_filter或RewriteMap 指令 prog 创建的程序。请注意,它不会阻止 CGI 程序在其他 process 和安全模型(如mod_fcgid)下运行,这是 Solaris 中推荐的解决方案。
如果设置为 On 或 Secure,则允许虚拟 host 运行如上所述的外部程序和脚本。设置VHostCGIMode
Secure 具有拒绝子进程权限的效果,如VHostSecure
所述。
VHostCGIPrivs 指令
描述: | 为虚拟 host 创建的子进程分配任意权限。 |
句法: | VHostCGIPrivs[+-]?privilege-name[[+-]?privilege-name]... |
默认: | None |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 在带有 non-threaded MPM(预派生或自定义 MPM)的 Solaris 10 和 OpenSolaris 上以及使用 BIG_SECURITY_HOLE compile-time 选项编译mod_privileges时可用。 |
VHostCGIPrivs
可用于将任意特权分配给由虚拟 host 创建的子进程,如VHostCGIMode
中所述。每个 privilege-name 都是 Solaris 权限的 name,例如 file_setid 或 sys_nfs。
可以可选地以或-作为前缀,其将分别允许或拒绝特权。如果既不使用也不使用-,则将拒绝以其他方式分配给虚拟主机的所有权限。您可以使用它来覆盖任何默认_set 并构建您自己的权限集。
安全
该指令可以在 apache 子进程中打开巨大的安全漏洞,直到并包括_以 root-level 权限运行它们。除非你完全理解你在做什么,否则不要使用它!
VHostGroup 指令
描述: | 设置运行虚拟 host 的 Group ID。 |
句法: | VHostGroup unix-groupid |
默认: | 继承组中指定的 group id |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
VHostGroup
指令设置 Unix group,服务器将在其下处理对虚拟主机的请求。在处理请求之前设置 group,然后使用Solaris 权限重置。由于该设置适用于 process,因此与线程 MPM 不兼容。
Unix-group 是以下之一:
- 一个 group name
指 name 给定的 group。 #
后跟 group 编号。
按其编号指 group。
安全
该指令不能用作 run apache 作为 root 用户!然而,它打开了类似于suEXEC文档中讨论的潜在安全问题。
参见
- 组
- SuexecUserGroup
VHostPrivs 指令
描述: | 为虚拟 host 分配任意权限。 |
句法: | VHostPrivs[+-]?privilege-name[[+-]?privilege-name]... |
默认: | None |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 在带有 non-threaded MPM(预派生或自定义 MPM)的 Solaris 10 和 OpenSolaris 上以及使用 BIG_SECURITY_HOLE compile-time 选项编译mod_privileges时可用。 |
VHostPrivs
可用于将任意特权分配给虚拟 host。每个 privilege-name 都是 Solaris 权限的 name,例如 file_setid 或 sys_nfs。
可以可选地以或-作为前缀,其将分别允许或拒绝特权。如果既不使用也不使用-,则将拒绝以其他方式分配给虚拟主机的所有权限。您可以使用它来覆盖任何默认_set 并构建您自己的权限集。
安全
该指令可以在 apache 中打开巨大的安全漏洞,直至并包括具有 root-level 权限的 running 请求。除非你完全理解你在做什么,否则不要使用它!
VHostSecure 指令
描述: | 确定服务器是否以增强的虚拟主机安全性运行。 |
句法: | VHostSecure On\|Off |
默认: | VHostSecure On |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
确定虚拟 host 是否通过删除 Web 服务器中很少需要的特权来处理具有增强安全性的请求,但是默认情况下可用于普通 Unix 用户,因此可能是模块和应用程序所需要的。建议您保留默认值(On),除非它阻止 application running。由于该设置适用于 process,因此与线程 MPM 不兼容。
注意
如果VHostSecure
阻止 application running,这可能是一个警告标志,应该检查 application 的安全性。
VHostUser 指令
描述: | 设置运行虚拟 host 的用户标识。 |
句法: | VHostUser unix-userid |
默认: | 继承用户中指定的用户标识 |
Context: | 虚拟 host |
状态: | 试验 |
模块: | mod_privileges |
兼容性: | 可在 Solaris 10 和 OpenSolaris 上使用 non-threaded MPM(预派生或自定义 MPM)。 |
VHostUser
指令设置 Unix 用户标识,服务器将在其下处理对虚拟主机的请求。在处理请求之前设置 userid,然后使用Solaris 权限重置。由于该设置适用于 process,因此与线程 MPM 不兼容。
Unix-userid 是以下之一:
- 用户名
通过 name 引用给定的用户。 #
后跟用户编号。
用户编号指的是用户。
安全
该指令不能用作 run apache 作为 root 用户!然而,它打开了类似于suEXEC文档中讨论的潜在安全问题。
参见
- 用户
- SuexecUserGroup