zoukankan      html  css  js  c++  java
  • Centos 7 下安装LDAP 双主同步

    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

  • 相关阅读:
    [LeetCode] Dungeon Game
    [LeetCode] Maximal Rectangle
    [LeetCode] Scramble String -- 三维动态规划的范例
    [LeetCode] Palindrome Partitioning II
    [LeetCode] Palindrome Partitioning
    [LeetCode] Interleaving String
    [LeetCode] Longest Valid Parentheses -- 挂动态规划羊头卖stack的狗肉
    JPA将查询结果转换为DTO对象
    EOS签名R值过大导致报错"is_canonical( c ): signature is not canonical"
    比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本
  • 原文地址:https://www.cnblogs.com/hit-zb/p/11401624.html
Copyright © 2011-2022 走看看