所有 ACL 文件都必须遵守特定的格式和语法。ACL 文件为包含一个或多个 ACL 的文本文件。所有 ACL 文件都必须以单个语法版本号开头。 例如:
version 3.0;
版本行可以在所有注释行之后显示。Proxy Server 使用语法版本 3.0。可以通过在注释行的开头使用 # 符号将注释包括在文件中。
文件中的每个 ACL 都以定义其类型(路径、资源或命名)的语句开头。
资源 ACL 指定它们所影响的模板,例如 http://、https://、ftp:// 等。有关这些模板的更多信息,请参见第 16 章。
命名 ACL 指定在 obj.conf 文件内的资源中引用的名称。服务器带有一个默认命名资源,任何用户都可以对其进行读取访问,但只有 LDAP 目录中的用户可以对其进行写入访问。尽管可以通过 Proxy Server 用户界面创建命名 ACL,但是您必须对 obj.conf 文件中的资源手动引用命名 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;
以 allow 或 deny 作为每一行的开头。由于规则具有分层结构,因此在第一条规则中拒绝所有用户的访问,然后在接下来的规则中具体指定允许哪些用户、组或计算机进行访问。例如,如果允许所有用户访问名为 /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 地址来定义允许或拒绝哪些用户进行访问。以下行提供的实例显示了如何为不同的用户或计算机授予访问权限:
user = "anyone"
user = "smith*"
group = "sales"
dns = "*.mycorp.com"
dns = "*.mycorp.com,*.company.com"
ip = "198.*"
ciphers = "rc4"
ssl = "on"
使用 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");
可以在属性表达式中使用各种运算符。圆括号用于说明运算符的优先顺序。以下运算符可以用于 user、group、dns 和 ip:
以下运算符可以用于 timeofday 和 dayofweek:
大于
< 小于
= 大于等于
<= 小于等于
安装之后,server_root/httpacl/generated.proxy- serverid.acl 文件为服务器提供了默认设置。在用户界面中创建设置之前,服务器将使用工作文件 genwork.proxy- serverid.acl。编辑 ACL 文件时,可以在 genwork 文件中进行更改,然后使用 Proxy Server 保存和应用更改。
输入字符串可以包含以下字符:
字母 a 至 z
数字 0 至 9
句点和下划线
对于其他字符,必须将字符置于双引号中。
单个语句可以独立成行并以分号结束。多个语句将置于大括号中。项目列表必须用逗号隔开并置于双引号中。