转载 https://blog.csdn.net/htvxjl02/article/details/80336788

Centos7 Openldap主从配置

2018年05月16日 15:09:57

阅读数:79

参考了网上多篇文档,大都是centos6.x系统上通过slapd.conf配置部署的,centos7上默认是动态部署的,

通过yum安装发现无slapd.conf文件,研究了近半个多月,才初步实现如下所示的同步。

环境:虚拟机centos7系统

192.168.56.147

主openldap

192.168.56.148

从openldap

安装ldap服务

vi installOpenldap.sh

#!/bin/bash

echo "install ldap rpm"

# compat-openldap这个包与主从有很大的关系

yum install -y openldap openldap-* compat-openldap migrationtools

systemctl start slapd

systemctl enable slapd

chmod +x installOpenldap.sh

./installOpenldap.sh

查看安装的ldpa服务

rpm -qa|grep ldap

查看OpnLDAP版本

slapd -VV

查看ldap启动状态

systemctl status slapd

查看openldap默认监听的389端口(centos7最小化安装默认没有netstat命令,需安装)

yum install net-tools -y

netstat -antup| grep 389

开放389端口

firewall-cmd --zone=public --add-port=389/tcp --permanent

firewall-cmd --reload

(这里我使用的是开启防火墙开放端口,也可以直接关闭防火墙,网上大都用的这种,如下

初始化环境:

ntpdate -u ntp.api.bz && sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config && setenforce 0&& systemctl disable firewalld.service && systemctl stop firewalld.service && shutdown -r now

最小化安装的centos7系统需安装ntpdate)

配置OpenLDAP数据库

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

chownldap:ldap -R /var/lib/ldap/

chmod 700 -R /var/lib/ldap

ll /var/lib/ldap/

配置ldap服务

设置OpenLDAP的管理员密码

slappasswd

New password:

Re-enter newpassword:

如设置密码:AHdms520

{SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI

或者

(这样是方便观察设置的密码是什么)

{SSHA}fUcmcIuxU/FSyrMu75aIBbOSae2sXT4q

vi chrootpw.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={0}config,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI

ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

导入基本模式

vi ldapaddBaseSchema.sh (注:脚本名可自定义或者直接复制下列命令运行)

#!/bin/bash

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

在ldap服务的DB中设置域名

vi 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=Manager,c=cn" read by * none

dn: olcDatabase={2}hdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: c=cn

dn: olcDatabase={2}hdb,cn=config

changetype: modify

replace: olcRootDN

olcRootDN: cn=Manager,c=cn

dn: olcDatabase={2}hdb,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI

dn: olcDatabase={2}hdb,cn=config

changetype: modify

add: olcAccess

olcAccess: {0}to attrs=userPassword,shadowLastChange by

dn="cn=Manager,c=cn" write by anonymous auth by self write by * none

olcAccess: {1}to dn.base="" by * read

olcAccess: {2}to * by dn="cn=Manager,c=cn" write by * read

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

导入管理员基础数据

vi rootdn.ldif

dn: c=cn

objectclass: country

c: cn

dn: cn=Manager,c=cn

objectclass: organizationalRole

cn: Manager

ldapadd -x -D cn=Manager,c=cn -W -f rootdn.ldif

开启日志配置

(注:日志级别可按需要进行设置)

vi logLevel.ldif

[root@localhost ~]# cat logLevel.ldif

dn: cn=config

changetype: modify

replace: olcLogLevel

olcLogLevel: stats

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

 

touch /var/log/slapd.log

vi /etc/rsyslog.conf +73

(注:+73是指定位到文件73行)

添加:

local4.*                                               /var/log/slapd.log

重启系统日志服务与ldap服务

systemctl restart rsyslog

systemctl restart slapd

tail -f /var/log/slapd.log

另外可通过cn=config配置OpenLDAP日志

[root@localhost ~]# cat /etc/openldap/slapd.d/cn\=config.ldif | grep olcLogLevel

[root@localhost ~]# cat << EOF | ldapmodify -Y EXTERNAL -H ldapi:///

> dn: cn=config

> changetype: modify

> add: olcLogLevel

> olcLogLevel: 32

> EOF

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"

master配置

在master上启用添加syncprov模块来实现主从复制功能点,通过ldif文件来增加syncprov模块,无需重启ldap server。

vi mod_syncprov.ldif

dn: cn=module,cn=config

objectClass: olcModuleList

cn: module

olcModulePath: /usr/lib64/openldap

olcModuleLoad: syncprov.la

Ldap由于scheam的控制,文件里的属性有严格的控制,错误的或者不存在的属性将无法执行ldif文件,所以ldif文件的字体颜色会帮助我们配置ldif文件(属性:绿色,属性值:红色)。

ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif

vi syncprov.ldif

dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config

objectClass: olcOverlayConfig

objectClass: olcSyncProvConfig

olcOverlay: syncprov

olcSpCheckpoint: 100 10

olcSpSessionLog: 100

ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif

slave配置

同样,在slave上也需要配置syncrepl,因为syncrepl实现的主从复制是单向的,即master的所有操作都会同步到slave上,slave无法同步到master上,为了避免master与slave上的数据不一致,slave上禁止对ldap信息的增删改操作,只允许查询操作。因为是单向的,故slave需要一些master的认证信息,以便从master同步数据

vi syncrepl.ldif

dn: olcDatabase={2}hdb,cn=config

changetype: modify

add: olcSyncRepl

olcSyncRepl: rid=001

provider=ldap://192.168.56.149:389/

bindmethod=simple

binddn="cn=Manager,c=cn"

credentials=AHdms520

searchbase="c=cn"

scope=sub

schemachecking=on

type=refreshAndPersist

retry="5 5 300 +"

attrs="*,+"

interval=00:00:00:10

(这里方便测试设置10秒同步)

注意:一定要注意字体的颜色和上面一致,provider,bindmethod …… interval都是olcSyncRepl的属性值,不是与olcSyncRepl同级别,故其为红色。

ldapadd -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

测试

1.               查看master/slave的监听端口

yum installnet-tools -y (注:centos7 最小化安装无netstat命令,需安装)
netstat -tnlp | grep 389   (#master)

netstat -tnlp| grep 389       (#slave)

2.              
slave 中查看当前ldap用户列表
ldapsearch -x -b 'cn=Manager,c=cn',就可以看到自动从master同步过来是数据

3.              
在master新增/删除用户,确认是否同步。首先,在master上,准备增加用户的ldif脚本。

vi test.ldif

# create new

# replace to your own domain namefor
"dc=***,dc=***" section

dn: uid=asiainfo,ou=Manager,c=cn

objectClass: inetOrgPerson

objectClass: posixAccount

objectClass: shadowAccount

cn: ASIAINFO

sn: TEST

userPassword: {SSHA}NnsvnZeCbR+pBqhaGCdXFnTLMc+dBaQI  #ssha加密后的值: AHdms520

loginShell: /bin/bash

uidNumber: 1612

gidNumber: 1612

homeDirectory: /test

ldapadd -x -Dcn=Manager,c=cn -W -f test.ldif

在slave中查看是否同步完成

ldapsearch -x-b ' cn=Manager,c=cn '|grep asiainfo

执行完命令提示的内容里包含了uid=asiainfo:

也可以用客户端软件测试(这里我使用的是ApacheDirectoryStudio)

到此表示主从同步完成。

参考:

https://blog.csdn.net/wenwenxiong/article/details/76855047

https://blog.csdn.net/xiaowen_1990/article/details/79651099

https://www.ilanni.com/?p=13775

http://www.zytrax.com/books/ldap/ch6/slapd-config.html#contents

http://www.zytrax.com/books/ldap/ch7/#ol-syncrepl

http://www.openldap.org/doc/admin24/slapdconf2.html

Centos7 Openldap主从配置的更多相关文章

  1. CentOS7 PostgreSQL 主从配置( 二)

    同步流复制配置PostgreSql的流复制是异步的,缺点是Standby上的数据落后于主库上的数据,如果使用Hot Standby做读写分离,就会存在数据一致性的问题.PostgreSql9.1版本后 ...

  2. CentOS7 PostgreSQL 主从配置( 一)

    主库配置 pg_hba.conf host replication all 10.2.0.0/0 trust postgresql.conf listen_addresses = '*' max_wa ...

  3. CentOS7 PostgreSQL 主从配置( 三)

    postgres 主备切换 主备查看 方法 ps -ef | grep wal (主库 sender)postgres 27873 27864 0 5月06 ? 00:00:10 postgres: ...

  4. CentOS7系统DNS主从配置

    CentOS7系统DNS主从配置:一.DNS服务器正向解析:1.1 基础环境:主机IP          主机名      操作系统    用途192.168.0.110   master      ...

  5. CentOS7+mysql5.6配置主从

    一.安装环境 操作系统:CentOS-7-x86_64-DVD-1611.iso数据库版本:mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz数据库地址: 192.1 ...

  6. Centos7下mysql5.7.22主从配置

    一:服务器配置 1.1修改root密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx'; 1.2添加远程登陆用户: GRANT ALL PRIV ...

  7. Centos7下mysql的主从配置

    最近,有朋友业务并发量比较大,让我帮他配置个主从,来缓解数据库的压力.下面就是我配置的,有需要的朋友可以借鉴下. 首先,我得到2台服务器: 172.18.2.142(主) 172.18.2.141(从 ...

  8. CentOS7 yum安装配置 +redis主从配置

    一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar ...

  9. 在阿里云Centos7.6上面配置Mysql主从数据库(master/slave),实现读写分离

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_85 在之前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx做后台服务的负载均衡:在阿里云Centos上配置nginx+ ...

随机推荐

  1. MSA(微服务简介)

    1.为什么要使用微服务? 要说为什么要使用微服务,我们要先说下传统的企业架构模式-垂直架构/单块架构模式,简单点说:我们一般将系统分为三层架构,但是这是逻辑上的三层,而非物理上的三层,这就意味着经过编 ...

  2. OpenCV---直方图反向投影

    一:直方图反向投影的方法 二:二维直方图的表示 (一)直接显示 def hist2D_demo(image): hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) hi ...

  3. Codechef Observing the Tree

    Home » Practice(Hard) » Observing the Tree   https://www.codechef.com/problems/QUERY Observing the T ...

  4. asp.net core 实践

    github:https://github.com/zzhi/DotNetWeb 这是一个基于asp.net core web application的练习项目,目的是学习dotnet core新技能 ...

  5. 《JavaScript 实战》:Tween 算法及缓动效果

    Flash 做动画时会用到 Tween 类,利用它可以做很多动画效果,例如缓动.弹簧等等.我这里要教大家的是怎么利用 Flash 的 Tween 类的算法,来做js的Tween算法,并利用它做一些简单 ...

  6. jquery键盘事件全记录

    很多时候,我们需要获取用户的键盘事件,下面就一起来看看jquery是如何操作键盘事件的. 一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() k ...

  7. 【Atcoder】AGC 020 B - Ice Rink Game 递推

    [题意]n个人进行游戏,每轮只保留最大的a[i]倍数的人,最后一轮过后剩余2人,求最小和最大的n,或-1.n<=10^5. [算法]递推||二分 [题解]令L(i),R(i)表示第i轮过后的最小 ...

  8. 51Nod - 1006 最长公共子序列Lcs模板

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这 ...

  9. JS设计模式——4.继承(概念)

    类式继承 0.构造函数 一个简单的Person类 function Person(name){ this.name = name; } Person.prototype.getName = funct ...

  10. java在CMD窗口执行程序的时候输入密码(隐藏一些敏感信息)

    有时候我们需要从CMD窗口执行一些命令,有时候会输入一些敏感的信息,比如密码之类的东西,所以我们可以从控制台读取但是不希望别人看见我们的密码: import java.io.Console; /** ...