搭建openldap环境,配置密码策略
CentOS Linux release 7.8.2003 (Core)
openldap-clients-2.4.44-21.e17_6.x86_64
openldap-servers-2.4.44-21.e17_6.x86_64
openldap-2.4.44-21.e17_6.x86_64
一、环境准备
关闭 selinux firewalld
setenforce 0
systemctl stop firewalld.service
systemctl disable firewalld.service
二、OPENLDAP服务搭建
1、安装openldap
yum install -y openldap openldap-clients openldap-servers
2、启动openldap
systemctl start slapd
systemctl enable slapd
3、配置ldap超级管理员
生成密码,等一下作为 olcRootPW 的值
slappasswd -s "123456"
{SSHA}yGu5OYMOpwVa2I/6Z8uwac/bo2KHjaW+
创建admin.ldif 文件
# 先查看对应的配置, 有的版本不是{2}hdb, 要相对修改
ls /etc/openldap/slapd.d/cn=config/
# admin.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}yGu5OYMOpwVa2I/6Z8uwac/bo2KHjaW+
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=example,dc=com" read by * none
导入配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f admin.ldif
4、配置数据库
openldap默认使用的数据库是BerkeleyDB
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
导入schema
ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}
5、创建默认DN
创建base.ldif 文件
dn: dc=example,dc=com
o: Example.Inc
objectClass: top
objectclass: dcObject
objectclass: organization
dn: cn=admin,dc=example,dc=com
cn: admin
objectClass: organizationalRole
description: Directory Manage
导入配置
ldapadd -x -w 123456 -D "cn=admin,dc=example,dc=com" -f base.ldif
查一下是否有刚才加的DN
ldapsearch -x -D "cn=admin,dc=example,dc=com" -w123456
6、禁止匿名访问
默认情况下匿名用户可以获取所有用户信息,甚至是密码字段,虽然密码字段是经过加密的那也很危险
创建disable_anon.ldif文件
# disable_anon.ldif
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
导入配置
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif
三、添加密码策略
1、加载ppolicy模块
查看是否已加载任何模块
slapcat -n 0 | grep olcModuleLoad
如果上面命令没有任何输出,使用ldapadd加载模块
# add_ppolicy_module.ldif
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: ppolicy.la
# 执行
ldapadd -Y EXTERNAL -Q -H ldapi:/// -f add_ppolicy_module.ldif
# 执行完在用上面的命令验证是否加载进来
slapcat -n 0 | grep olcModuleLoad
# 输出:olcModuleLoad: {0}ppolicy.la
# 说明加载成功
2、创建密码策略
增加用户修改密码的权限
# allow_user_modify_pwd.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=admin,dc=example,dc=com" write by anonymous auth by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {1}to * by dn.base="cn=admin,dc=example,dc=com" write by self write by * read
# 执行
ldapmodify -Y EXTERNAL -H ldapi:/// -f allow_user_modify_pwd.ldif
可以用一个ou来组织我们的策略
# create_pwd_policy.ldif
# ou=policies
dn: ou=policies,dc=example,dc=com
objectClass: organizationalUnit
ou: policies
# cn=default
dn: cn=default,ou=policies,dc=example,dc=com
objectClass: pwdPolicy
objectClass: organizationalRole
cn: default
pwdAllowUserChange: TRUE
pwdAttribute: 2.5.4.35 #userPassword
pwdMinLength: 6
pwdCheckQuality: 2
pwdInHistory: 3
pwdLockout: TRUE
pwdLockoutDuration: 10
pwdMaxFailure: 3
# 执行
ldapadd -x -D "cn=admin,dc=example,dc=com" -w 123456 -f create_pwd_policy.ldif
应用default策略为默认策略,该olcPPolicyDefault属性是可选的。它用于创建默认密码策略,以便在没有其他策略适用于用户时重新使用。我建议这样做。如果不创建默认策略,则必须将pwdPolicySubentry添加到要对其实施密码策略的每个条目。此属性的值必须与带有pwdPolicy类的条目的DN匹配。如果不匹配,将没有默认策略。
即如果对象不设置pwdPolicySubentry属性则默认都用当前default策略。
# set_default_policy.ldif
dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=example,dc=com
# 执行
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f set_default_policy.ldif
3、添加pqchecker密码检查模块
具有ppolicy覆盖的OpenLDAP目录服务器允许管理功能强大的密码策略。除密码内容质量外,策略覆盖还直接支持此策略的所有方面。密码内容强度管理留给外部插件,该插件必须是本机共享库。pqChecker组件提供了此功能。它允许检查密码的内容,即:
- 必需的大写字符数。
- 必需的小写字符数。
- 所需的特殊字符数(非字母字符)。
- 所需的位数(0-9)。
- 禁止使用的字符。
用官网给出的方法安装pqchecker
rpm -iv http://www.meddeb.net/pub/pqchecker/rhel/7/pqchecker-2.0.0-1.el7.x86_64.rpm
# 找到二进制包安装的位置后续会用到
ls /usr/lib64/openldap/pqchecker.so*
# /usr/lib64/openldap/pqchecker.so.2.0.0
查看策略配置文件(后续修改这个文件来配置策略)
cat /etc/openldap/pqchecker/pqparams.dat
# 0|01010101
| Order (left to right) | Field | Length | Sequence | Range | Meaning of content |
|---|---|---|---|---|---|
| 1 | N| | 2 characters | 1,2 | 0| or 1| | 1| → Broadcasts passwords, 0| → Don't broadcasts |
| 2 | UU | 2 characters | 3,4 | 00 → 99 | Number of required uppercase characters |
| 3 | LL | 2 characters | 5,6 | 00 → 99 | Number of required lowercase characters |
| 4 | DD | 2 characters | 7,8 | 00 → 99 | Number of required digits |
| 5 | SS | 2 characters | 9,10 | 00 → 99 | Number of required special characters |
| 6 | The rest | indefinite | 11 → end of line | All characters | List of forbidden characters. This list may be empty |
配置默认密码策略对新策略的支持
#add_pqchecker.ldif
dn: cn=default,ou=policies,dc=example,dc=com
changetype: modify
add: objectClass
objectclass: pwdPolicyChecker
-
add: pwdcheckmodule
pwdCheckModule: pqchecker.so.2.0.0
#通过命令将上面的设置,生效
ldapmodify -a -D "cn=admin,dc=example,dc=com" -w 123456 -f add_pqchecker.ldif
四、创建用户来测试策略
1、创建测试用用户
# add_test_user.ldif
dn: ou=people1,dc=example,dc=com
objectClass: organizationalUnit
ou: people1
dn: uid=joe,ou=people1,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Captain
sn: Smeth
uid: joe
userPassword: 123456
dn: uid=joe1,ou=people1,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Captain
sn: Smeth
uid: joe1
userPassword: 123456
dn: ou=people2,dc=example,dc=com
objectClass: organizationalUnit
ou: people2
dn: uid=ben,ou=people2,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Captain
sn: Smeth
uid: ben
userPassword: 123456
dn: uid=ben1,ou=people2,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Captain
sn: Smeth
uid: ben1
userPassword: 123456
# 执行
ldapadd -x -D "cn=admin,dc=example,dc=com" -w 123456 -f add_test_user.ldif

浙公网安备 33010602011771号