OpenLdap 部署
环境介绍:
OS: centos7.x
slapd: 2.4.44
防火墙和selinux都已经关闭
所有的操作均在root用户下执行。
一、服务端搭建
1.1 安装软件包
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-devel migrationtools
安装完成以后,主要关注以下的目录:
/etc/openldap/slapd.d/* // 具体的数据配置信息
/etc/openldap/schema/* // 官方写好的一些配置信息
/var/lib/ldap/* //OpenLDAP的数据文件
/usr/share/openldap-servers/DB_CONFIG.example //模板数据库配置文件
1.2 启动服务
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd
OpenLDAP监听的端口:
默认监听端口:389(明文数据传输)
加密监听端口:636(密文数据传输)
1.3 配置
1.3.1 设置管理员密码
[root@hadoop4 ~]# slappasswd -s "123456"
{SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
注意:上述生成的这个加密的密码是需要用到的。
创建修改密码的文件
cat chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
说明:上述这块的意思是修改数据库olcDatabase={0}config,添加olcRootPW字段。在ldap里面,组织关系是树形结构。所以叫轻量级目录服务。
在centos6上面配置的时候,主要是使用slapd.conf文件来生成对应的信息。但是在centos7上面,建议是使用编写以ldif后缀的文件来定义。
执行如下命令,配置管理员密码
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
1.3.2 导入基本Schema模式
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
1.3.3 配置访问权限和设置基本的域名
cat chdomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
# specify the password generated above for "olcRootPW" section
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
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
add: olcRootPW
olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read
执行如下命令进行创建
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
1.3.4 配置基本域
cat basedomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server com
dc: example
dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Manager
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
执行命令
ldapadd -x -D cn=admin,dc=example,dc=com -W -f basedomain.ldif
1.3.5 添加用户
cat user.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=yjt,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: yjt
sn: Linux
userPassword:123456
loginShell: /bin/bash
uidNumber: 1100
gidNumber: 1100
homeDirectory: /home/yjt
dn: cn=yjt,ou=Group,dc=example,dc=com
objectClass: posixGroup
cn: yjt
gidNumber: 1100
memberUid: yjt
执行命令:
ldapadd -x -D "cn=admin,dc=example,dc=com" -w123456 -f user.ldif
查询用户,以下几种方式均可
ldapsearch -x -LLL uid=yjt +
ldapsearch -x -b "uid=yjt,ou=People,dc=example,dc=com"
ldapsearch -x -b "dc=example,dc=com"|grep yjt
二、配置日志信息
1、在 vim /etc/rsyslog.conf加上
local4.* /var/log/ldap.log
2、重启rsyslog
/etc/init.d/rsyslog restart
3、重启slapd服务
/etc/init.d/slapd restart
4、查看日志信息
cat /var/log/slapd/slapd.log
三 、OpenLDAP与migrationtools实现导入系统账号的相关信息
1、安装migrationtools
这个已经安装过
2、修改migrationtools的配置文件
vim /usr/share/migrationtools/migrate_common.ph 修改以下的两个地方
3、生成数据文件
生成基础的数据文件,可以自己修改这个生成的base.ldif文件,把不需要的去掉。
执行命令
/usr/share/migrationtools/migrate_base.pl > base.ldif
这一步主要就是创建一些ou,也就是组
执行命令
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
记得加-c,表示遇到错误继续执行
4、把系统的用户生成ldif文件
[root@hadoop4 openldap]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd passwd.ldif
[root@hadoop4 openldap]# /usr/share/migrationtools/migrate_group.pl /etc/group groupwd.ldif
把uid小于1000的最好都去掉。
这里用于演示,把passwd.ldif和groupwd.ldif里面的hduser相关的信息拿出来放到一个文件,如下:
执行导入命令:
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f passwd.ldif
查询:
ldapsearch -x -LLL uid=hduser +
四、OpenLDAP客户端的配置
4.1 关闭ssd服务
systemctl status sssd
4.2 安装nslcd服务
yum install nss-pam-ldapd
4.3 修改nslcd配置
vim /etc/nslcd.conf
主要修改下面两项
4.4 system-auth
vim /etc/pam.d/system-auth 修改,把sss行的注释掉,改成ldap的
同时添加一行:
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022
这个是解决登录用户的时候不能创建家目录问题
4.5 修改 nsswitch.conf
vim /etc/nsswitch.conf 修改nsswitch.conf配置文件,修改后,默认登录的用户通过本地配置文件进行查找并匹配。当匹配不到用户信息时,会通过后端配置的LDAP认证服务进行匹配
4.6 修改authconfig
vim /etc/sysconfig/authconfig 确保标记的已打开为yes
USESHADOW=yes 启用密码验证
USELDAPAUTH=yes 启用OpenLDAP验证
USELOCAUTHORIZE=yes 启用本地验证
USELDAP=yes 启用LDAP认证协议
4.7 重启nslcd服务
/etc/init.d/nslcd restart
如果Linux操作系统要与ldap连接,也可以使用setup来配置
五、与ssh集成
5.1 修改sshd_config
vim /etc/ssh/sshd_config
UsePAM yes // 开启
5.2 修改sshd
vim /etc/pam.d/sshd 用于第一次登陆的账户自动创建家目录
在最后添加:
session required pam_mkhomedir.so
5.3 password-auth
vim /etc/pam.d/password-auth
注:把上述图片里面的划线的第一行改成下面这样,否则ssh连接的时候,输入密码总是失败
auth sufficient pam_ldap.so forward_pass
重启sshd
六、限制用户登录
6.1 修改/etc/pam.d/sshd
添加上pam_access.so模块
account required pam_access.so
6.2 修改/etc/security/access.conf
测试限制hduser用户ssh登录系统
测试
七、密码强度配置
7.1 加载ppolicy模块
检查模块是否存在:
slapcat -n 0 | grep olcModuleLoad
如果上面命令没有任何输出,使用ldapadd加载模块
7.2 创建模块ldif文件
cat 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
说明加载成功
加载ppolicy模块的方法二
加载 PPolicy 模块
定义 olcModuleList 对象:
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: ppolicy.la
EOF
添加olcModulePath
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
changetype: modify
add: olcModulePath
olcModulePath: /usr/lib64/openldap/
EOF
7.3 导入ppolicy的schema
1、查看ppolicy的schema是否添加
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn | grep ppolicy
如果没有添加进行添加
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
7.4 修改olcAccess规则
cat << EOF | ldapmodify -c -Y EXTERNAL -Q -H ldapi:///
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=root,dc=example,dc=com" write by anonymous auth by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=root,dc=example,dc=com" write by * read
EOF
7.5 添加默认密码策略
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=admin,ou=pwpolicies,dc=example,dc=com
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: TRUE
EOF
查看
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={2}hdb,cn=config
7.6 添加pwpolicies条目
cat << EOF | ldapadd -x -D "cn=root,dc=example,dc=com" -w123456
dn: ou=pwpolicies,dc=example,dc=com
objectClass: organizationalUnit
ou: pwpolicies
EOF
7.7 添加默认密码策略
添加默认密码策略:(pwdLockoutDuration:密码连续输入错误次数后,账号锁定时间 pwdMaxFailure:密码最大失效次数,超过后账号被锁定)
cat << EOF | ldapadd -x -D cn=admin,dc=example,dc=com -w123456
dn: cn=admin,ou=pwpolicies,dc=example,dc=com
objectClass: pwdPolicy
objectClass: person
cn: admin
pwdMaxAge: 2592000
pwdAttribute: userPassword
pwdExpireWarning: 3600
#pwdInHistory: 0
#pwdCheckQuality: 0
pwdMaxFailure: 5
pwdLockout: TRUE
#pwdLockoutDuration: 0
#pwdGraceAuthNLimit: 0
#pwdFailureCountInterval: 0
pwdMustChange: TRUE
pwdMinLength: 6
#pwdAllowUserChange: TRUE
pwdSafeModify: FALSE
pwdCheckQuality: 2
sn: dummy value
7.8 添加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
配置
add_pqchecker.ldif
dn: cn=admin,ou=pwpolicies,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
7.8 查看用户的密码策略
ldapsearch -x -b 'ou=pwpolicies,dc=asiainfo,dc=com'
八、主从
借鉴:
https://www.cnblogs.com/lemon-le/p/6266921.html
https://www.tqwba.com/x_d/jishu/396459.html
https://blog.csdn.net/u011607971/article/details/86378361
https://blog.csdn.net/weixin_33758863/article/details/93631997
http://www.zytrax.com/books/ldap/ch6/ppolicy.html#pwdpolicyattributes
https://blog.csdn.net/liumiaocn/article/details/83991112