Sun Java(TM) System Directory Server 5 2004Q2 管理指南 |
第 7 章
管理用户帐户和口令当用户连接到 Directory Server 时验证用户,同时目录可以根据验证过程中确定的身份授予用户访问权限和资源限制。
本章介绍用户帐户管理的任务,包括为目录配置口令和帐户锁定策略、停用帐户或用户组,使其无法访问目录,并根据用户的绑定 DN 限制用户可用的系统资源。
Directory Server 支持个别口令策略。可以定义任意数量的不同口令策略,并将其中之一应用到给定用户或用户组。这样,可以很容易地控制不同类型的用户访问目录的方式。
本章包含以下小节:
口令策略概述安全的口令策略通过强制执行以下策略将因容易猜测的口令引起的风险降到最低:
Directory Server 支持单个和全局口令策略。单个口令策略是由目录树中的子条目定义的,具有该策略的用户条目即可引用此策略。如果用户条目不引用单个策略,则 cn=PasswordPolicy,cn=config 中的全局口令策略将应用到用户条目。
口令策略仅应用于 userPassword 属性(如果用户条目中存在),并在根据此属性进行验证的过程中强制实施。它们不应用于其他验证模式,如 SASL GSSAPI 或基于 SSL 的验证。
以下部分介绍如何执行口令策略并将其分配给用户和组。有关详细信息,请参阅《Directory Server Deployment Planning Guide》Chapter 7 中的 "Designing Password Policies"。
配置全局口令策略全局口令策略适用于目录中未定义单个策略的所有用户。不过,全局口令策略不适用于目录管理员。
使用控制台配置口令策略
要设置或修改 Directory Server 的全局口令策略,请执行以下操作:
- 在 Directory Server Console 的顶级“配置”选项卡中选择“数据”节点,然后在右侧面板中选择“口令”选项卡。
- 在“口令”选项卡上,设置策略的以下方面:
- 通过选中“重置后用户必须更改口令”复选框,指定用户必须在首次登录时更改口令。
如果选中此复选框,则只有“目录管理员”被授权重置用户的口令。常规管理用户不能强制用户更新其口令。
- 要允许用户更改自己的口令,请选中“用户可以更改口令”复选框。
- 要限制用户的口令更改频率,请在“允许 X 天内更改”文本框中输入天数。要允许用户可根据意愿对口令更改任意次,请选中“没有限制”复选框。
- 要防止用户反复使用相同的口令,请选中“保存口令的历史”复选框,并在“记录 X 个口令”文本框中指定希望服务器为每个用户保存的口令数。用户将不能设置仍然在列表中的口令。为了使此功能生效,还应该限制用户的口令更改频率。
- 如果不希望用户口令过期,请选择“口令从不到期”单选按钮。
- 否则,请选择“口令在 X 天后过期”单选按钮,以强制用户定期更改口令,然后输入用户口令的有效天数。
- 如果选择了要过期的口令,则可以在“口令过期前 X 天发出警告”字段中指定口令过期前多久向用户发送警告。
用户接到警告后,口令将在初始日期过期。取消选中“不论是否警告都会过期”复选框,将在发送警告后,延长到期日期以允许一个完整的警告时间段。只能有一次警告和一次延长。如果用户在口令过期后绑定,则没有宽限登录。
- 如果希望服务器检查用户口令的语法,以确保口令满足口令策略设定的最低要求,请选中“检查口令语法”复选框。然后,在“口令最小长度”文本框中指定可接受的最小口令长度。
- 默认情况下,目录管理员不能重置违反口令策略的口令,例如重新使用历史中的口令。要允许目录管理员重置此类口令,请选中“允许目录管理员避开口令策略”复选框。
- 从“口令加密”下拉菜单中指定希望服务器在存储口令时使用何种加密方法。
- 单击“帐户锁定”选项卡并选中“帐户可能会被锁定”复选框,以定义帐户锁定策略:
- 输入登录的失败次数以及必须登录以触发锁定的时间段。
- 选择“永远锁定”单选按钮,以确保在目录管理员重置用户口令前永久性锁定口令。
- 否则,请选择“锁定期限”单选按钮,然后输入用户帐户被暂时锁定的分钟数。
- 完成对口令策略的更改后,单击“保存”。将立即强制执行新的全局口令策略。
从命令行配置口令策略
全局口令策略是由 cn=Password Policy,cn=config 条目的属性定义的。使用 ldapmodify 公用程序可以在此条目中更改全局口令策略。
《Directory Server Administration Reference》Chapter 2 中的 "cn=Password Policy" 给出了口令策略中所有可能的属性的定义。
例如,口令语法检查和口令长度检查默认情况下处于关闭状态,帐户锁定处于禁用状态。使用以下命令可以打开语法检查、将口令最小长度设置为 8,并在 5 次错误口令尝试后启用五分钟临时锁定:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
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=策略名、子树的目录树中的任意位置定义策略。使用 Directory Server Console或命令行公用程序定义口令策略后,可以通过在希望的用户条目中设置 passwordPolicySubentry 属性来分配口令策略。
本节中的示例是在 Example.com(其子树根为 dc=example,dc=com)为临时员工实施口令策略。
使用控制台定义策略
- 在 Directory Server Console 的顶级“目录”选项卡中,显示要在其中定义单个口令策略子条目的条目。
- 右键单击该条目并选择“新建”>“口令策略”。或者,可以用左键单击此条目以选中它,并从“对象”菜单中选择“新建”>“口令策略”。
显示“口令策略”条目的自定义编辑器。
- 在“常规”字段中,输入此策略的名称和可选说明。此名称将成为定义策略的子条目的 cn 命名属性的值。
- 单击“口令”选项卡以设置策略的以下方面:
- 通过选中“重置后用户必须更改口令”复选框,指定用户必须在首次登录时更改口令。如果选中此复选框,则只有“目录管理员”被授权重置用户的口令。常规管理用户不能强制用户更新其口令。
- 要允许用户更改自己的口令,请选中“用户可以更改口令”复选框。
- 要限制用户的口令更改频率,请在“允许 X 天内更改”文本框中输入天数。要允许用户可根据意愿对口令更改任意次,请选中“没有限制”复选框。
- 要防止用户反复使用相同的口令,请选中“保存口令的历史”复选框,并指定要为每个用户保存的口令数。用户将不能设置仍然在该列表中的口令。为了使此功能生效,还应该限制用户的口令更改频率。
- 如果不希望用户口令过期,请选择“口令从不到期”单选按钮。
- 否则,请选择“口令在 X 天后过期”单选按钮,以强制用户定期更改口令,然后输入用户口令的有效天数。
- 如果选择了要过期的口令,则可以指定在口令过期前向用户发送警告的时间。在“口令过期前 X 天发出警告”文本框中输入口令过期前应发送警告的天数。
用户接到警告后,口令将在初始日期过期。取消选中“不论是否警告都会过期”复选框,将在发送警告后,延长到期日期以允许一个完整的警告时间段。只能有一次警告和一次延长。如果用户在口令过期后绑定,则没有宽限登录。
- 如果希望服务器检查用户口令的语法,以确保口令满足口令策略设定的最低要求,请选中“检查口令语法”复选框。然后,在“口令最小长度”文本框中指定可接受的最小口令长度。
- 默认情况下,目录管理员不能重置违反口令策略的口令,例如重新使用历史中的口令。要允许目录管理员重置此类口令,请选中“允许目录管理员避开口令策略”复选框。
- 从“口令加密”下拉菜单中指定希望服务器在存储口令时使用何种加密方法。
- 单击“锁定”选项卡并选中“帐户可能会被锁定”复选框,以定义帐户锁定策略:
- 输入登录的失败次数以及必须登录以触发锁定的时间段。
- 选择“永远锁定”单选按钮,以确保在目录管理员重置用户口令前永久性锁定口令。
- 否则,请选择“锁定期限”单选按钮,然后输入用户帐户被暂时锁定的分钟数。
- 在自定义编辑器中单击“确定”,以保存策略并创建其子条目。
从命令行定义策略
对于此口令策略,设想您希望临时员工口令在 100 天(8 640 000 秒)后过期,并在口令过期前 3 天(259 200 秒)开始对绑定的用户返回到期警告。打开语法检查以强制对口令安全性执行基本检查,并强制执行锁定以阻止入侵者通过词典攻击破解口令。策略的其他方面应用默认值。
通过添加 dc=example,dc=com 下的以下子条目,在 example.com 子树中定义此口令策略:
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
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
passwordMinLength: 6
passwordMaxAge: 8640000
passwordMinAge: 0
passwordWarning: 259200
passwordInHistory: 6
passwordLockout: on
passwordMaxFailure: 3
passwordUnlock: on
passwordLockoutDuration: 3600
passwordResetFailureCount: 600《Directory Server Administration Reference》Chapter 2 中的 "cn=Password Policy" 提供了口令策略中所有可能的属性的定义。
分配口令策略
分配单个口令策略由指向相应的策略子条目组成。将策略作为 passwordPolicySubentry 的值添加到单个条目,或者使用 CoS 和角色管理策略。还必须设置访问控制以防止用户修改应用于他们的口令策略。
使用控制台
Directory Server Console 提供了一个界面,用于管理分配给用户或组的口令策略:
- 在 Directory Server Console 的顶级“目录”选项卡上,显示要在其中分配或修改单个口令策略的用户条目或组条目。
- 右键单击该条目并从弹出菜单中选择“设置口令策略”。或者,可以用左键单击此条目以选中它,并从“对象”菜单中选择“设置口令策略”。
- “口令策略”对话框将告知应用于此条目的口令策略:
- 如果全局口令策略适用,请单击“分配”以在目录树中的任意位置选择一个口令策略子条目。
- 如果已经定义了单个策略,则可以替换、删除或编辑此单个策略。单击“编辑策略”将调用已命名的策略子条目的自定义编辑器。
分配或替换口令策略将调用目录浏览器对话框,在此您可能会看到一个以小密钥图标显示的口令策略子条目。
- 如果更改了此策略,请在“口令策略”对话框中单击“确定”。新策略将立即生效。
从命令行
要为用户条目或组条目分配口令策略,请将口令策略的 DN 作为 passwordPolicySubentry 属性的值添加。例如,以下命令将为 Barbara Jensen 分配 cn=TempPolicy,dc=example,dc=com:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
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 host -p port -D "cn=Directory Manager" -w password
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 host -p port -D "cn=Directory Manager" -w password
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr != "passwordPolicySubentry")(version 3.0; acl
"Allow self modification except for passwordPolicySubentry";
allow (write) (userdn ="ldap:///self");)
重置用户口令目录在用户条目的 userPassword 属性中存储口令值。根据服务器的访问控制设置,用户可以使用诸如 ldapmodify 的标准工具将 userPassword 的值设为与指定的口令策略一致。
万一发生永久帐户锁定(在口令策略中,用户操作属性 accountUnlockTime 为 0,且 passwordUnlock 为 off),可以目录管理员的身份重置口令以解除用户帐户锁定。例如,假设 Example.com 目录用户 Barbara Jensen 在忘记并猜测其口令后被永久性锁定:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: ChAnGeMe如果在口令策略中 passwordMustChange 已开启,则 Barbara 必须在下次绑定后更改口令。请记住告诉她您已将其口令更改为 ChAnGeMe,最好通过安全的方式。
停用和激活用户和角色可暂时停用单个用户帐户或一组帐户。停用后,用户无法绑定到目录。验证操作将失败。
本节中的步骤可用于以相同方式停用用户和角色。但是,停用角色时,停用的是 role 中的成员,而非角色条目本身。有关一般角色,以及角色如何与特定访问控制进行交互作用的详细信息,请参阅第 5 章“管理身份和角色”。
使用控制台设置用户和角色激活
通过从“控制台视图”>“显示”菜单中选择“停用状态”,可以查看任意目录对象的激活状态。随后,所有停用条目的图标将显示为有一个红条贯穿其中。不论是直接停用条目还是通过角色成员身份停用条目,都将显示用户条目的正确激活状态。
从命令行设置用户和角色激活
要停用用户帐户或角色成员,请使用 directoryserver account-inactivate 命令。要激活或重新激活用户或角色,请使用 directoryserver account-activate 命令:
以下命令显示如何使用这些命令来停用和重新激活 Barbara Jensen 的用户帐户:
/usr/sbin/directoryserver account-inactivate -h host -p port -D "cn=Directory\
Manager" -w password -I "uid=bjensen,ou=People,dc=example,dc=com"/usr/sbin/directoryserver account-activate -h host -p port -D "cn=Directory\
Manager" -w password -I "uid=bjensen,ou=People,dc=example,dc=com"在这两个命令中,-I 选项指定要为其设置激活状态的用户或角色的 DN。
有关详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "account-activate" 和 "account-inactivate"。
设置单个资源限制可使用绑定到目录的客户机应用程序上特定操作属性值,控制搜索操作的服务器限制。可设置以下搜索操作限制:
为特定用户设置的资源限制优先于在全局服务器配置中设置的默认资源限制。应该验证存储单个资源限制的属性是否受到后缀(包含用户条目)上的下列 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";)
使用控制台设置资源限制
从命令行设置资源限制
可以使用 ldapmodify 命令在用户条目中设置以下属性,以限制用户的资源使用:
例如,可通过如下所述执行 ldapmodify 来设置条目的大小限制:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: nsSizeLimit
nsSizeLimit: 500ldapmodify 语句将 nsSizeLimit 属性添加到 Barbara Jensen 的条目中,并给出其搜索返回大小限制为 500 个条目。