Sun ONE Directory Server 管理指南 |
当用户连接到 Directory Server 时验证用户,同时目录可以根据验证过程中确定的身份授予用户访问权限和资源限制。
本章介绍用户帐户管理的任务,包括为目录配置口令和帐户锁定策略、去活帐户或用户组使其不能访问目录和根据用户的绑定 DN 限制用户可用的系统资源。
Directory Server 5.2 引入了单个口令策略。可以定义任意数量的不同口令策略,并将其中之一应用到给定用户或用户组。这样,可以很容易地控制不同类型的用户访问目录的方式。
本章包含以下小节:
口令策略概述
安全的口令策略通过强制执行以下策略将因容易猜测的口令引起的风险降到最低:
- 用户必须根据计划更改其口令。
- 用户必须提供有价值的口令。
- 因口令错误导致多次绑定后,帐户可能被锁定。
对于 Directory Server 5.2,可以同时具有单个口令策略和全局口令策略。单个口令策略是由目录树中的子条目定义的,具有该策略的用户条目即可引用此策略。如果用户条目不引用单个策略,则 cn=PasswordPolicy,cn=config 中的全局口令策略将应用到用户条目。
以下部分介绍如何执行口令策略并将其分配给用户和组。详细信息,请参阅 Sun ONE Directory Server 部署指南中第 7 章中的“设计口令策略”。
防止词典方式的攻击
在词典方式的攻击中,入侵者企图通过重复尝试猜测直到获得权限的方式来破解口令。此服务器提供三种工具来对抗这样的攻击:
- 口令语法检查将验证与用户条目的 uid、cn、sn、givenName、ou 或 mail 属性值不匹配的口令。如果口令与上述值之一相匹配,服务器将不允许用户设置口令。不过,语法检查并不制止实际的词典攻击,例如,入侵者尝试 /usr/dict/words 中的每个单词以进行攻击。
- 最小口令长度可以确保用户不能设置长度短的口令。口令的字符越长,猜测口令的难度就会相应呈指数级增加,乃至需要尝试所有的值。在 Directory Server 中,必须同时启用口令语法检查和最小口令长度。
- 帐户锁定机制可以防止一定次数的验证尝试失败后发生绑定。锁定可以是暂时,也可以是永久的,这取决于所指定的口令策略的严格程度。
这两个策略均可以有效地防止自动猜测口令。例如,如果允许尝试五次,然后锁定用户帐户五分钟,则入侵者只能平均每分钟猜测一次,这样一个输入不熟练的入侵者将立刻感觉到非常困难。如果锁定是永久的,则用户口令必须由目录管理员手动复位。
复制环境中的口令策略
单个口令策略和全局口令策略都将被复制。因此,可以在主机上定义口令策略,并允许复制以将策略拓展到已复制的服务器上。设置的所有属性都是可复制的,作为包含口令历史(已使用过的旧口令)和口令到期日期的操作属性。
不过,应该考虑复制环境中口令策略的以下影响:
- 口令即将到期的用户在更改其口令前,将收到来自于他们绑定的每个副本的警告消息。
- 当用户更改其口令时,可能需要一定时间以在所有的副本上更新此信息。如果用户更改口令并立即以新口令重新绑定到使用者副本之一,则在副本收到更新口令之前,此绑定可能会失败。
- 每个副本保存单独的、非复制的帐户锁定计数器。作为结果,将在任何单一副本上实施锁定策略,但可能在用户尝试绑定到多个副本时无法使用。例如,如果复制拓扑中有 10 台服务器,三次尝试后将激活锁定,则入侵者可能尝试 30 次口令猜测。
尽管复制确实允许入侵者进行多次猜测,但与数十亿的口令值相比,可猜测的次数是微不足道的。通过打开口令检查并将口令长度设置为六位字符或更多,以强制用户拥有强口令,而这一点更为重要。还应该为用户提供一些指导,介绍如何选择并记住非常见词典单词的口令。最后,应该确保所有目录系统管理员用户拥有非常强的口令。
配置全局口令策略
全局口令策略适用于目录中未定义单个策略的所有用户。不过,全局口令策略不适用于目录管理员。
使用控制台配置口令策略
要设置或修改 Directory Server 的全局口令策略,请执行以下操作:
- 在 Directory Server 控制台的顶级“配置”标签中选择“数据”节点,然后在右侧面板中选择“口令”标签。
- 在“口令”标签上,设置策略的以下方面:
- 通过选中“复位后用户必须更改口令”复选框,指定用户必须在首次登录时更改口令。
如果选中此复选框,则只有目录管理员被授权复位用户的口令。常规管理用户不能强制用户更新其口令。
- 要允许用户更改自身的口令,请选中“用户可更改口令”复选框。
- 要限制用户更改其口令的频率,请在“允许 X 天内更改”文本框中输入天数。要允许用户可根据意愿对口令更改任意次,请选中“没有限制”复选框。
- 要防止用户反复使用相同的口令,请选中“保存口令的历史”复选框,并指定希望服务器为每个用户文本框保存的口令数。用户将不能设置列表中仍存在的口令。为了使此功能生效,还应限制用户更改其口令的频率。
- 如果不希望用户口令到期,请选择“口令没有到期”单选按钮。
- 否则,请选择“口令在 X 天后到期”单选按钮,以强制用户定期更改口令,然后输入用户口令的有效天数。
- 如果选择了要到期的口令,则可以在“口令到期前 X 天发送警告”字段中指定口令到期前多久向用户发送警告。
用户接到警告后,口令将在初始日期到期。取消选中“无论警告与否都会到期”复选框,将在发送警告后,延长到期日期以允许一个完整的警告时间段。只能有一次警告和一次延长。如果用户在口令到期后绑定,则没有宽限登录。
- 如果希望服务器检查用户口令的语法,以确保口令满足口令策略设定的最低要求,请选中“检查口令语法”复选框。然后,在“口令最小长度”文本框中指定可接受的最小口令长度。
- 默认情况下,目录管理员不能复位违反口令策略的口令,例如重新使用历史中的口令。要允许目录管理员复位此类口令,请选中“允许目录管理员避开口令策略”复选框。
- 从“口令加密”下拉菜单中,指定希望服务器在存储口令时使用何种加密方法。
- 单击“帐户锁定”标签并选中“帐户可能被锁定”复选框,以定义帐户锁定策略:
- 输入登录的失败次数以及必须登录以触发锁定的时间段。
- 选择“永远锁定”单选按钮,以确保在目录管理员复位用户口令前永久性锁定口令。
- 否则,请选择“锁定持续时间”单选按钮,然后输入用户帐户被暂时锁定的分钟数。
- 完成对口令策略的更改后,单击“保存”。将立即强制执行新的全局口令策略。
从命令行配置口令策略
全局口令策略是由 cn=Password Policy, cn=config 条目的属性定义的。使用 ldapmodify 公用程序可以在此条目中更改全局口令策略。
Sun ONE Directory Server 参考手册中的第 4 章中的“cn=Password Policy” 给出了口令策略中所有可能的属性的定义。
例如,口令语法检查和口令长度检查默认情况下处于关闭状态,帐户锁定处于禁用状态。使用以下命令可以打开语法检查、将口令最小长度设置为 8,并在 5 次错误口令尝试后启用五分钟临时锁定:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:cn=Password Policy,cn=config
changetype:modify
replace:passwordCheckSyntax
passwordCheckSyntax:on
-
replace:passwordMinLength
passwordMinLength: 8
-
replace:passwordLockout
passwordLockout:on
-
replace:passwordMaxFailure
passwordMaxFailure: 5
-
replace:passwordLockoutDuration
passwordLockoutDuration: 300
-
replace:passwordUnlock
passwordUnlock:on管理单个口令策略
单个口令策略是在具有 passwordPolicy 对象类的子条目中定义的。可以在 DN 形式为 cn=policy name,subtree 的目录树中的任意位置定义策略。使用 Directory Server 控制台或命令行公用程序定义口令策略后,可以通过在希望的用户条目中设置 passwordPolicySubentry 属性来分配口令策略。
本节中的示例是在 Example.com(其子树根为 dc=example,dc=com)为临时员工实施口令策略。
使用控制台定义策略
- 在 Directory Server 控制台的顶级“目录”标签中,显示要在其中定义单个口令策略子条目的条目。
- 右键单击该条目并选择“新建”>“口令策略”。或者,可以用左键单击此条目以选中它,并从“对象”菜单中选择“新建”>“口令策略”。
显示“口令策略”条目的自定义编辑器。
- 在“常规”字段中,输入此策略的名称和可选说明。此名称将成为定义策略的子条目的 cn 命名属性的值。
- 单击“口令”标签以设置策略的以下方面:
- 通过选中“复位后用户必须更改口令”复选框,指定用户必须在首次登录时更改口令。
如果选中此复选框,则只有“目录管理员”被授权复位用户的口令。常规管理用户不能强制用户更新其口令。
- 要允许用户更改自身的口令,请选中“用户可更改口令”复选框。
- 要限制用户的口令更改频率,请在“允许 X 天内更改”文本框中输入天数。要允许用户可根据意愿对口令更改任意次,请选中“没有限制”复选框。
- 要防止用户反复使用相同的口令,请选中“保存口令历史”复选框,并指定希望服务器为每个用户文本框保存的口令数。用户将不能设置仍然在列表中的口令。为了使此功能生效,还应该限制用户的口令更改频率。
- 如果不希望用户口令到期,请选择“口令没有到期”单选按钮。
- 否则,请选择“口令在 X 天后到期”单选按钮,以强制用户定期更改口令,然后输入用户口令的有效天数。
- 如果选择了要到期的口令,则可以指定在口令到期前多久向用户发送警告。在“口令到期前 X 天发送警告”文本框中输入口令到期前发送警告的天数。
用户接到警告后,口令将在初始日期到期。取消选中“无论警告与否都会到期”复选框,将在发送警告后,延长到期日期以允许一个完整的警告时间段。只能有一次警告和一次延长。如果用户在口令到期后绑定,则没有宽限登录。
- 如果希望服务器检查用户口令的语法,以确保口令满足口令策略设定的最低要求,请选中“检查口令语法”复选框。然后,在“口令最小长度”文本框中指定可接受的最小口令长度。
- 默认情况下,目录管理员不能复位违反口令策略的口令,例如重新使用历史中的口令。要允许目录管理员复位此类口令,请选中“允许目录管理员避开口令策略”复选框。
- 从“口令加密”下拉菜单中指定希望服务器在存储口令时使用何种加密方法。
- 单击“锁定”标签并选中“帐户可能被锁定”复选框,以定义帐户锁定策略:
- 输入登录的失败次数以及必须登录以触发锁定的时间段。
- 选择“永远锁定”单选按钮,以确保在目录管理员复位用户口令前永久性锁定口令。
- 否则,请选择“锁定持续时间”单选按钮,然后输入用户帐户被暂时锁定的分钟数。
- 在自定义编辑器中单击“确定”,以保存策略并创建其子条目。
从命令行定义策略
对于此口令策略,设想您希望临时员工口令在 100 天(8 640 000 秒)后到期,并在口令到期前 3 天(259 200 秒)开始对绑定的用户返回到期警告。打开语法检查以强制对口令安全性执行基本检查,并强制执行锁定以阻止入侵者通过词典攻击破解口令。策略的其他方面应用默认值。
通过添加 dc=example,dc=com 下的以下子条目,在 Example.com 子树中定义此口令策略:
ldapmodify -a -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:cn=TempPolicy,dc=example,dc=com
objectClass:top
objectClass:passwordPolicy
objectClass:LDAPsubentry
cn:TempPolicy
passwordStorageScheme:SSHA
passwordChange:on
passwordMustChange:on
passwordCheckSyntax:on
passwordExp:on
passwordExp:on
passwordMinLength: 6
passwordMaxAge: 8640000
passwordMinAge: 0
passwordWarning: 259200
passwordInHistory: 6
passwordLockout:on
passwordMaxFailure: 3
passwordUnlock:on
passwordLockoutDuration: 3600
passwordResetFailureCount: 600Sun ONE Directory Server 参考手册中的第 4 章“cn=Password Policy”给出了口令策略中所有可能的属性的定义。
分配口令策略
分配单个口令策略由指向相应的策略子条目组成。将策略作为 passwordPolicySubentry 的值添加到单个条目,或者使用 CoS 和角色管理策略。还必须设置访问控制以防止用户修改应用于他们的口令策略。
使用控制台
Directory Server 控制台提供一个界面,用于管理分配给用户或组的口令策略:
- 在 Directory Server 控制台的顶级“目录”标签上,显示要在其中分配或修改单个口令策略的用户条目或组条目。
- 右键单击该条目并从弹出菜单中选择“设置口令策略”。或者,可以用左键单击此条目以选中它,并从“对象”菜单中选择“设置口令策略”。
- “口令策略”对话框将告知应用于此条目的口令策略:
- 如果全局口令策略适用,请单击“分配”以在目录树中的任意位置选择一个口令策略子条目。
- 如果已经定义了单个策略,则可以替换、删除或编辑此单个策略。单击“编辑策略”将调用已命名的策略子条目的自定义编辑器。
分配或替换口令策略将调用目录浏览器对话框,在此您可能会看到一个以小密钥图标显示的口令策略子条目。
- 如果更改了此策略,请在“口令策略”对话框中单击“确定”。新策略将立即生效。
从命令行
要为用户条目或组条目分配口令策略,请将口令策略的 DN 作为 passwordPolicySubentry 属性的值添加。例如,以下命令将为 Barbara Jensen 分配 cn=TempPolicy,dc=example,dc=com:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add:passwordPolicySubentry
passwordPolicySubentry:cn=TempPolicy,dc=example,dc=com使用角色和 CoS
按角色对用户分组时,可以使用 CoS 指向相应的策略子条目。有关使用角色和 CoS 的详细信息,请参阅第 5 章“高级条目管理”。
下面的示例中,以下命令将在 Example.com 为临时员工创建一个已筛选角色,并为那些具有此角色的员工分配 cn=TempPolicy,dc=example,dc=com:
ldapmodify -a -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:cn=TempFilter,ou=people,dc=example,dc=com
objectclass:top
objectclass:LDAPsubentry
objectclass:nsRoleDefinition
objectclass:nsComplexRoleDefinition
objectclass:nsFilteredRoleDefinition
cn:TempFilter
nsRoleFilter:(&(objectclass=person)(status=contractor))
description:filtered role for temporary employees
dn:cn=PolTempl,dc=example,dc=com
objectclass:top
objectclass:nsContainer
dn:cn="cn=TempFilter,ou=people,dc=example,dc=com",
cn=PolTempl,dc=example,dc=com
objectclass:top
objectclass:extensibleObject
objectclass:LDAPsubentry
objectclass:costemplate
cosPriority: 1
passwordPolicySubentry:cn=TempPolicy,dc=example,dc=com
dn:cn=PolCoS,dc=example,dc=com
objectclass:top
objectclass:LDAPsubentry
objectclass:cosSuperDefinition
objectclass:cosClassicDefinition
cosTemplateDN:cn=PolTempl,dc=example,dc=com
cosSpecifier:nsRole
cosAttribute:passwordPolicySubentry operational具有合同工状态的用户现在将服从口令策略 cn=TempPolicy,dc=example,dc=com。
保护单个口令策略
要防止用户修改应用于他们的口令策略,还必须向根条目添加 ACI,例如:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:dc=example,dc=com
changetype:modify
add:aci
aci:(targetattr != "passwordPolicySubentry")(version 3.0; acl
"Allow self entry modification except for passwordPolicySubentry";
allow (write) (userdn ="ldap:///self");)复位用户口令
目录在用户条目的 userPassword 属性中存储口令值。根据服务器的访问控制设置,用户可以使用诸如 ldapmodify 的标准工具将 userPassword 的值设为与指定的口令策略一致。
万一发生永久帐户锁定(在口令策略中,用户操作属性 accountUnlockTime 为 0,且 passwordUnlock 为 off),可以目录管理员的身份复位口令以解除用户帐户锁定。例如,假设 Example.com 目录用户 Barbara Jensen 在忘记并猜测其口令后被永久性锁定:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
replace:userPassword
userPassword:ChAnGeMe如果在口令策略中 passwordMustChange 已开启,则 Barbara 必须在下次绑定后更改口令。请记住告诉她您已将其口令更改为 ChAnGeMe,最好通过安全的方式。
去活和激活用户和角色
可暂时去活单个用户帐户或一组帐户。去活后,用户无法绑定到目录。验证操作将失败。
本节中的步骤可用于以相同方式去活用户和角色。但是,去活角色时,去活的是 role 中的成员,而非角色条目本身。有关一般角色,以及角色如何与特定访问控制进行交互作用的详细信息,请参阅第 5 章“高级条目管理”。
使用控制台设置用户和角色激活
- 在 Directory Server 控制台的顶级“目录”标签上,浏览目录树以显示要去活或重新激活的用户条目或角色条目。
- 双击条目以显示其自定义编辑器,在左侧列中单击“帐户”标签。
右侧面板将显示条目的激活状态。
- 单击该按钮以去活或激活与此条目对应的用户或角色。贯穿编辑器中用户图标或角色图标的红色框和条表明此条目将被去活。
- 单击“确定”关闭对话框,并保存该条目新的激活状态。
还可以选择此条目并从“对象”菜单中选择“去活”或“激活”,这是一种打开自定义编辑器的快捷方式。
通过从“控制台视图”>“显示”菜单中选择“去活状态”,可以查看任意目录对象的激活状态。随后,所有去活条目的图标将显示为有一个红条贯穿其中。不论是直接去活条目还是通过角色成员身份去活条目,都将显示用户条目的正确激活状态。
从命令行设置用户和角色激活
要去活用户帐户或角色成员,请使用 ns-inactivate.pl 脚本(Solaris 软件包中为 directoryserver account-inactivate)。要激活或重新激活用户或角色,请使用 ns-activate.pl 脚本(Solaris 软件包中为 directoryserver account-inactivate)。这些脚本的命令依平台而定:
以下命令显示如何使用 perl 脚本来去活和重新激活 Barbara Jensen 的用户帐户:
ns-inactivate.pl -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令 \
-I "uid=bjensen,ou=People,dc=example,dc=com"ns-activate.pl -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令 \
-I "uid=bjensen,ou=People,dc=example,dc=com"在这两个命令中,-I 选项指定要为其设置激活状态的用户或角色的 DN。
详细信息,请参阅 Sun ONE Directory Server 参考手册的第 2 章中的“ns-inactivate.pl”和“ns-activate.pl”。
设置单个资源限制
可使用绑定到目录的客户机应用程序上特定操作属性值,控制搜索操作的服务器限制。可设置以下搜索操作限制:
- 此浏览限制指定搜索操作将检查的最大条目数。
- 大小限制指定服务器响应搜索操作返回到客户机应用程序的最大条目数。
- 时间限制指定服务器处理搜索操作所花费的最长时间。
- 空闲超时指定在服务器放弃连接之前到服务器的客户机连接可以空闲的时间。
注意 默认情况下,目录管理员可以使用无限的资源。
为特定用户设置的资源限制优先于在全局服务器配置中设置的默认资源限制。应该验证存储单个资源限制的属性是否受到后缀(包含用户条目)上的下列 ACI 的保护,以防止其进行自我修改:
(targetattr != "nsroledn || aci || nsLookThroughLimit || nsSizeLimit || nsTimeLimit || nsIdleTimeout || passwordPolicySubentry || passwordExpirationTime || passwordExpWarned || passwordRetryCount || retryCountResetTime || accountUnlockTime || passwordHistory || passwordAllowChangeTime")(version 3.0; acl "Allow self entry modification except for nsroledn, aci, resource limit attributes, passwordPolicySubentry and password policy state attributes"; allow (write)userdn ="ldap:///self";)
使用控制台设置资源限制
- 在 Directory Server 控制台的顶级“目录”标签上,浏览目录树以显示要为其设置资源限制的用户。
- 双击此条目以显示自定义编辑器,在左侧列中单击“帐户”标签。右侧面板将显示此条目的当前限制。
- 在上述资源限制的四个文本字段中输入值。如果输入的值 -1,则表示对该资源没有限制。
- 完成后单击“确定”以保存新限制。
从命令行设置资源限制
可以使用 ldapmodify 命令在用户条目中设置以下属性,以限制用户的资源使用:
例如,可通过如下所述执行 ldapmodify 来设置条目的大小限制:
ldapmodify -h 主机 -p 端口 -D "cn=Directory Manager" -w 口令
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add:nsSizeLimit
nsSizeLimit: 500ldapmodify 语句将 nsSizeLimit 属性添加到 Barbara Jensen 的条目中,并给出其搜索返回大小限制为 500 个条目。