本次加入的密码策略,大致上有以下内容:

  • 密码是长度至少为8位

  • 密码至少包含数字,大写字母,小写字母,特殊字符

  • 5次内使用过的密码不能再次使用

  • 连续输入错误超过5次,密码将锁定5分钟

实现过程:

实现上述密码策略主要用到两个模块,一个是自带的模块:ppolicy,另一个外部扩展模块:pqchecker

第一步:载入ppolicy模块

#vim /etc/openldap/slapd.conf
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap
moduleload ppolicy.la
overlay    ppolicy.la
ppolicy_default  cn=Captain,ou=pwpolicies,dc=xxx,dc=com

上述配置,指定了模块查找的位置,并载入ppolicy模块,设置密码策略的默认规则为:dn 为cn=Captain,ou=pwpolicies,dc=xxx,dc=com的密码策略,

接下来就是把上面静态的配置重新生成数据库

rm -rf /etc/openldap/slapd.d/*
[root@ll ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
[root@ll ~]# chown -R ldap.ldap /etc/openldap/*
[root@ll ~]# chown -R ldap.ldap /var/lib/ldap
[root@ll ~]# /etc/init.d/slapd restart

只有执行了上面的操作,配置才会生效

既然已经指定了默认策略,那接下来就是生成这个默认策略了。

1.生成密码策略的ou

#vim 1.ldif
dn: ou=pwpolicies,dc=xxx,dc=com
objectClass: organizationalUnit
ou: pwpolicies
#通过命令将上面的设置,生成一个ou
ldapadd -x -D "cn=admin,dc=xxx,dc=xxx" -W -f 1.ldif

2,在上述ou下生成默认的密码策略对象

#vim 2.ldif
dn: cn=Captain,ou=pwpolicies,dc=xxx,dc=com
cn: Captain
objectClass: pwdPolicy
objectClass: person
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdExpireWarning: 259200
pwdFailureCountInterval: 0
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 300
pwdCheckQuality: 1
pwdMaxAge: 2592000
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 8
pwdMustChange: TRUE
pwdSafeModify: TRUE
pwdReset: TRUE
sn: dummy value
#通过命令将上面的设置,生成一个对象
ldapadd -x -D "cn=admin,dc=xxx,dc=xxx" -W -f 2.ldif

配置完成后,密码策略就已经生效了。

注:不能在phpldapadmin页面验证密码策略,要么用修改密码的命令,要么自己代码实现修改密码进行验证。

上面的策略只能实现基本的功能,但对于密码负责度的检测,自带的模块无法实现,我们只能额外安装其他模块,此处用到的模块是:pqchecker

关于更多类似模块,可查看:http://techadminblog.com/openldap-password-quality-check/

此模块必须进行编译安装

#安装java
yum install java-1.8.0-openjdk-devel
#下载源代码
#下载ldap,地址为:ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.45.tgz
#下载pqchecker: https://github.com/ameddeb/pqchecker/archive/master.zip
#安装gcc编译器
yum install gcc*
#安装pqchecker
tar –xzf  /usr/local/src/soft/openldap-2.4.44.tgz
cd /usr/local/src/soft/openldap-2.4.44
./configure && make depend

cd /usr/local/src/soft/
tar -xzf  pqchecker-master.zip
cd pqchecker-master
./configure LDAPSRC=/usr/local/src/soft/openldap-2.4.44 JAVAHOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-2.b16.el6_9.x86_64 PARAMDIR=/etc/openldap/pqchecker libdir=/usr/lib64/openldap
make
make install /etc/openldap/pqchecker
chown –R ldap:ldap /etc/openldap/pqchecker

上面已经指定策略配置文件为:/etc/openldap/pqchecker/pqparams.dat,默认的策略是,至少一个大写字母,一个小写字母,一个特殊字符,一个数字。

0|01010101

规则实例如上:| 号后面的为规则,前两位表示密码至少得有多少个大写字母,最多为99个,最少为0个,以此类推,每两位标识一种字符至少包含的数量,后面分别是小写字母,数字,特殊字符。更负责的规则此处不做介绍~

接下来就是开始默认密码策略对新策略的支持:

#vim 3.ldif
dn: cn=Captain,ou=pwpolicies,dc=xxx,dc=com
changetype: modify
replace: pwdCheckQuality
pwdCheckQuality: 2
-
add: objectclass
objectclass: pwdPolicyChecker
-
add: pwdcheckmodule
pwdcheckmodule: pqchecker.so

#通过命令将上面的设置,生效
ldapadd -x -D "cn=admin,dc=xxx,dc=com" -W -f 2.ldif

到此,所有的密码策略就配置完毕了。

注:记得配置密码策略之前,加入普通用户修改密码的权限哟|、~密码策略对管理员的修改密码操作不生效~