Apache HTTP 服务器版本 2.4
描述 | 基于文件所有权的授权 |
---|---|
状态 | 扩展 |
模块标识符 | authz_owner_module |
源文件 | mod_authz_owner.c |
兼容性 | 在 Apache 2.1 及更高版本中可用 |
此模块通过将用于 HTTP 身份验证的用户 ID(Web 用户 ID)与请求文件的系统所有者或组进行比较,来授权对文件的访问。提供的用户名和密码必须已通过身份验证模块(如 mod_auth_basic
或 mod_auth_digest
)正确验证。 mod_authz_owner
识别 Require
指令的两个参数,file-owner
和 file-group
,如下所示
file-owner
jones
拥有,那么通过 Web 访问该文件的用户名也必须是 jones
。file-group
mod_authz_groupfile
或 mod_authz_dbm
提供,并且 Web 用户名必须是该组的成员。例如,如果操作系统说请求的文件由(系统)组 accounts
拥有,则组 accounts
必须出现在组数据库中,并且请求中使用的 Web 用户名必须是该组的成员。考虑一个运行 Apache Web 服务器的多用户系统,每个用户在 ~/public_html/private
中都有自己的文件。假设有一个单一的 AuthDBMUserFile
数据库列出了所有用户的 Web 用户名,并且这些用户名与系统中实际拥有服务器上文件的用户名匹配,那么以下段落将只允许用户本人访问自己的文件。用户 jones
不允许访问 /home/smith/public_html/private
中的文件,除非这些文件由 jones
而不是 smith
拥有。
<Directory "/home/*/public_html/private"> AuthType Basic AuthName MyPrivateFiles AuthBasicProvider dbm AuthDBMUserFile "/usr/local/apache2/etc/.htdbm-all" Require file-owner </Directory>
考虑一个类似于上面描述的系统,但有些用户在 ~/public_html/project-foo
中共享他们的项目文件。这些文件由系统组 foo
拥有,并且有一个单一的 AuthDBMGroupFile
数据库包含所有 Web 用户名及其组成员身份,即他们必须至少是名为 foo
的组的成员。因此,如果 jones
和 smith
都是组 foo
的成员,那么他们都将被授权访问彼此的 project-foo
目录。
<Directory "/home/*/public_html/project-foo"> AuthType Basic AuthName "Project Foo Files" AuthBasicProvider dbm # combined user/group database AuthDBMUserFile "/usr/local/apache2/etc/.htdbm-all" AuthDBMGroupFile "/usr/local/apache2/etc/.htdbm-all" Satisfy All Require file-group </Directory>