Sun ONE logo      上一个      目录      索引      下一个     

Sun ONE Web Server 6.1 管理员指南

附录 C
ACL 文件语法

本附录介绍了访问控制列表 (ACL) 文件及其语法。ACL 文件为文本文件,其中包含定义能够访问储存在 Web 服务器上资源的用户列表。缺省情况下,Web 服务器使用一个包含访问服务器的所有列表的 ACL 文件。但您可以创建多个 ACL 文件,并在 obj.conf 文件中对其进行引用。

如果您打算使用访问控制 API 自定义访问控制,则需要了解 ACL 文件的语法和函数。例如,您可能要使用访问控制 API 与另一数据库(例如 Oracle 或 Informix 数据库)进行连接。有关 API 的详细信息,请访问 Sun ONE 文档站点:

本附录包括以下两部分:


ACL 文件语法

所有 ACL 文件都必须遵守特定的格式和语法。ACL 文件为包含一个或多个 ACL 的文本文件。所有 ACL 文件都必须以其使用的版本号开头。只能有一个版本行,版本行可以位于任何注释行之后。Sun ONE Web Server 6.1 使用版本 3.0。例如:

通过将记号“#”作为注释行的开头,您可以在文件中添加注释。

文件中每个 ACL 开头的语句都定义了 ACL 的类型。ACL 的类型可以是以下三种类型中的一种:

