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 修改以下的两个地方
image
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相关的信息拿出来放到一个文件,如下:
image
执行导入命令:

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
主要修改下面两项
image
4.4 system-auth
vim /etc/pam.d/system-auth 修改,把sss行的注释掉,改成ldap的
image
同时添加一行:

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
image
注:把上述图片里面的划线的第一行改成下面这样,否则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登录系统

image

测试

image

七、密码强度配置

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

记录学习和生活的酸甜苦辣.....哈哈哈
原文地址:https://www.cnblogs.com/yjt1993/p/14786051.html