Sun Java System Web Proxy Server 4.0.8 管理指南

关于 ACL 文件和 ACL 文件语法

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

version 3.0;

版本行可以在所有注释行之后显示。Proxy Server 使用语法版本 3.0。可以通过在注释行的开头使用 # 符号将注释包括在文件中。

文件中的每个 ACL 都以定义其类型(路径、资源或命名)的语句开头。

路径 ACL 和资源 ACL 可以包括通配符。有关通配符的更多信息,请参见第 16 章

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

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

所有 ACL 的每个类型信息必须具有唯一名称,即使在不同的 ACL 文件中也是如此。定义了 ACL 的类型后,便可以包含一个或多个验证语句,可定义用于 ACL 的方法。此外,还可以包括授权语句,用于定义被允许或拒绝进行访问的用户和计算机。以下各部分将介绍这些语句的语法。

验证语句

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

Basic 和 Digest 方法要求用户提供用户名和密码,然后才能访问资源。

SSL 验证方法要求用户具有客户机证书。要进行验证,必须针对 Proxy Server 启用加密功能,并且用户的证书签发者必须位于信任的 CA 列表中。

默认情况下,服务器对未指定方法的任何 ACL 都使用 Basic 验证方法。服务器的验证数据库必须支持用户发出的 Digest 验证。

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

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 列表。服务器首先将列出的命名 ACL 添加到其 obj.conf 文件的 check-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 a.m. 或使用 2230 指定 10:30 p.m.。以下实例将名为 guests 的用户组限制为在 8:00 a.m. 到 4:59 p.m. 这段时间进行访问。

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

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

以下语句允许 premium 组的用户在任意一天的任何时间进行访问。discount 组的用户在周末全天以及平日除 8 a.m. 到 4:59 p.m. 这段时间之外的任何时间进行访问。

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 保存和应用更改。

常规语法项目

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

对于其他字符,必须将字符置于双引号中。

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