路径 ACL 和 URI ACL 可以在项的末尾添加通配符。例如:/a/b/*。通配符只能位于项的末尾,否则将不起作用。

类型行以字母 acl 开头,然后将类型信息置于双引号中,其后紧跟分号。所有 ACL 的每个类型信息必须具有唯一名称,即使在不同的 ACL 文件中也是如此。以下各行为多个不同 ACL 类型的实例:

定义 ACL 的类型后,可以用一个或多个语句定义 ACL 使用的方法(验证语句)以及允许或拒绝哪些用户和计算机进行访问(授权语句)。以下各部分介绍了这些语句的语法。

本部分包括以下主题:

验证方法

ACL 可以任意指定服务器在处理 ACL 时必须使用的验证方法。以下为三种常规方法:

基本验证方法和摘要验证方法要求用户在访问资源之前输入用户名和密码。

SSL 验证方法要求用户具有客户证书。Web 服务器必须启用加密,并且用户的证书颁发者必须位于要验证的信任 CA 列表中。

缺省情况下,服务器对未指定方法的任何 ACL 都使用“Basic”方法。服务器的验证数据库必须能够处理用户发出的摘要验证。

每个验证行必须指定服务器验证的属性(用户、组或用户和组)。以下验证语句(位于 ACL 类型行之后)将基本验证指定给与数据库或目录中单个用户相匹配的用户:

以下实例将 SSL 用作用户和组的验证方法:

以下实例允许用户名以字母 sales 开头的所有用户进行访问:

如果将最后一行更改为 group = sales,ACL 将失败,因为未对组属性进行验证。

授权语句

每个 ACL 项可能包含一个或多个授权语句。授权语句用于指定允许或拒绝哪些用户访问服务器资源。编写授权语句时请使用以下语法:

以“allow”或“deny”作为每一行的开头。一般来说,最好在第一条规则中拒绝所有用户的访问,然后在接下来的规则中具体指定允许哪些用户、组或计算机进行访问,这是因为规则具有分层结构。也就是说,如果您允许所有用户访问名为 /my_stuff 的目录,然后您又创建了一个只允许少数用户访问的子目录 /my_stuff/personal,则子目录的访问控制将不起作用,因为可以访问 /my_stuff 目录的所有用户也可以访问
/my_stuff/personal 目录。要防止出现上述情况,请为子目录创建一条规则,先拒绝任何用户访问,然后允许少数需要访问的用户访问。

但在某些情况下,如果将缺省 ACL 设置为拒绝所有用户访问,其他 ACL 规则将不需要“deny all”规则。

下面一行语句用于拒绝所有用户的访问:

本部分包括以下主题:

授权语句的分层结构

ACL 的分层结构取决于资源。例如,如果服务器收到对文档 (URI)
/my_stuff/web/presentation.html 的请求,服务器将建立一个适用于该 URI 的 ACL 列表。服务器首先添加其 obj.conf 文件的“check-acl”语句中列出的 ACL,然后附加匹配的 URI 和 PATH ACL。

服务器将以同样的顺序处理此列表。除非出现“absolute”ACL 语句,否则将依次验证所有语句。如果“absolute allow”或“absolute deny”语句验证为“true”,服务器将停止处理并接受此结果。

如果有多个匹配的 ACL,服务器将使用匹配的最后一个语句。但是,如果您使用的是绝对语句,服务器将停止查找其他匹配项,而使用包含该绝对语句的 ACL。如果同一资源有两个绝对语句,服务器将在文件中使用第一个绝对语句并停止查找其他匹配的资源。

version 3.0;
acl "default";
authenticate (user,group) {
     prompt="Web Server";
};
allow (read,execute,list,info)
     user = "anyone";
allow (write,delete)
     user = "all";
acl "uri=/my_stuff/web/presentation.html";
deny (all)
     user = "anyone";
allow (all)
     user = "joe";

属性表达式

属性表达式根据用户的用户名、组名、主机名或 IP 地址来定义允许或拒绝哪些用户进行访问。以下各行为允许不同用户或计算机访问的实例:

使用 timeofday 属性,还可以限制用户访问服务器的时间(以服务器上的当地时间为准)。例如,您可以使用 timeofday 属性将特定用户限制为在特定时间访问。


请使用 24 小时制时间指定时间。例如,使用 0400 指定 4:00 a.m. 或 2230 指定 10:30 p.m.。


下列实例将名为“guests”的一组用户的访问时间限制在 8:00 a.m. 到 4:59 p.m. 之间:

您还可以限制用户在星期几来访问服务器。请使用以下三个字母的缩写来指定星期几:Sun、Mon、Tue、Wed、Thu、Fri 和 Sat。

以下实例允许“premium”组的用户在任意一天的任何时间进行访问。“discount”组的用户可以在周末全天、平时除 8:00 a.m. 至 4:59 p.m. 以外的任何时间进行访问。

表达式运算符

您可以在属性表达式中使用各种运算符。圆括号用于说明运算符的优先顺序。在 usergroupdnsip 中,可以使用以下运算符:

timeofdaydayofweek 中,可以使用:

缺省的 ACL 文件

安装之后,server_root/httpacl/generated.https-serverid.acl 文件为服务器提供了缺省设置。服务器使用工作文件 genwork.https-serverid.acl,直到您在用户界面中创建设置。编辑 ACL 文件时,可以在 genwork 文件中进行更改,然后使用 Sun ONE Web Server 保存和应用更改。

常规语法项目

输入字符串可以包含以下字符:

如果使用任何其他字符,则需要使用双引号将字符引起。

单个语句可以独立成行并以分号结束。多个语句将置于大括号中。项目列表必须用逗号隔开并置于双引号中。


在 obj.conf 中引用 ACL 文件

如果您已命名了 ACL 或独立的 ACL 文件,则可以在 obj.conf 文件中引用它们。您可以在 PathCheck 指令中使用 check-acl 函数完成引用操作。该行使用以下语法:

aclname 是 ACL 显示在任何 ACL 文件中的唯一名称。

例如,如果您要使用名为 testacl 的 ACL 文件限制对某个目录的访问,则可以将下列各行添加到 obj.conf 文件中:

在以上实例中,第一行是对象,用于声明要对其进行访问限制的服务器资源。第二行是 PathCheck 指令,它使用 check-acl 函数将命名 ACL (testacl) 绑定到显示指令的对象。testacl ACL 可以显示在 magnus.conf 中引用的任何 ACL 文件中。



上一个      目录      索引      下一个     


版权所有 2004 Sun Microsystems, Inc.。保留所有权利。