Centos 7 下安装LDAP 双主同步

标签(空格分隔): LDAP


安装说明:

从OpenLDAP2.4.23版本开始所有配置数据都保存在slapd.d目录下的cn=config文件夹中,不再使用slapd.conf作为配置文件

有两种配置方式,一种是通过修改旧版配置文件slapd.conf,再用slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/导入到数据库中,这种方式非常麻烦,不建议使用。

一种是通过编辑ldif文件,再用ldapadd命令导入到数据库中,这种方式是动态配置,不需要重新启动服务端slapd进程。

本文采用第二种方式,这种方式网上文档比较少,不好弄,本人花了10几天才算搞了个半懂,在这记录下来,希望能给有需要的人一些帮助

如果非要使用第一种方法,centos7系统yum安装后没有slapd.conf.obsolete文件,可以选择从centos6上复制过来

官方文档: https://www.openldap.org/doc/admin24/slapdconf2.html

安装环境

centos 7.5
ldap主1服务器:VECS05855 10.111.30.24
ldap主2服务器:VECS05856 10.111.30.25
OpenLDAP2.4.44
root账号下执行所有命令

一,安装步骤(两台机器均执行)

1,安装ldap

yum  install -y openldap openldap-servers openldap-clients  compat-openldap

备注(仅仅说明,不需要执行):

#可以通过rpm -ql <package name>,来查看每个安装包都有哪些文件
openldap: #OpenLDAP配置文件、库和文档
openldap-servers: #服务器进程及相关命令、迁移脚本和相关文件
openldap-clients: #客户端进程及相关命令,用来访问和修改 OpenLDAP 目录
compat-openldap: #与主从配置相关

安装过程中会自动创建ldap用户和ldap组(确认安装完毕)

root@VECS05855:~# grep ldap /etc/passwd
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
root@VECS05855:~# grep ldap /etc/group
ldap:x:55:
root@VECS05855:~#

2、 复制数据库模板并更改权限

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

chown ldap. /var/lib/ldap/DB_CONFIG

3、启动ldap,并设置为开机启动。 ldap服务端进程名称为slapd

systemctl enable slapd && systemctl start slapd && systemctl status slapd

验证已经启动

root@VECS05855:~# netstat -tunlp |grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 19473/slapd
tcp6 0 0 :::389 :::* LISTEN 19473/slapd

4、使用 slappasswd 命令生成密码

这一步生成管理员密码,注意两台机器的上明文密码一样,密文密码不一样。

