• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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_perlmodpythonmod_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

    上篇:mod_nw_ssl

    下篇:mod_proxy