访问控制 - 设置服务器的访问控制
使用此节描述的指令来控制访问服务器的资源。
你按照用于访问那些文件的请求来把保护设置与文件组进行链接。使用DefProt 和Protect指令来定义你想要保护的请求。
可在单独的保护文件或直接在配置文件中定义实际的保护设置。在配置文件内定义, 可用Protection指令来定义和命名(标签)一个保护设置。也可直接在DefProt或Protect指令中定义一个保护设置。
本节还描述了定义一个保护设置的子指令。
参看"保护服务器"中关于保护服务器资源的每一步的指示。
DefProt - 指定匹配一个模板的请求的缺省保护设置
使用该指令来把缺省保护设置和匹配模板的请求联系起来。 注意: 要使保护正确工作, 配置文件中在任何Pass或Exec 指令之前必须放置DefProt和Protect指令。
该指令的格式为:
DefProt request-template
setup [FOR Server-IP-address
或 hostname]
注意: 指令必须在一行内输入,尽管这里显示的是两行。
request-template
你想要与缺省保护设置联系的请求模板。服务器对进入的客户请求和模板进行比较,在找到一个匹配的模板时与一个保护设置联系起来。
保护对于匹配模板的请求实际上没有被激活,除非请求也与后面的Protect指令中的模板相匹配。参看有关Protect指令的描述,以了解与DefProt一起使用的方法。
setup
你想要把它与匹配请求模板的请求联系起来的缺省保护设置。保护设置用保护子指令定义。参看"保护子指令"中关于保护子指令的描述。该参数可用以下三种形式之一:
标识包含保护子指令的单独文件的全路径与文件名。
与前面在Protection指令中定义的名称匹配的保护设置标签名。Protection指令包含保护子指令。
实际的保护子指令。子指令必须用花括号 {}括起来。左花括号字符必须是在与DefProt指令同一行中的最后一个字符。每个子指令有单独的一行。右花括号字符必须在跟在最后一个子指令行后面的单独一行中。在花括号之间不能放置注解行。
FOR Server-IP-address 或 hostname
如果使用多IP 地址或虚拟主机,请使用此参数指定IP 地址或主机名。(要了解使用多IP 地址或虚拟主机的更多信息,参看"运行拥有多个IP地址的服务器或虚拟主机"。) 服务器只对发送服务器此 IP 地址或此虚拟主机的请求使用指令。对于一IP地址, 这是服务器网络连接的地址,而不是正在请求的客户的地址。
可指定一个IP地址(例如, FOR 204.146.167.72) 或指定一个主机名(例如, FOR hostA.bcd.com)。
该参数是可选的。如果没有此参数,服务器对全部请求使用此指令,而不管进入的请求的IP地址或URL中的主机名是什么。
记录:
要使用该参数, 设置参数的形式必须是一个路径与文件名称或一个保护设置标签。设置参数不能使用在花括号之内的子指令。
要使用该参数,必须在设置参数和 IP地址或主机名 之间放置FOR或某些其他字符串 (不含空格)。
通配符不能用于指定服务器的IP 地址。
例:
DefProt /secret/* d:serverprotectsetup1.acc
上例标识包含保护子指令的一个单独文件。
DefProt /secret/* SECRET-PROT
上例用一个标签名来指向保护子指令。标签名必须与Protection指令中的标签名匹配。 Protection指令必须出现在DefProt指令之前。
DefProt {
AuthType Basic
ServerID restricted
PasswdFile d:docsWWWestrict.pwd
GroupFile d:docsWWWestrict.grp
GetMask authors
PutMask authors
}
上例包含作为DefProt指令一部分的保护子指令。
DefProt /secret/* CustomerA-PROT 9.67.106.79
DefProt /secret/* CustomerB-PROT 9.83.100.45
上例使用可选的IP地址参数。如果你的服务器收到由 /secret/开头的请求, 则按照请求进入的网络连接的IP地址来把各种缺省保护设置与请求联系起来。对于在9.67.106.79中进入的请求, 服务器把请求与定义在带CustomerA-PROT标签的Protection指令中的缺省保护联系起来。对于在9.83.100.45进入的请求, 服务器把请求与定义在带CustomerB-PROT标签的Protection指令中的缺省保护联系起来。
DefProt /secret/* CustomerA-PROT hostA.bcd.com
DefProt /secret/* CustomerB-PROT hostB.bcd.com
上例使用可选的主机名参数。如果服务器收到由 /secret/开头的请求, 则按照URL中的主机名把各种缺省保护设置与请求联系起来。对于进入hostA的请求, 服务器把请求与定义在带CustomerA-PROT标签的Protection指令中的缺省保护联系起来。对于进入hostB的请求, 服务器把请求与定义在带CustomerB-PROT标签的Protection指令中的缺省保护联系起来。
程序缺省设置
无。
初始配置文件设置
无。
Protect - 激活匹配一个模板的请求的保护设置
使用该指令来激活匹配一个模板的请求的保护设置规则 Attention: 要使保护正确工作, 配置文件中在任何Pass或Exec 指令之前必须放置DefProt和Protect指令。
该指令的格式对于两种情况是不同的:你想要指向一个包含保护子指令的标签或文件;你想要包含保护子指令作为Protect指令的一部分。
在你想要指向一个包含保护子指令的标签或文件时,它的格式如下:
Protect request-template [setup-file/label[FOR Server-IP-address
or hostname ]]
注意: 指令必须在一行内输入,尽管这里显示的是两行。
在你想要包含保护子指令作为Protect指令的一部分时,它的格式如下:
Protect 请求模板 [服务器IP地址或主机名] {
子指令 值
子指令 值
.
. .
}
request-template
你想要激活保护值的请求模板。服务器对进入的客户请求和模板进行比较,在找到一个匹配的模板时激活保护。
setup-file/label
在指向一个包含保护子指令的标签或文件时,使用该参数来标识你想要激活的匹配请求模板的请求的保护设置。
该参数是可选的。如果该参数省略, 则使用由最近的包含匹配模板的DefPort指令定义的保护设置。
保护设置用保护子指令定义。参看"保护子指令"中关于保护子指令的描述。如果有该参数, 则其可用以下三种形式之一:
标识包含保护子指令的单独文件的全路径与文件名。
与前面在Protection指令中定义的名称匹配的保护设置标签名。Protection指令包含保护子指令。
实际的保护子指令。子指令必须用花括号 {}括起来。左花括号字符必须是在与DefProt指令同一行中的最后一个字符。每个子指令有单独的一行。右花括号字符必须在跟在最后一个子指令行后面的单独一行中。在花括号之间不能放置注解行。
子指令值
在你想要包含保护子指令作为Protect指令的一部分时,使用该参数。左花括号字符必须是在与Protect指令同一行中的最后一个字符。每个子指令有单独的一行。右花括号字符必须在跟在最后一个子指令行后面的单独一行中。在花括号之间不能放置注解行。
参看"保护子指令"中关于保护子指令的描述。
FOR Server-IP-address or hostname
如果使用多IP 地址或虚拟主机,请使用此参数指定IP 地址或主机名。(要了解使用多IP 地址或虚拟主机的更多信息,参看"运行拥有多个IP地址的服务器或虚拟主机"。) 服务器只对发送服务器此 IP 地址或此虚拟主机的请求使用指令。对于一IP地址, 这是服务器网络连接的地址,而不是正在请求的客户的地址。
可指定一个IP地址(例如, FOR 204.146.167.72) 或指定一个主机名(例如, FOR hostA.bcd.com)。
该参数是可选的。如果没有此参数,服务器对全部请求使用此指令,而不管进入的请求的IP地址或URL中的主机名是什么。
记录:
要使用该参数, 必须同时使用设置文件/标签参数或子指令 值参数。
要与设置文件/标签参数同用该参数, 必须在设置文件/标签参数和 IP地址 或 主机名参数之间放置 FOR或某些其他字符串 (不含空格)。
要与子指令 值参数同用该参数, 不要在IP地址或主机名之前放置 FOR。
通配符不再能够用于指定服务器的IP 地址。
例:
Protection BUS-PROT {
AuthType Basic
ServerID restricted
PasswdFile d:docsWWWestrict.pwd
GroupFile d:docsWWWestrict.grp
GetMask authors
PutMask authors
}
DefProt /secret/* d:serverprotectsetup1.acc
Protect /secret/scoop/*
Protect /secret/business/* BUS-PROT
Protect /topsecret/* {
AuthType Basic
ServerID restricted
PasswdFile d:docsWWWestrict.pwd
GroupFile d:docsWWWestrict.grp
GetMask topbrass
PutMask topbrass
}
Pass /secret/scoop/* d:WWWestricted*
Pass /secret/business/* d:WWWconfidential*
Pass /topsecret/* d:WWW opsecret*
上例中, 服务器激活保护如下:
用/secret/scoop/开头的请求激活保护。保护设置定义在 d:serverprotectsetup1.acc保护设置文件里。因Protect指令没有指定一个保护设置,所以使用上一个与DefProt指令匹配的保护设置。
用/secret/business/开头的请求激活保护。保护设置定义在有标签BUS_PROT的Protection指令中。
用/topsecret/开头的请求激活保护。保护设置直接包含在Protect指令中。
Protect /secret/* CustomerA-PROT FOR 9.67.106.79
Protect /secret/* CustomerB-PROT FOR 9.83.100.45
Protect /topsecret/* 9.67.106.79 {
AuthType Basic
ServerID restricted
PasswdFile /docs/WWW/customer-A.pwd
GroupFile /docs/WWW/customer-A.grp
GetMask A-brass
PutMask A-brass
}
Protect /topsecret/* 9.83.100.45 {
AuthType Basic
ServerID restricted
PasswdFile /docs/WWW/customer-B.pwd
GroupFile /docs/WWW/customer-B.grp
GetMask B-brass
PutMask B-brass
}
上述例子使用IP地址。如果你的服务器收到由 /secret/或/topsecret/开头的请求, 则按照请求进入的网络连接的IP地址来激活各种保护设置。
对于在9.67.106.79中进入的/secret/请求,服务器激活定义在带 CustomerA-PROT标签的Protection指令中的保护设置。对于在9.67.106.79中进入的/topsecret/请求,服务器激活定义在 /topsecrect/的Protect指令行中的保护设置。
对于在9.83.100.45进入的/secret/请求,服务器激活定义在带 CustomerB-PROT标签的Protection指令中的保护设置。对于在9.83.100.45进入的/topsecret/请求,服务器激活定义在 /topsecrect/的Protect指令行中的保护设置。
Protect /secret/* CustomerA-PROT FOR hostA.bcd.com
Protect /secret/* CustomerB-PROT FOR hostB.bcd.com
Protect /topsecret/* hostA.bcd.com {
AuthType Basic
ServerID restricted
PasswdFile /docs/WWW/customer-A.pwd
GroupFile /docs/WWW/customer-A.grp
GetMask A-brass
PutMask A-brass
}
Protect /topsecret/* hostB.bcd.com {
AuthType Basic
ServerID restricted
PasswdFile /docs/WWW/customer-B.pwd
GroupFile /docs/WWW/customer-B.grp
GetMask B-brass
PutMask B-brass
}
上述例子使用虚拟主机。如果你的服务器收到由 /secret/或/topsecret/开头的请求, 则按照URL中的主机名来激活各种保护设置。
对于进入hostA.bcd.com的/secret/请求,服务器激活定义在带 CustomerA-PROT标签的Protection指令中的保护设置。对于进入hostA.bcd.com的/topsecret/请求,服务器激活定义在 /topsecrect/的Protect指令行中的保护设置。
对于进入hostB.bcd.com的/secret/请求,服务器激活定义在带 CustomerB-PROT标签的Protection指令中的保护设置。对于进入hostB.bcd.com的/topsecret/请求,服务器激活定义在 /topsecrect/的Protect指令行中的保护设置。 Default: 保护由带请求模板为/admin-bin/*的Protect指令为“配置和管理”表格提供。
Protection - 在配置文件中定义一个命名的保护设置
使用该指令来定义在配置文件中的保护设置。给定保护设置的名称,并使用保护子指令来定义保护的类型。 注意: 在配置文件中, 必须在指向它们的DefProt或Protect指令之前放置Protection指令。
该指令的格式为:
Protection 标签名 {
子指令 值
子指令 值
.
.
.
}
label-name
你想要与该保护设置联系的标签的名称。该名称可用于后面的DefProt和 Protect指令以指向该保护设置。
子指令值
在左花括号和右花括号之间的每一行中放置一个保护子指令及其值。在花括号之间不能放置注解行。
参看"保护子指令"中关于保护子指令的描述。
例
Protection NAME-ME {
AuthType Basic
ServerID restricted
PasswdFile d:WWWpassword.pwd
GroupFile d:WWWgroup.grp
GetMask groupname
PutMask groupname
}
初始配置文件设置
Protection PROT-ADMIN {
PasswdFile C:TCPIPETCADMIN.PWD
Mask All@(*)
PostMask All@(*)
PutMask All@(*)
GetMask All@(*)
AuthType Basic
ServerID Private_Authorization
}
保护子指令
以下是用于保护设置中的每个保护子指令的描述。子指令按字母次序排列。
保护设置可在一个单独的文件中,或在配置文件中作为 DefProt、Protect或Protection指令的一部分。
参看"保护例子(没有SSL客户认证)"和前面关于 DefProt、Protect和 Protection指令的描述中的使用保护设置的例子。
ACLOverride - 指定ACL文件覆盖保护设置
如果想要访问控制表格文件(ACL)覆盖在保护设置中指定的掩码,则使用该子指令的值On。如果由保护设置保护的目录有一个 ACL文件, 则忽略在保护设置中的掩码子指令。(掩码子指令有 DeleteMask、GetMask、Mask、 PostMask和PutMask。)
参看"使用访问控制表格(ACL)文件" 来得到有关ACL文件的更多信息。
例
ACLOverride On
AuthType - 指定认证类型
在限制基于用户名和口令的访问时使用该子指令。指定在客户向服务器发送一个口令时使用的认证类型。用基本认证(AuthType Basic),向服务器发送的口令是普通文本。它们经过编码,但没有加密。
例
AuthType Basic
DeleteMask - 指定允许删除文件的用户名、组和地址
使用该子指令来指定允许对保护的目录执行DELETE请求的用户名、组和地址模板。参看"指定用户名、组名和地址模板的规则"。
例
DeleteMask authors,(niceguy,goodie)@96.96.3.1,128.141.*.*
GetMask - 指定允许取文件的用户名、组和地址
使用该子指令来指定允许对保护的目录执行GET请求的用户名、组和地址模板。参看"指定用户名、组名和地址模板的规则"。
例
GetMask authors,(niceguy,goodie)@96.96.3.1,128.141.*.*
GroupFile - 指定相关联的组文件的位置
使用该子指令来指定你想要该保护设置使用的服务器组文件的路径与文件名。在服务器组文件内定义的组可用于:
作为保护设置一部分的掩码子指令。(掩码子指令有 DeleteMask、GetMask、Mask、 PostMask和PutMask。)
保护设置保护的目录的ACL文件。
参看"使用服务器组文件"来得到有关服务器组文件的更多信息。
例
GroupFile d:docsWWWestrict.group
Mask - 指定允许进行HTTP请求的用户名、组和地址
使用该子指令来指定允许进行其他掩码没有操作的HTTP请求的用户名、组和地址模板。参看"指定用户名、组名和地址模板的规则"。关于服务器支持的 HTTP 方法的说明,请参看 "方法 - 设置接受的方法"。
例
Mask authors,(niceguy,goodie)@96.96.3.1,128.141.*.*
PasswdFile - 指定关联口令文件的位置
在限制基于用户名和口令的访问时使用该子指令。指定你想要该保护设置使用的口令文件的路径和名称。
因为有些浏览器(例如NetScape)根据主机内的安全性领域(Serverld)高速缓存用户ID/口令,所以当指定ServerID和口令文件时请遵循下列指导:
使用相同的口令文件的 Protection 设置应该使用相同的服务器标识。
使用不同的口令文件的 Protection 设置应该使用不同的服务器标识。
例
PasswdFile c:WWWestrict.password
PostMask - 指定允许POST文件的用户名、组和地址
对于一个安全的服务器,使用该子指令来指定允许对保护的目录进行POST请求的用户名、组和地址模板。参看"指定用户名、组名和地址模板的规则"。
例
PostMask authors,(niceguy,goodie)@96.96.3.1,128.141.*.*
PutMask - 指定允许PUT文件的用户名、组和地址
使用该子指令来指定允许对保护的目录执行PUT请求的用户名、组和地址模板。参看"指定用户名、组名和地址模板的规则"。
例
PutMask authors,(niceguy,goodie)@96.96.3.1,128.141.*.*
ServerID - 指定与口令文件关联的一个名称
在限制基于用户名和口令的访问时使用该子指令。指定你想要与使用的口令文件关联的名称。名称不必是一个实际的机器名。
该名称用作对请求器的一个标识符。因不同的保护设置可使用不同的口令文件,给定一个与保护设置关联的名称能帮助客户决定要发送的口令。大多数客户在提示一个用户名和口令时显示该名称。
因为有些浏览器(例如NetScape)根据主机内的安全性领域(Serverld)高速缓存用户ID/口令,所以当指定ServerID和口令文件时请遵循下列指导:
使用相同的口令文件的 Protection 设置应该使用相同的服务器标识。
使用不同的口令文件的 Protection 设置应该使用不同的服务器标识。
例
ServerID restricted
SSL客户认证子目录
如果实现SSL客户认证,则当客户发出 https请求时,服务器要求客户的证书。不管客户是否拥有有效的证书,服务器都建立一个安全连接。
可以通过"保护服务器"中描述的保护设置使用口令文件和/或用户或组来限制谁可以访问文档。可以通过在保护设置、ACL文件或两者中编码 SSL客户认证参数来进一步限制谁可以访问文档。如何在保护设置中编码SSL客户认证在 "创建SSL客户认证的保护设置"中描述;如何在ACL文件中编码SSL客户认证在"步骤5.限制对个别文件的访问"中描述。
将SSL客户认证参数作子指令使用,可以指定客户的分辨名(DN) 或发出该客户证书的证书机构(CA)的全部或部分。
当你使用 SSL 客户认证参数时,服务器首先检查客户证书是否有效,是否是正确的证书。如果不是,它先将保护设置中的所有 DN 信息与客户证书中的 DN 信息比较,然后将 ACL 文件中的 DN 信息与客户证书中的 DN 信息比较。如果DN信息匹配,则服务器提供该文档服务。
可以在Protection或Protect指令中指定下列内容:
客户证书的有效性。
SSL_ClientAuth 客户 - 表明客户证书是有效的,不需验证客户证书中的任何 DN 信息。只有关键字客户能用此参数。
下列参数的全部或任何一个构成客户证书中的客户分辨名:
CommonName - 客户的一般名称
Country - 客户居住的国家
Locality - 客户所在地
StateOrProvince - 客户所在地的州或省
Organization - 客户的机构
OrgUnit - 客户的机构单位
下列子指令的全部或任何一个组成客户证书中的CA分辨名:
IssuerCommonName - CA的一般名称
IssuerCountry - CA居住的国家
IssuerLocality - CA的所在的地区
IssuerStateOrProvince - CA所在的州或省
IssuerOrganization - CA的机构
IssuerOrgUnit - CA的机构单位
例
Protect /topsecret/* {
CommonName "Dr Sheila A. Jones"
Organization "RTP Quick Care Center"
Mask Anybody@(*)
}
在上述Protect指令例子中,任何以/topsecret/开头的 https请求导致服务器向客户要求证书。如果客户的一般名称为Dr Sheila A. Jones并且客户的机构为 RTP Quick Care Center,则服务器返回该文档给客户。
编码SSL客户认证参数的提示和技巧
指定客户或CA的DN的全部和任何部分
把包含空格的DN信息括在双引号中 (如上例所示)。
保证该DN信息和客户证书中的DN信息匹配。此信息大小写敏感,且标点符号必须相同。
不要在任何参数中使用通配符

