• 关于Linux安装OpenLDAP说明


    版本centos

    1. 简介

    首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。
    那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。而我们通常说的LDAP是指运行这个数据库的服务器。可以简单理解AD =LDAP服务器+LDAP应用。

    1.1 那LDAP这种数据库有什么特殊的呢?

    我们知道,像MySQL数据库,数据都是按记录一条条记录存在表中。而LDAP数据库,是树结构的,数据存储在叶子节点上。看看下面的比喻:

    假设你要树上的一个苹果(一条记录),你怎么告诉园丁它的位置呢?当然首先要说明是哪一棵树(dc,相当于MYSQL的DB),然后是从树根到那个苹果所经过的所有“分叉”(ou),最后就是这个苹果的名字(uid,相当于MySQL表主键id)。好了!这时我们可以清晰的指明这个苹果的位置了,就是那棵“歪脖树”的东边那个分叉上的靠西边那个分叉的再靠北边的分叉上的半红半绿的……,晕了!你直接爬上去吧!

    就这样就可以描述清楚“树结构”上的一条记录了。
    说一下LDAP里如何定义一个记录的位置吧。

    树(dc=ljheee)
    分叉(ou=bei,ou=xi,ou= dong)
    苹果(cn=redApple)
    
    • 1
    • 2
    • 3

    好了,redApple的位置出来了:

    dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=ljheee
    
    • 1

    其中dn标识一条记录,描述了一条数据的详细路径
    咦!有人疑问,为什么ou会有多个值?你想想,从树根到达苹果的位置,可能要经过好几个树杈,所有ou可能有多个值。关于dn后面一长串,分别是cn,ou,dc;中间用逗号隔开
    总结一下LDAP树形数据库如下

    • dn :一条记录的详细位置
    • dc :一条记录所属区域 (哪一颗树)
    • ou :一条记录所属组织 (哪一个分支)
    • cn/uid:一条记录的名字/ID (哪一个苹果名字)
      LDAP目录树的最顶部就是根,也就是所谓的“基准DN"

    1.2 为什么要用LDAP目录树来存储数据,用MySQL不行吗,为什么非要搞出一个树形的数据库呢?

    这是因为用树形结构存储数据,查询效率更高(具体为什么,可以看一下关系型数据库索引的实现原理——B树/B+树),在某些特定的场景下,使用树形数据库更理想。比如:需要储存大量的数据,而且数据不是经常更改,需要很快速的查找,把它与传统的关系型数据库相比,LDAP除了快速查找的特点,它还有很多的运用场景,比如域验证等

    2. 安装ldap

    2.1 安装ladp

    yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
    
    • 1

    在这里插入图片描述

    2.2 查看版本

    slapd -VV
    
    • 1

    在这里插入图片描述

    2.3 配置管理员密码

    2.3.1 生成密码

    slappasswd -s 123456
    
    • 1

    在这里插入图片描述

    2.3.2 修改olcDatabase={2}hdb.ldif文件

    vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
    
    修改内容
    olcSuffix: dc=testldap,dc=com
    olcRootDN: cn=Manager,dc=testldap,dc=com
    olcRootPW: {SSHA}84X/7jQ8TwrBd1Sq3k+PkIe1wHhy8mzZ
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    2.3.3 修改olcDatabase={1}monitor.ldif文件

    vi /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif
    
    修改内容
    olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
     al,cn=auth" read by dn.base="cn=Manager,dc=testldap,dc=com" read by * none
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2.3.4 验证配置文件是否正确

    slaptest -u
    
    • 1

    在这里插入图片描述
    注:slaptest -u 会提示 checksum error,不用担心,因为以上步骤已变更这两个文档,只需关注“config file testing succeeded”即可

    2.3.5 启动服务&&查看服务

    systemctl enable slapd
    systemctl start slapd
    systemctl status slapd
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.4 配置OpenLDAP数据库

    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown ldap:ldap -R /var/lib/ldap
    chmod 700 -R /var/lib/ldap
    ll /var/lib/ldap/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    注意:/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径。

    2.4.1 导入基本Schema

    **方法一:**
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    方法二:

    ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}
    
    • 1

    在这里插入图片描述

    2.4.2 修改migrate_common.ph文件

    vi /usr/share/migrationtools/migrate_common.ph

    vi /usr/share/migrationtools/migrate_common.ph
    修改
    
    $DEFAULT_MAIL_DOMAIN = "testldap.com";
    $DEFAULT_BASE = "dc=testldap,dc=com";
    $EXTENDED_SCHEMA = 1;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    2.5 添加用户及用户组

    (较为繁琐,是否可使用客户端ApacheDirectoryStudio取代)

    默认情况下OpenLDAP是没有普通用户的,但是有一个管理员用户。管理用户就是前面我们刚刚配置的root。
    现在我们把系统中的用户,添加到OpenLDAP中。为了进行区分,我们现在新加两个用户ldapuser1和ldapuser2,和两个用户组ldapgroup1和ldapgroup2,如下:

    2.5.1 添加用户组

    groupadd ldapgroup1
    groupadd ldapgroup2
    
    • 1
    • 2

    2.5.2 添加用户并设置密码

    useradd -g ldapgroup1 ldapuser1
    useradd -g ldapgroup2 ldapuser2
    passwd  ldapuser1
    passwd  ldapuser2
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    密码不少于 8 个字符

    2.5.3 提取用户和组

    grep ":10[0-9][0-9]" /etc/passwd > /root/users
    grep ":10[0-9][0-9]" /etc/group > /root/groups
    
    cat users
    cat groups
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.5.4 生成用户和组的ldif文件

    /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
    /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
    cat /root/users.ldif
    cat /root/groups.ldif
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.5.5 导入用户及用户组到OpenLDAP数据库

    配置openldap基础的数据库

    cat > /root/base.ldif << EOF
    dn: dc=testldap,dc=com
    o: testldap com
    dc: testldap
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    
    dn: cn=Manager,dc=testldap,dc=com
    cn: Manager
    objectClass: organizationalRole
    description: Directory Manager
    
    dn: ou=People,dc=testldap,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=Group,dc=testldap,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述
    导入基础数据库

    ldapadd -x -w "root" -D "cn=Manager,dc=testldap,dc=com" -f /root/base.ldif
    
    • 1

    导入用户

    ldapadd -x -w "root" -D "cn=Manager,dc=testldap,dc=com" -f /root/users.ldif
    
    • 1

    导入用户组

    ldapadd -x -w "root" -D "cn=Manager,dc=testldap,dc=com" -f /root/groups.ldif
    
    • 1

    2.5.6 把OpenLDAP用户加入到用户组

    尽管我们已经把用户和用户组信息,导入到OpenLDAP数据库中了。但实际上目前OpenLDAP用户和用户组之间是没有任何关联的。
    如果我们要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置。
    现在我们要把ldapuser1用户加入到ldapgroup1用户组,需要新建添加用户到用户组的ldif文件,如下:

    cat > add_user1_to_groups1.ldif << "EOF"
    dn: cn=ldapgroup1,ou=Group,dc=testldap,dc=com
    changetype: modify
    add: memberuid
    memberuid: ldapuser1
    EOF
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    导入ldif:

    ldapadd -x -w "root" -D "cn=Manager,dc=testldap,dc=com" -f /root/add_user1_to_groups1.ldif
    
    • 1
    ldapadd -x -w "root" -D "cn=Manager,dc=testldap,dc=com" -f /root/add_user2_to_groups2.ldif
    
    • 1

    2.6 开启OpenLDAP日志访问功能

    1. 在slapd.conf中加一行:(路径:/etc/openldap/ldap.conf,应该不是这个因为文件名不一样,由于使用默认日志级别设置,所以本人没配)

      loglevel        4095      //后面会讲到这里为什么是4095 
      
      • 1

      如果未定义olcLogLevel/loglevel属性/指令,则日志默认为256(仅统计信息)

    2. 在/etc/syslog.conf 中加入ldap日志文档:
      (自定义输出路径,本人路径:/home/fxd/ldap/log/ldap.log)

      local4.*                                                /var/log/ldap.log
      
      • 1
    3. 重启syslog及LDAP服务

       systemctl restart slapd 
      
      • 1
    4. 在/var/log/下就可以看到一个ldap.log文件
      (自定义输出路径,本人路径:/home/fxd/ldap/log/ldap.log)

    官方:https://www.zytrax.com/books/ldap/ch6/#loglevel

  • 相关阅读:
    java计算机毕业设计科研团队管理系统MyBatis+系统+LW文档+源码+调试部署
    C++ 继承详解
    中文命名实体识别
    JVM性能调优-二.流程步骤实践
    b=a++和b=++a区别及a=++a、a=a++区别
    零基础可以报考中级经济师吗?需要准备多久?
    【Java多数据源实现教程】实现动态数据源、多数据源切换方式
    docker部署mysql 使用定时器进行备份
    CSS 简介
    【JavaEE初阶】 JUC(java.util.concurrent) 的常见类
  • 原文地址:https://blog.csdn.net/qq_34486648/article/details/127813155