root@VECS05855:~# slappasswd
New password:
Re-enter new password:
{SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J

编写 LDIF(一种LDAP 专用的数据交换格式)文件,并通过ldapadd命令将管理员密码导入到 LDAP配置文件中。

root@VECS05855:~#  vim chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J

导入

root@VECS05855:~# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

5、导入基本数据结构

ldapadd -Y EXTERNAL  -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif

6、配置 LDAP 的根域(以 dc=hellobike,dc=com 为例)及其管理域:

root@VECS05855:~# vim  chdomain.ldif
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=hellobike,dc=com" read
by * none dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hellobike,dc=com dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=hellobike,dc=com dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=hellobike,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=hellobike,dc=com" write
by * read

导入

root@VECS05855:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config"

7、在上述基础上,我们来创建一个叫做 hellobike company 的组织

root@VECS05855:~# vim basedomain.ldif
dn: dc=hellobike,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: hellobike Company
dc: hellobike dn: cn=admin,dc=hellobike,dc=com
objectClass: organizationalRole
cn: admin dn: ou=People,dc=hellobike,dc=com
objectClass: organizationalUnit
ou: People dn: ou=Group,dc=hellobike,dc=com
objectClass: organizationalRole
cn: Group

导入

[root@test1] ~$ ldapadd -x -D cn=admin,dc=hellobike,dc=com -W -f basedomain.ldif
Enter LDAP Password: #输入上面设置的管理员密码(明文)
adding new entry "dc=hellobike,dc=com" adding new entry "cn=admin,dc=hellobike,dc=com" adding new entry "ou=People,dc=hellobike,dc=com" adding new entry "ou=Group,dc=hellobike,dc=com"

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dc=hellobike,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=hellobike,dc=com 和两个组织单元 ou=People,dc=hellobike,dc=com 及 ou=Group,dc=hellobike,dc=com。

二、配置双主复制功能,在主1和主2上执行均下面的步骤

1. 启用 syncprov 模块

root@VECS05855:~# vim syncprov_mod.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

导入执行该文件

root@VECS05855:~#  ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

2,启用 OpenLDAP 的双主同步

创建 configrep.ldif 文件。

configrep.ldif

root@VECS05855:~# vim configrep.ldif
### Update Server ID with LDAP URL ### dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://VECS05855
olcServerID: 2 ldap://VECS05856 ### Enable replication ### dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov ### Adding details for replication ### dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl:
rid=001
provider=ldap://VECS05855
binddn="cn=admin,dc=hellobike,dc=com"
bindmethod=simple
credentials=Bi@#admin
searchbase="dc=hellobike,dc=com"
type=refreshAndPersist
retry="5 5 300 5"
timeout=1
olcSyncRepl:
rid=002
provider=ldap://VECS05856
binddn="cn=admin,dc=hellobike,dc=com"
bindmethod=simple
credentials=Bi@#admin
searchbase="dc=hellobike,dc=com"
type=refreshAndPersist
retry="5 5 300 5"
timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE

然后在两台服务器上分别执行这个 ldap_sync.ldif 文件即可。

ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif

至此,dc=hellobike,dc=com 下的内容便可以在两个服务器上同步了。

如果其他需要ldap 的客户端为centos6 :

authconfig --enableldap --ldapserver=ldap://VECS08934 --ldapbasedn=dc=hellobike,dc=com --updateall --enablemkhomedir --enablesssd --enablesssdauth

测试可以启动sssd 进程。

如果其他需要ldap 的客户端为centos7:

则只需要安装sssd(yum install -y sssd)

[domain/default]
cache_credentials = True
ldap_search_base =dc=hellobike,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://VECS08934
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/certs [sssd]
config_file_version = 2
services = nss, pam
domains = default
debug_level = 5 [pam] [nss]
homedir_substring = /home

参考:https://blog.csdn.net/fanren224/article/details/79707206

http://v.colinlee.fish/posts/openldap-speedy-tutorial-replication.html

最新文章

  1. .NET4.5 异步编程 async和await
  2. Java在处理大数据的时候一些小技巧
  3. WCF的一点补充-Restful相关
  4. PHP 生成指定大小随机图片
  5. NDK(14)Native的char*和Java的String相互转换
  6. iptables 添加,删除,查看,修改
  7. Android仿人人客户端(v5.7.1)——个人主页(三)
  8. webform 不实用office控件导出excel StringBuilder 类型拼接字符串表格导出excel
  9. linux根据部署jenkins
  10. constructor 属性,判断是否为数组
  11. echarts 专题
  12. 基于js的数据结构与算法-数组
  13. B树与B+ 树
  14. 自学Zabbix6.1 Event acknowledgment 事件确认
  15. js正则表达式中的
  16. 两个listbox 复制
  17. MySql中的varchar类型
  18. 如何在Word中排出漂亮的代码
  19. Entity Framework Code First 遭遇mapping 不能识别map类问题
  20. MongoDB快速入门(十三)- 聚合count、distinct和group

热门文章

  1. lesson12Homework
  2. Winform 5种皮肤小结(内含丰富的下载实例)
  3. Python 风格指南
  4. vs 2017创建类时的默认模板修改
  5. docker基础知识
  6. 深度:Hadoop对Spark五大维度正面比拼!
  7. js之数据类型(对象类型——构造器对象——数组2)
  8. 6 java 笔记
  9. WPF - 多列ListView添加数据的多种方式
  10. ubuntu版本信息查看