centos7 LDAP双主架构

1.什么是LDAP?
LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好像Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
企业员工信息,如姓名、电话、邮箱等;
公用证书和安全密钥;
公司的物理设备信息,如服务器,它的IP地址、存放位置、厂商、购买时间等;
 
2.LDAP特点:
LDAP的结构用树来表示,而不是用表格。正因为这样,就不能用SQL语句了
LDAP可以很快地得到查询结果,不过在写方面,就慢得多
LDAP提供了静态数据的快速查询方式
Client/server模型,Server 用于存储数据,Client提供操作目录信息树的工具
这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前
LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议
 
 
由于本次文档有部分图片无法上传,请打开如下链接查看:

文档:LDAP双主架构.note
链接:http://note.youdao.com/noteshare?id=7154536c099b1127d3166bc714e96a36

 
 
本次搭建双主架构
本次所有需要用到的附件
ldap.zip
 
第一部分:搭建ldap环境 (两台主机都需要执行)
 
1.关闭防火墙
systemctl stop firewalld.service && systemctl disable firewalld.service
 
2.安装openldap
yum install openldap openldap-servers openldap-clients compat-openldap
 
3.拷贝数据库配置文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/DB_CONFIG #DB_CONIFG中主要是关于Berkeley DB的相关的一些配置
 
4.启动openldap
systemctl enable slapd && systemctl start slapd #slapd即standard alone ldap daemon,该进程默认监听389端口
 
5.设置root用户密码 #生成一个管理用于ldap用户(root)的密码,注意:即使同一个密码再次生成也会产生不同密文
slappasswd
新建文件root_pwd.ldif(名称自定义)
vim root_pwd.ldif
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW
olcRootPW: {SSHA}TtW9KhXyXLSWGyaCRiqHgL1SbXi5LQS6 #注意替换为上边生成密码
 
  • ldif即LDAP Data Interchange Format,是LDAP中数据交换的一种文件格式。文件内容采用的是key-value形式,注意value后面不能有空格。
  • 上面内容中dn即distingush name
  • olc即Online Configuration,表示写入LDAP后不需要重启即可生效
  • changetype: modify表示修改一个entry,changetype的值可以是add,delete, modify等。
  • add: olcRootPW表示对这个entry新增了一个olcRootPW的属性
  • olcRootPW: {SSHA}krOGXDmiCdSXuXocOf10F96LJO5ijdXo指定了属性值
下面使用ldapadd命令将上面的rootpwd.ldif文件写入LDAP:
ldapadd -Y EXTERNAL -H ldapi:/// -f root_pwd.ldif
 
6.导入schma #schema包含为了支持特殊场景相关的属性,可根据选择导入,这里先全部导入
ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done
 
7.设定域
slappassword (生成登录域的管理用户密码,它跟上边ldap管理用户(root)是不同账号,不要混淆了,这里我们可以使用上边生成的密码,也可以再次创建新密码)
新建文件domain.ldif
vim domain.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=Manager,dc=xingyuehui,dc=com" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=xingyuehui,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=xingyuehui,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}TtW9KhXyXLSWGyaCRiqHgL1SbXi5LQS6 #替换上面生成的密码
 
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=xingyuehui,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=xingyuehui,dc=com" write by * read
 
注意:红色部分是替换为我自己的域名和密码,如果导入过程中有错误,大部分都是格式出现了问题,请仔细检查语法格式,或者百度上搜一个复制粘贴即可,不建议手工输入,格式非常容易出错。
  • olcAccess即access,该key用于指定目录的ACL即谁有什么权限可以存取什么
  • olcRootDN设定管理员root用户的distingush name
  • 注意替换上面文件内容中cn为具体的域信息
  • olcRootPW用上面新生成的密码替换
 
ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif
 
8.添加基本目录(ou)
新建文件basedomain.ldif
vim basedomain.ldif
 
dn: dc=xingyuehui,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: xingyuehui com
dc: xingyuehui
 
dn: cn=Manager,dc=xingyuehui,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
 
dn: ou=People,dc=xingyuehui,dc=com
objectClass: organizationalUnit
ou: People
 
dn: ou=Group,dc=xingyuehui,dc=com
objectClass: organizationalUnit
ou: Group
 
注意:红色部分是替换为我自己的域名
理解dn,cn,dc
DC即Domain Component,LDAP目录类似文件系统目录dc=xingyuehui,dc=com相当于/com/xingyuehui
CN即Common Name,CN有可能代表一个用户名,例如cn=Manager,dc=xingyuehui,dc=com表示在/com/xingyuehui域下的管理员用户Manager
OU即Organizational Unit,例如ou=People,dc=xingyuehui,dc=com表示在/com/xingyuehui域下的一个组织单元People
 
ldapadd -x -D cn=Manager,dc=zhidaoauto,dc=com -W -f basedomain.ldif
ldapadd 常用参数:
-x   进行简单认证
      -D   用来绑定服务器的DN
      -h   目录服务的地址
      -w   绑定DN的密码
      -f   使用ldif文件进行条目添加的文件
问题1:对于多次安装小伙伴如果提示已存在,则就不用执行如上这一步骤了。(或者删除/etc/openldap/slapd.d和/var/lib/ldap/目录,从头再来重新安装)
 
9.测试
ldapsearch -LLL -W -x -D "cn=Manager,dc=xingyuehui,dc=com" -H ldap://localhost -b "dc=xingyuehui,dc=com"
 
 
10.管理工具ldapadmin
链接:http://www.ldapadmin.org/download/ldapadmin.html
下载解压,依次打开——start——new_connection
下图是我连接的两台ldap主机
新建一个测试账号:wangjh
 
11.ldap客户端设置
在linux客户端配置测试(主机1测试即可):authconfig-tui
 
测试账号:id wangjh
 
问题2:如果提示 no such user ,建议修改如下参数,在尝试
这是因为ldap默认随机创建的用户uidUumber已经超过linux用户限制了,修改至合适大小即可。
再次测试成功:
 
 
第二部分 搭建双主模型 (两台主机都需要执行,部分步骤存在细微差异)
 
12.添加模块syncprov
ldap双主复制功能的实现依赖于syncprov模块,这个模块位于/usr/lib64/openldap目录下
vim syncprov_mod.ldif
 
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
 
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
13.导入配置
vim syncprov.ldif
 
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100
 
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
 
14.开启同步
vim master_node_1.ldif
 
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ###设置主机ID,不同主机ID不同,配置主机2是需要修改此参数
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://192.168.1.14:389/ ###修改为主2的地址,可以不加端口 。同理更改主机2的地址为,主机1的地址,实现同步
bindmethod=simple
binddn="cn=Manager,dc=xingyuehui,dc=com" ###管理域的管理员账号
credentials=123123 ###修改为自己的明文密码
searchbase="dc=xingyuehui,dc=com"
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
-
add: olcMirrorMode
olcMirrorMode: TRUE
 
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
 
主1:ldapmodify -Y EXTERNAL -H ldapi:/// -f master_node_1.ldif
主2:ldapmodify -Y EXTERNAL -H ldapi:/// -f master_node_2.ldif
 
15.测试账号
测试在主机1建立账号,主机2可以正常同步。
 
参考文档:
https://www.cnblogs.com/hit-zb/p/11401624.html
https://www.cnblogs.com/chadiandianwenrou/p/9522756.html
 

posted @ 2021-06-20 16:14  星月辉  阅读(388)  评论(0编辑  收藏  举报