阅读视图
openldap 密码策略
OpenLDAP 服务端定制密码策略
客户端策划策略实例
定义用户第一次登录就修改密码
问题排查手册
重点推荐官方文档 http://www.zytrax.com/books/ldap/ch6/ppolicy.html
备注: 本文依然承接系列文.
1. openldap 密码策略
OpenLDAP 密码策略包括以下几个方面
密码的生命周期
保存密码历史, 避免在一段时间内重用相同的密码
密码强度, 新密码可以根据各种特性进行检查.
密码连续认证失败的最大次数.
自动帐号锁定
支持自动解锁帐号或管理员解锁帐号.
优雅 (Grace) 绑定(允许密码失败后登录的次数).
密码策略可以在任意 DIT 范围定义, 可以是用户, 组或任意组合.
2. 密码策略属性详解
密码策略涉及的属性如下:
pwdAllowUserChange: 允许用户修改其密码
pwdAttribute, pwdPolicy: 对象的一个属性, 用于标识用户密码. 默认值 (目前唯一支持的) 是 userPassword
pwdExpireWarning: 密码过期前警告天数
pwdFailureCountInterval: 多久时间后重置密码失败次数, 单位是秒
pwdGraceAuthNLimit: 密码过期后不能登录的天数, 0 代表禁止登录.
pwdInHistory: 开启密码历史记录, 用于保证不能和之前设置的密码相同.
pwdLockout: 定义用户错误密码输入次数超过 pwdMaxFailure 定义后, 是否锁定用户, TRUE 锁定(默认).
pwdLockoutDuration: 密码连续输入错误次数后, 帐号锁定时间.
pwdMaxAge: 密码有效期, 到期需要强制修改密码, 2592000 是 30 天
pwdMaxFailure: 密码最大失效次数, 超过后帐号被锁定.
pwdMinAge: 密码最小有效期, 默认为 0, 用户随时更改密码, 如果定义了, 用户在离上次更改密码 + 定义的时间之内不能更改密码
pwdMinLength: 用户修改密码时最短的密码长度
pwdMustChange: 用户在帐户锁定后由管理员重置帐户后是否必须更改密码, 并且只有在 pwdLockout 为 TRUE 时才相关, 如果值为 FLASE(默认值), 管理员帮用户解锁用户后, 用户不必更改密码, 如果为 TRUE, 就必须更改密码. 如果使用 pwdReset 来解锁用户, 其值将覆盖此属性
pwdSafeModify: 该属性控制用户在密码修改操作期间是否必须发送当前密码. 如果属性值为 FALSE(缺省值), 则用户不必发送其当前密码. 如果属性值为 TRUE, 那么修改密码值时用户必须发送当前密码.
pwdLockoutDuration: 帐号锁定后, 不能自动解锁, 此时需要管理员干涉
3. OpenLDAP 服务端定制密码策略
编辑 slapd.conf, 修改添加如下内容, 重新生成数据库并加载 slapd 进程
[root@mldap01 ~]# vim /etc/openldap/slapd.conf
修改部分:
- modulepath /usr/lib/openldap
- modulepath /usr/lib64/openldap
- moduleload ppolicy.la
添加部分: 添加在最后一行
overlay ppolicy
ppolicy_default cn=default,ou=Pwpolicies,dc=gdy,dc=com
- ppolicy_hash_cleartext
- ppolicy_use_lockout
- // 解释
overlay ppolicy 必须添加
ppolicy_default cn=default,ou=Pwpolicies,dc=gdy,dc=com 指定默认的密码规则条目, 如果例外条目需要在用户中定义 pwdPolicySubentry DN
ppolicy_hash_cleartext 密码加密存储, 默认支持明文存储不安全
ppolicy_use_lockout 超过最多失败次数后, 锁定账号时的提示
[root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
config file testing succeeded
- [root@mldap01 ~]# chown -R ldap.ldap /etc/openldap
- [root@mldap01 ~]# /etc/init.d/slapd restart
Stopping slapd: [ OK ]
Starting slapd: [ OK ]
查看是否加载了 ppolicy.la 模块
查看属性是否定义
定义密码策略组
```shell
添加 ou 条目
- [ mailto:root@mldap01 slapd.d]# cat <<EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
- dn: ou=ppolicy,dc=gdy,dc=com
- objectClass: organizationalUnit
- ou: ppolicy
- EOF
- Enter LDAP Password:
- adding new entry "ou=ppolicy,dc=gdy,dc=com"
定义默认密码规则
[root@mldap01 slapd.d]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
dn: cn=default,ou=ppolicy,dc=gdy,dc=com
- cn: default
- objectClass: pwdPolicy
- objectClass: person
- pwdAllowUserChange: TRUE
- pwdAttribute: userPassword
- pwdExpireWarning: 259200
- pwdFailureCountInterval: 0
- pwdGraceAuthNLimit: 5
- pwdInHistory: 5
- pwdLockout: TRUE
- pwdLockoutDuration: 300
- pwdMaxAge: 2592000
- pwdMaxFailure: 5
- pwdMinAge: 0
- pwdMinLength: 8
- pwdMustChange: TRUE
- sn: summy value
- EOF
- Enter LDAP Password:
- adding new entry "cn=default,ou=ppolicy,dc=gdy,dc=com"
- // 备注
注意此处不用添加 pwdSafeModify: TRUE, 可能会导致错误.
定义用户遵守指定的密码策略
默认情况下, 所有 OpenLDAP 遵守默认密码策略. 要实现不通用户或者不同组具有不通的密码策略, 可以根据自己的需求定制密码策略. 例如, cn=security,ou=policy,dc=gdy,dc=com 定义安全部门所拥有的密码策略, 命令如下:
- dn: uid=wulei,dc=gdy,dc=com
- objectClass: inetOrgPerson
- uid: wulei
- cn: wu lei
- sn: lei
- loginShell: /bin/bash
- homeDirectory: /home/wulei
- homePhone: xxxxxxxxx
- employeeNumber: 123456
- mail: wulei@gdy.com
- pwdPolicySubentry: cn=security,ou=policy,dc=gdy,dc=com
- // 备注
在用户添加 pwdPolicySubentry: DN, 那么就可以不用遵循默认的条例, 而使用这里定义的条例
- [root@mldap01 ~]# ldapsearch -x -LLL uid=user3 +
- dn: uid=user3,ou=people,dc=gdy,dc=com
- structuralObjectClass: account
- creatorsName: cn=Manager,dc=gdy,dc=com
- createTimestamp: 20180530081530Z
- pwdHistory: 20180530094257Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$MrxsXdF
- k$gM/H7GbqYBjqz5yU4zaag/
- pwdHistory: 20180530094316Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$tblcN7B
- pwdHistory: 20180530094418Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$CTydGID
- O$akbXWqVk2xXffBz50dSIA0
- pwdHistory: 20180530094442Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$98Y14qO
- pwdChangedTime: 20180530094442Z
- entryCSN: 20180530094442.343733Z#000000#000#000000
- modifiersName: uid=user3,ou=people,dc=gdy,dc=com
- modifyTimestamp: 20180530094442Z
- entryDN: uid=user3,ou=people,dc=gdy,dc=com
- subschemaSubentry: cn=Subschema
- hasSubordinates: FALSE
- Enter login(LDAP) password:
- New password:
- [root@mldap01 slapd]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
- > dn: uid=user1,ou=people,dc=gdy,dc=com
- > changetype: modify
- > delete: pwdAccountLockedTime
- > EOF
- Enter LDAP Password:
- modifying entry "uid=user1,ou=people,dc=gdy,dc=com"
- [root@mldap01 ~]# cat <<EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
- > dn: uid=user3,ou=People,dc=gdy,dc=com
- > changetype: modify
- > replace: pwdReset
- > pwdReset: TRUE
- > EOF
- Enter LDAP Password:
- modifying entry "uid=user3,ou=People,dc=gdy,dc=com"
- [root@mldap01 ~]# ldapsearch -x -LLL uid=user3 +
- dn: uid=user3,ou=People,dc=gdy,dc=com
- structuralObjectClass: account
- entryUUID: 92945c00-f29d-1037-9978-7f120cbb343e
- creatorsName: cn=Manager,dc=gdy,dc=com
- createTimestamp: 20180523062337Z
- pwdReset: TRUE
- entryCSN: 20180524081057.839314Z#000000#000#000000
- modifiersName: cn=Manager,dc=gdy,dc=com
- modifyTimestamp: 20180524081057Z
- entryDN: uid=user3,ou=People,dc=gdy,dc=com
- subschemaSubentry: cn=Subschema
- hasSubordinates: FALSE
- [root@mldap01 cn=config]# ldapwhoami -x -D uid=user3,ou=People,dc=gdy,dc=com -W -e ppolicy -v
- ldap_initialize( <DEFAULT> )
- Enter LDAP Password: # 输入 user3 用户的密码
- ldap_bind: Success (0); Password must be changed (Password expires in 0 seconds) # 关键有这行
- dn:uid=user3,ou=People,dc=gdy,dc=com
- Result: Success (0)
- ```
- bind_policy soft
- pam_password md5
- pam_lookup_policy yes
- pam_password clear_remove_old
- [root@test01 ~]# ssh user3@127.0.0.1
- user3@127.0.0.1's password: # 输入密码
- Enter login(LDAP) password: # 输入密码
- New password: # 输入新密码
- Retype new password: # 重复输入新密码
- LDAP password information changed for user3
- [root@test01 ~]# ssh user3@127.0.0.1
- user3@127.0.0.1's password:
- https://www.cnblogs.com/lemon-le/p/d668fc96897e0aed2d3f5a2fa0ce0497.html
- https://stackoverflow.com/questions/26254767/ldap-users-not-able-to-change-their-password-using-passwd-command
来源: https://www.cnblogs.com/cishi/p/9160520.html