Sun Java logo     上一页      目录      索引      下一页     

Sun logo
Sun Java System Web Proxy Server 4.0.1 管理指南 

附录 A
ACL 文件语法

访问控制列表 (ACL) 文件为文本文件,其所含列表定义了何人可以访问 Proxy Server 资源。默认情况下,Proxy Server 使用一个 ACL 文件,其中包含用于访问服务器的所有列表。也可以创建多个 ACL 文件,并在 obj.conf 文件中对其进行引用。

Proxy Server 4 使用的 ACL 文件语法不同于 Proxy Server 3.x 中使用的语法。本附录将介绍 ACL 文件及其语法。有关对 Proxy Server 及其资源进行访问控制的详细信息,参见控制对服务器的访问。Proxy Server 4 发行版支持资源模板,相关说明见于管理模板和资源

本附录包含以下各节:


关于 ACL 文件和 ACL 文件语法

所有 ACL 文件都必须遵守特定的格式和语法。ACL 文件为包含一个或多个 ACL 的文本文件。所有 ACL 文件都必须以语法版本号开头。例如:

version 3.0;

只能有一个版本行,版本行可以位于任何注释行之后。Proxy Server 使用语法版本 3.0。通过在注释行开头使用 # 符号,可以在文件中加入注释。

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

路径 ACL 和资源 ACL 可以包含通配符。有关通配符的更多信息,参见管理模板和资源

类型行以字母 acl 开头,然后将类型信息括在双引号中,其后跟有分号。例如:

acl "default";
acl "http://*.*";

所有 ACL 的每个类型信息必须具有唯一名称,即使在不同的 ACL 文件中也是如此。定义了 ACL 的类型后,可以用一个或多个语句定义与 ACL 一起使用的方法(验证语句)以及允许或拒绝哪些人员和计算机进行访问(授权语句)。以下各节介绍了这些语句的语法。

本节包括以下主题:

验证语句

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

基本和摘要方法要求用户在访问资源之前输入用户名和口令。

SSL 方法要求用户具有客户机证书。要进行验证,必须为 Proxy Server 开启加密功能,而且用户的证书颁发者必须在可信 CA 列表中。

默认情况下,服务器对未指定方法的任何 ACL 都使用基本方法。服务器的验证数据库必须支持用户所发送的摘要验证。

每一验证行均必须指定服务器验证的属性(用户、组或是这两者)。以下验证语句出现在 ACL 类型行之后,它指定对与数据库或目录中的单个用户相匹配的用户进行基本验证:

authenticate(user) {
    method = "basic";
};

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

authenticate(user, group) {
    method = "ssl";
};

以下示例允许用户名以单词 sales 开头的任何用户进行访问:

allow (all) user = "sales*";

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

授权语句

每个 ACL 条目可能包含一个或多个授权语句。授权语句用于指定允许或拒绝哪些用户访问服务器资源。

编写授权语句

编写授权语句时请使用以下语法:

allow|deny [absolute] (right[,right...]) attribute expression;

allowdeny 作为每一行的开头。通常,最好在第一条规则中拒绝所有人访问,接着在后续规则中具体指定允许哪些用户、组或计算机进行访问。这是因为规则具有分层结构。也就是说,如果您允许任何人访问名为 /my_files 的目录,而后又允许少数用户访问子目录 /my_files/personal,则对子目录的访问控制将不起作用,因为有权访问 /my_files 目录的任何人也都有权访问 /my_files/personal 目录。为防止出现上述情况,请为子目录创建一条规则,先拒绝任何人访问,然后允许少数需要访问的用户访问。

然而,在某些情况下,如果将默认 ACL 设置为拒绝所有人访问,其他 ACL 规则便不需要 "deny all" 规则。

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

deny (all) user = "anyone";

授权语句的分层结构

ACL 的分层结构取决于资源。服务器收到对特定资源的请求时,会建立一个用于申请该资源的 ACL 列表。首先,服务器添加其 obj.conf 文件的 check-acl 语句中列出的命名 ACL。接着,它将附加匹配的路径 ACL 和资源 ACL。此列表的处理顺序与添加顺序相同。除非存在 "absolute" ACL 语句,否则将依次对所有语句求值。如果 "absolute allow" 或 "absolute deny" 语句的求值结果为 "true",服务器将停止处理并接受此结果。

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

version 3.0;
acl "default";
authenticate (user,group) {
  prompt="Sun Java System Web Proxy Server";
};
allow (read,execute,list,info) user = "anyone";
allow (write,delete) user = "all";

acl "http://*.*";
deny (all) user = "anyone";
allow (all) user = "joe";

属性表达式

属性表达式根据用户名、组名、主机名或 IP 地址来定义允许或拒绝何人访问。以下各行举例说明了如何授予不同人员或计算机访问权限:

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

请使用 24 时制指定时间,例如,用 0400 指定上午 4:00 或用 2230 指定晚上 10:30。下列示例将名为 guests 的一组用户的访问时间限制在上午 8:00 到下午 4:59 之间:

allow (read)
    (group="guests") and
    (timeofday<0800 or timeofday=1700);

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

以下语句允许 premium 组中的用户在任意一天的任何时间进行访问。discount 组中的用户在周末可以全天访问,而在工作日可在上午 8 点到下午 4:59 以外的任何时间进行访问。

allow (read) (group="discount" and dayofweek="Sat,Sun") or 
(group="discount" and (dayofweek="mon,tue,wed,thu,fri" and
(timeofday<0800 or timeofday=1700)))
or 
(group="premium");

表达式运算符

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

对于 timeofdaydayofweek,可以使用以下运算符:

默认的 ACL 文件

安装之后,server_root/httpacl/generated.proxy-serverid.acl 文件为服务器提供默认设置。在用户界面中创建设置之前,服务器会一直使用工作文件 genwork.proxy-serverid.acl。编辑 ACL 文件时,可以在 genwork 文件中进行更改,然后使用 Proxy Server 保存和应用更改。

常规语法项目

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

对于其他字符,必须用双引号将字符括起来。

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


在 obj.conf 中引用 ACL 文件

可以在 obj.conf 文件中引用命名 ACL 或单独的 ACL 文件。这是通过在 PathCheck 指令中使用 check-acl 函数完成的。该行使用以下语法:

PathCheck fn="check-acl" acl="aclname"

其中,aclname 是 ACL 出现在任何 ACL 文件中的唯一名称。

例如,可以向 obj.conf 文件添加以下各行,使用名为 testacl 的 ACL 限制对某个目录的访问:

<Object ppath="https://"
PathCheck fn="check-acl" acl="testacl"
</Object

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



上一页      目录      索引      下一页     


文件号码 819-3162。版权所有 2005 Sun Microsystems, Inc. 保留所有权利。