• Centos7 Openldap主从配置


    转载 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

  • 相关阅读:
    python_day3
    python-day2
    python-day1
    【收集】安卓手机在市场占比的网址查找
    while循环
    switch多选择结构
    if选择结构
    顺序结构
    Scanner:求和 、求平均值
    Scanner:用户交互
  • 原文地址:https://www.cnblogs.com/mingzhang/p/9122128.html
Copyright © 2020-2023  润新知