OpenLDAP默认是没有密码检查策略的,123456这也得密码也能接受,这显然是管理员不希望看到的。
参考地址:https://www.yaoge123.com/blog/archives/1276
导入密码策略schema
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
假如没有cn=module{0}的话,参考地址:https://www.cnblogs.com/Kevin-1967/p/8931304.html,需要添加:因为需要在OpenLdap中添加组的功能,所以需要添加memberOf功能,步骤如下
在/etc/openldap目录下新建文件memberof_load_configure.ldif。授权:chown -R ldap:ldap memberof_load_configure.ldif
内容如下:
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulepath: /usr/lib64/openldap
olcModuleload: {0}memberof.la
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
说明:上面的参数请根据实际情况修改(比如32的系统的话olcModulepath为/usr/lib/openldap)
dn: cn=module{0},cn=config 如果/etc/openldap/slapd.d/cn=config目录下已经存在cn=module{0}.ldif 文件的话,你就需要修改 module后面的数字了
dn: olcOverlay={0}memberof,olcDatabase={2}bdb,cn=config 这行中 如果上述目录中没有olcDatabase={2}bdb.ldif文件就把 olcDatabase={2}bdb改成olcDatabase={2}hdb
之后执行命令ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_load_configure.ldif。
注:配置双主的则两台都要加载mod_ppolicy.ldif这个以后在执行后面的命令
加载模块,因为已经添加过syncprov模块了,所以只要追加ppolicy模块就可以了
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: ppolicy.la
ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ppolicy.ldif
指定默认策略dn名
dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config changeType: add objectClass: olcOverlayConfig objectClass: olcPPolicyConfig olcOverlay: ppolicy olcPPolicyDefault: cn=default,ou=Users,dc=hbjc,dc=com olcPPolicyHashCleartext: TRUE
ldapmodify -Y EXTERNAL -H ldapi:/// -f ppolicy.ldif
参考地址:https://blog.csdn.net/u011607971/article/details/86378361
创建组:cat << EOF | ldapadd -x -D "cn=admin,dc=hbjc,dc=com" -W
dn: ou=Users,dc=hbjc,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Users
EOF
创建默认策略:
注:若设置pwdMaxAge:3600,则一个小时以后就过期了。单独设置在一个用户中设置密码策略是不生效的。
cat << EOF | ldapadd -x -D "cn=admin,dc=hbjc,dc=com" -W
dn: cn=default,ou=Users,dc=hbjc,dc=com
cn: default
objectClass: top
objectClass: device
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
pwdAttribute: userPassword
pwdInHistory: 8
pwdMinLength: 8
pwdMaxFailure: 3
pwdFailureCountInterval: 1800
pwdCheckQuality: 2
pwdMustChange: TRUE
pwdGraceAuthNLimit: 0
pwdMaxAge: 2592000
pwdExpireWarning: 1209600
pwdLockoutDuration: 900
pwdLockout: TRUE
EOF
针对不同用户使用不同的密码策略:
dn: cn=servicesaccounts,ou=Users,dc=hbjc,dc=com
cn: servicesaccounts
objectClass: top
objectClass: device
objectClass: pwdPolicy
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdExpireWarning: 0
pwdFailureCountInterval: 0
pwdGraceAuthNLimit: 5
pwdLockout: FALSE
pwdLockoutDuration: 0
pwdInHistory: 0
pwdMaxAge: 0
pwdMaxFailure: 0
pwdMinAge: 0
pwdMinLength: 15
pwdMustChange: FALSE
pwdSafeModify: FALSE
EOF
查询用户:
ldapsearch -x -LLL -H ldap://localhost:389/ -b dc=hbjc,dc=com -D "cn=admin,dc=hbjc,dc=com" -w 密码 uid=xxx +
解锁账号:只要把用户的pwdAccountLockedTime这个属性删除即可。
cat << EOF | ldapadd -x -D "cn=admin,dc=hbjc,dc=com" -W
dn: uid=xxx,ou=Users,dc=hbjc,dc=com
changetype: modify
delete: pwdAccountLockedTime
EOF
第一次登录强制修改密码设置:pwdReset 属性设置为TRUE
密码策略属性参考地址:https://wiki.shileizcc.com/confluence/pages/viewpage.action?pageId=40566878
https://www.cnblogs.com/cishi/p/9160520.html
密码策略属性详解
密码策略涉及的属性如下。
pwdAllowUserChange:允许用户修改其密码。
pwdAttribute:pwdPolicy 对象的一个属性,用于识别用户密码。
pwdExpireWarning:密码过期前告警天数。
pwdFailureCountInterval:密码失败后恢复时间。
pwdGraceAuthNLimit:密码过期后不能登入的天数,0 代表禁止登录。
pwdInHistory:开启密码历史记录,用户保证不能和之前设置的密码相同。
pwdLockout:超过定义次数,账号被锁定。
pwdLockoutDuration:密码连接输入错误次数后,账号锁定时间。
pwdMaxAge:密码有效期,到期需要强制修改密码。
pwdMaxFailure:密码最大失效次数,超过后账号被锁定。
pwdMinAge:密码有效期。
pwdMinLength:密码修改密码时最短的密码长度。
pwdMustChange:用户登录系统后提示修改密码。
pwdSafeModify:是否允许用户修改密码,与 pwdMustChange 共同使用。
pwdLockoutDuration:账号锁定后,不能自动解锁,此时需要管理员干涉。
设定用户密码定期修改及过期时间
向条目中添加一个名为shadowAccount的objectClass, 设定如下属性(attributes):
shadowLastChange: 密码从1970年1月1日开始, 到最近一次修改, 一共间隔了多少天. 比如这里指定成16967就表示2016年6月15日. 也可以直接获取当天的日期,方法为:在系统里useradd一个用户,查看/etc/shadow中该用户的第三个值, 即是该值. 该值如果设置成0, 则表示下次登陆将强制修改密码, 用户修改密码成功以后, 该值将发生对应的变化;
shadowMin: 密码从shadowLastChange指定的日期开始, 到多少天以后才能再次修改密码, 防止某些人天天没事就修改密码, 此值设置成0表示不限制;
shadowMax: 密码从shadowLastChange指定的日期开始, 到多少天以后过期(即多少天后必须更改密码);
shadowInactive: 密码过期以后还可以登陆多少天(每次登陆都会要求更改密码), 如果超过此值指定的天数, 下次登陆时会提示Your account has expired; please contact your system administrator;
shadowWarning: 提前多少天开始警告用户密码将会过期;
shadowExpire: 密码从1970年1月1日开始, 多少天以后将会过期, 这里一般用不到;
shadowFlag: 暂时无用
一组建议的值
- shadowLastChange: 0
- shadowMin: 0
- shadowMax: 90 #每隔90天强制更换密码
- shadowInactive: 7 #过期以后还有7天可以登陆,每次登陆都会提示修改密码
- shadowWarning: 8 #提前8天开始提示密码即将过期
Openldap密码策略pwdAttribute属性设置OID
参考地址:https://blog.csdn.net/wxb880114/article/details/102408269
http://osask.cn/front/ask/view/472349
pwdAttribute: userPassword
或者
pwdAttribute: 2.5.4.35