描述: | 支持Solaris特权以及在不同用户ID下运行虚拟主机。 |
---|---|
状态: | 实验性 |
模块标识符: | privileges_module |
源文件: | mod_privileges.c |
兼容性: | 在Solaris 10和OpenSolaris平台上的Apache 2.3及更高版本中可用 |
此模块使不同的虚拟主机能够以不同的Unix 用户和组 ID以及不同的 Solaris特权运行。特别是,它提供了一个解决方案,可以解决不同虚拟主机之间的特权分离问题,这首先是由废弃的perchild MPM提出的。它还提供了其他安全性增强功能。
与Perchild不同,mod_privileges
它本身不是MPM。它在处理模型内工作,可以在运行的进程中为每个请求设置特权和用户/组。因此,它与线程化的MPM不兼容,并且将拒绝在一个MPM下运行。
mod_privileges
提出了类似于suexec的安全问题。但是与suexec不同,它不仅适用于CGI程序,而且适用于整个请求处理周期,包括进程内应用程序和子进程。它非常适合在mod_php下运行PHP应用程序,该程序也与线程MPM不兼容。它也非常适合其他进程内脚本应用程序(例如mod_perl,
mod_python和mod_ruby),以及以C语言作为apache模块实现的应用程序,其中特权分离是一个问题。
mod_privileges
在Web服务器进程中可能运行
不可信代码的情况下,引入了新的安全问题。这适用于不受信任的模块,以及在诸如mod_php或mod_perl之类的模块下运行的脚本。外部运行的脚本(例如,作为CGI或在mod_proxy或mod_jk之后的应用服务器中运行)不受影响。
mod_privileges的基本安全问题是:
该PrivilegesMode
指令允许您选择快速或安全模式。您可以混合模式,对受信任的用户和经过完全审核的代码路径使用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上可用。 |
该指令在性能与安全性之间权衡了恶意的,可识别特权的代码。在“ 安全”模式下,每个请求都在一个安全的子进程中运行,从而导致性能下降。在FAST模式下,如上所述,无法保护服务器免受特权升级。
此指令在<Directory>
上下文(包括等效项,例如Location / Files / If)和顶级或之间略有不同<VirtualHost>
。
在顶层,它设置了一个默认值,它将被虚拟主机继承。在虚拟主机中,FAST或SECURE模式对整个HTTP请求起作用,并且<Directory>
上下文中的任何设置都将被忽略。第三个伪模式SELECTIVE将FAST vs SECURE的选择推迟到<Directory>
上下文中的指令中
。
在<Directory>
上下文中,它仅适用于为VirtualHost设置了SELECTIVE模式的情况。在这种情况下,只能设置FAST或SECURE(SELECTIVE将毫无意义)。
<Directory>
应用到该请求上下文。这可能使攻击者有机会在放弃特权和设置用户标识/用户名之前,通过RewriteMap
在顶层或<VirtualHost>
上下文中
运行来引入代码。
描述: | 确定虚拟主机是否可以运行子流程,以及可用于子流程的特权。 |
---|---|
句法: | VHostCGIMode On|Off|Secure |
默认: | VHostCGIMode On |
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用。 |
确定是否允许虚拟主机运行fork和exec,以及运行子进程所需的特权。如果将其设置为“
关闭”,则虚拟主机将被拒绝特权,并且将无法在传统的mod_cgi
或类似的外部程序(例如由progmod_ext_filter
或
RewriteMap
prog创建的程序)下运行传统的CGI程序或脚本
。请注意,这不会阻止CGI程序在替代进程和安全模型(例如mod_fcgid)下运行,这是Solaris中的推荐解决方案。
如果设置为On或Secure,则允许虚拟主机运行上述外部程序和脚本。设置VHostCGIMode
安全具有拒绝子进程特权的作用,如所述VHostSecure
。
描述: | 为虚拟主机创建的子进程分配任意特权。 |
---|---|
句法: | VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
默认: | None |
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用,并且在mod_privileges 使用
BIG_SECURITY_HOLE编译时选项进行编译时可用。 |
VHostCGIPrivs
可以用来为虚拟主机创建的子进程分配任意特权,如下所述VHostCGIMode
。每个特权名称
都是Solaris特权的名称,例如file_setid
或sys_nfs。
甲特权名称可以任选地通过+前缀或- ,这将分别允许或拒绝一个特权。如果既不使用+也不使用--,则所有其他分配给虚拟主机的特权都将被拒绝。您可以使用它来覆盖任何默认设置并构造您自己的特权集。
该指令可以在apache子进程中打开巨大的安全漏洞,包括并以root级权限运行它们。除非您完全了解自己在做什么,否则请不要使用它!
描述: | 设置用于运行虚拟主机的组ID。 |
---|---|
句法: | VHostGroup unix-groupid |
默认: | Inherits the group id specified in
|
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用。 |
该VHostGroup
指令设置Unix组,服务器将在该Unix组下处理对虚拟主机的请求。在处理请求之前设置组,然后使用Solaris Privileges重新设置组。由于该设置适用于
流程,因此它与线程MPM不兼容。
Unix组是以下之一:
#
然后是组号。该指令不能以root身份运行apache!但是,它带来了类似于suexec 文档中讨论的潜在安全问题。
描述: | 为虚拟主机分配任意特权。 |
---|---|
句法: | VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
默认: | None |
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用,并且在mod_privileges 使用
BIG_SECURITY_HOLE编译时选项进行编译时可用。 |
VHostPrivs
可用于为虚拟主机分配任意特权。每个特权名称
都是Solaris特权的名称,例如file_setid
或sys_nfs。
甲特权名称可以任选地通过+前缀或- ,这将分别允许或拒绝一个特权。如果既不使用+也不使用--,则所有其他分配给虚拟主机的特权都将被拒绝。您可以使用它来覆盖任何默认设置并构造您自己的特权集。
该指令可以在apache中打开巨大的安全漏洞,包括并具有root级权限运行请求。除非您完全了解自己在做什么,否则请不要使用它!
描述: | 确定服务器是否以增强的虚拟主机安全性运行。 |
---|---|
句法: | VHostSecure On|Off |
默认: | VHostSecure On |
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用。 |
确定虚拟主机是否通过删除特权来增强请求的安全性,这些特权在Web服务器中很少需要,但是默认情况下,普通Unix用户可以使用这些特权,因此模块和应用程序可能需要这些特权。建议您保留默认设置(开),除非它阻止应用程序运行。由于该设置适用于流程,因此它与线程MPM不兼容。
如果VHostSecure
阻止应用程序运行,则可能是一个警告标志,应检查该应用程序的安全性。
描述: | 设置运行虚拟主机的用户ID。 |
---|---|
句法: | VHostUser unix-userid |
默认: | Inherits the userid specified in
|
内容: | 虚拟主机 |
状态: | 实验性 |
模块: | mod_privileges |
兼容性: | 在具有非线程MPM(prefork 或自定义MPM)的Solaris 10和OpenSolaris上可用。 |
该VHostUser
指令设置Unix用户ID,服务器将在该用户ID下处理对虚拟主机的请求。在处理请求之前设置用户ID,然后使用Solaris Privileges重置用户ID 。由于该设置适用于
流程,因此它与线程MPM不兼容。
Unix用户标识是以下之一:
#
然后是用户号码。该指令不能以root身份运行apache!但是,它带来了类似于suexec 文档中讨论的潜在安全问题。