![]() | |
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 指定受其影响的模板,如 http://、https://、ftp:// 等等。有关模板的更多信息,参见管理模板和资源。
- 命名 ACL 指定在 obj.conf 文件的资源中引用的名称。服务器随带有一个默认的命名资源,任何用户均可对其进行读访问,而只有 LDAP 目录中的用户可对其进行写访问。尽管可以从 Proxy Server 用户界面创建命名 ACL,但必须在 obj.conf 文件的资源中手动引用该命名 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;
以 allow 或 deny 作为每一行的开头。通常,最好在第一条规则中拒绝所有人访问,接着在后续规则中具体指定允许哪些用户、组或计算机进行访问。这是因为规则具有分层结构。也就是说,如果您允许任何人访问名为 /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。如果同一资源有两个绝对语句,服务器将使用文件中的第一个语句并停止查找其他匹配的资源。
属性表达式
属性表达式根据用户名、组名、主机名或 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");表达式运算符
可以在属性表达式中使用各种运算符。圆括号用于说明运算符的优先顺序。对于 user、group、dns 和 ip,可以使用以下运算符:
对于 timeofday 和 dayofweek,可以使用以下运算符:
默认的 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 文件中。