小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • LDAP

    • LDAP-概述
    • ocserv 部署
    • OpenLDAP部署
      • FreeIPA 高可用部署
    • Jenkins

    • 技术专题
    • LDAP
    tchua
    2023-07-26
    目录

    OpenLDAP部署

    # 一、前置环境


    • 系统: Centos7.8
    • OpenLDAP: 2.4.44

    # 二、安装部署软件包


    openldap安装其实非常简单,只是使用yum命令就可以完成安装操作。

    # 2.1 yum安装

    执行yum之后 会自动创建一个ldap的用户

    yum install -y openldap openldap-clients openldap-servers compat-openldap openldap-devel
    
    1
    # 2.2 启动

    监听端口389

    systemctl enable slapd
    systemctl start slapd
    
    1
    2

    # 三、openldap配置


    从OpenLDAP 2.4 版本开始,官方推荐使用动态配置(cn=config)及在/etc/openldap/slapd.d目录下的cn=config文件夹内而不是传统的静态配置文件(slapd.conf)。动态配置将数据库配置保存在 LDAP 数据库中,使用动态配置允许管理员在运行时修改服务器配置,而无需重启服务,以便更轻松地进行管理和修改。

    # 3.1 常用管理命令

    查看当前配置,列出 cn=config 数据库中的所有配置项及其 DN

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
    dn: cn=config
    
    dn: cn=schema,cn=config
    
    dn: cn={0}core,cn=schema,cn=config
    
    dn: olcDatabase={-1}frontend,cn=config
    
    dn: olcDatabase={0}config,cn=config
    
    dn: olcDatabase={1}monitor,cn=config
    
    dn: olcDatabase={2}hdb,cn=config
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    添加配置项,此时我们需要先创建一个以.ldif为后缀的文件,然后执行修改命名,这样会动态的把配置新增至cn=config目录下指定的配置文件中

    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f your_ldif_file.ldif
    
    1

    修改配置

    ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f your_ldif_file.ldif
    
    1

    删除配置

    ldapdelete -Q -Y EXTERNAL -H ldapi:/// dn_of_entry_to_delete
    
    1
    # 3.2 配置管理员密码

    生成管理员密码hash值

    # 管理员密码
    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# slappasswd -s 123456
    {SSHA}EP+CWjDM2mwqLdoDvXtAU7OZ+vMvTatE
    
    1
    2
    3

    创建配置,上面我们说过所有的配置 都需要动态修改,因此我们需要先创建一个后缀为.ldif的文件 然后应用

    # vim adminPass.ldif
    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}EP+CWjDM2mwqLdoDvXtAU7OZ+vMvTatE
    
    1
    2
    3
    4
    5

    参数解释

    • dn: olcDatabase={0}config,cn=config: 这是要修改的配置项的 DN(Distinguished Name),表示是 cn=config数据库下(/etc/openldap/slapd.d/cn\=config目录) 的 olcDatabase={0}config 配置。这个配置项指的是 cn=config 数据库的配置,也称为 config 配置。

    • changetype: modify: 表示此 LDIF 文件中包含要进行的修改操作。

    • add: olcRootPW: 表示要添加一个新的属性 olcRootPW(超级用户密码)。

    • olcRootPW: {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/: 这是超级用户密码的哈希值。在这个例子中,密码的哈希值是 {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/,它是一个基于 SSHA 算法的密码哈希值。

    执行命令,执行之后,会在olcDatabase={0}config中新增olcRootPW配置

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f adminPass.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"
    
    1
    2
    3
    4
    5

    image-20230726134234537

    # 3.3 导入默认schema

    在 OpenLDAP 中,自带了一些常用的基本架构(Schema),以支持通用的 LDAP 对象类和属性。这些自带的 Schema 可以在安装 OpenLDAP 后直接使用,无需额外的配置或安装,这些目录位于/etc/openldap/schema/目录下。

    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
    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/duaconf.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.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/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

    常用说明:

    • core: 这是 OpenLDAP 的核心架构,包含了基本的 LDAP 对象类和属性定义。它定义了 LDAP 的基本元素,如 "dc"(域组件)和 "ou"(组织单位)等。这个架构会在安装 OpenLDAP 时自动加载。
    • cosine: 这是 Internet 常见架构之一,它定义了一些通用的对象类和属性,如 "inetOrgPerson"(Internet 组织人员)和 "mail"(电子邮件地址)等。
    • inetorgperson: 这个架构定义了 "inetOrgPerson" 对象类,它扩展了 "organizationalPerson",并增加了一些用于互联网组织的属性,如邮件地址和电话号码等。
    • nis: 这是 Network Information Service (NIS) 架构,用于支持 UNIX/Linux 系统中的 NIS 映射。它定义了一些 NIS 相关的对象类和属性,如 "posixAccount"(UNIX 账户)和 "posixGroup"(UNIX 用户组)等。
    • collective: 这个架构定义了 "collectiveAttribute" 对象类,它用于在集体条目中存储共享属性。集体属性不会直接应用于条目本身,而是在查询时进行合并展示。
    # 3.4 管理域配置

    管理域是指用于存储配置和管理数据的特定域(DIT,Directory Information Tree)。这个域通常被称为配置数据库(cn=config)或管理数据库,它用于存储 OpenLDAP 服务器的运行配置和其他管理信息。配置数据库是一个特殊的数据库,使用动态配置方式,以 LDIF(LDAP Data Interchange Format)的形式存储配置信息。

    准备域名: ldap.tbchip.com,此域名作为根域 ,编辑配置文件时注意空行及缩进

    # 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=admin,dc=ldap,dc=tbchip,dc=com" read 
      by * none
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=ldap,dc=tbchip,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=admin,dc=ldap,dc=tbchip,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootPW
    olcRootPW: {SSHA}kUhPHG2ffoZKzwl/pUxQg6W+WaFwpjQ/
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    # 访问控制规则 只允许登录的用户进行修改自己密码
    olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=ldap01,dc=pwb,dc=com" write by anonymous auth by self write by * none 
    # 访问控制规则 允许所有用户 对根目录有读操作权限
    olcAccess: {1}to dn.base="" by * read
    # 访问控制规则 允许管理员admin用户有操作写权限
    olcAccess: {2}to * by dn="cn=admin,dc=ldap,dc=tbchip,dc=com" write by * read
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    参数说明

    • dn: olcDatabase={2}hdb,cn=config: 这是要修改的配置项的 DN(Distinguished Name),表示是 cn=config 数据库下的 "hdb" 后端数据库配置。这个配置项指的是 hdb后端数据库的配置。

    • changetype: modify: 表示此 LDIF 文件中包含要进行的修改操作。

    • replace: olcSuffix: 表示要替换(修改) "olcSuffix" 属性的值。

    • olcSuffix: dc=ldap,dc=tbchip,dc=com: 这是要将根域(Suffix)修改为的新值。在这个例子中,根域被修改为 "dc=ldap,dc=tbchip,dc=com"。

    • olcAccess:定义了监视数据库的访问控制规则。

    执行命令,应用新配置

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.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"
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 3.5 启用memberof功能

    memberof 功能是 OpenLDAP 中的一个重要模块,它用于处理组成员关系。它提供了一种方便的方法来管理用户和组之间的关系,使得管理用户组和组成员更加简单和高效。

    编辑memberof配置文件,开启memberof支持并新增用户支持memberof配置

    dn: cn=module{0},cn=config
    cn: module{0}
    objectClass: olcModuleList
    objectclass: top
    olcModuleload: memberof.la
    olcModulePath: /usr/lib64/openldap
    
    dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
    objectClass: olcConfig
    objectClass: olcMemberOf
    objectClass: olcOverlayConfig
    objectClass: top
    olcOverlay: memberof
    olcMemberOfDangling: ignore
    olcMemberOfRefInt: TRUE
    olcMemberOfGroupOC: groupOfUniqueNames
    olcMemberOfMemberAD: uniqueMember
    olcMemberOfMemberOfAD: memberOf
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    配置说明
    # 加载 "memberof" 模块
    dn: cn=module{0},cn=config
    # "memberof" 模块的通用名称
    cn: module{0}
    # 模块列表
    objectClass: olcModuleList
    # 条目的最上级
    objectclass: top
    # 加载 "memberof" 模块的配置。memberof.la 是模块的库文件
    olcModuleload: memberof.la
    # 指定 "memberof" 模块的路径
    olcModulePath: /usr/lib64/openldap
    
    # 配置 "memberof" 功能的 overlay,它会添加在 "hdb" 后端数据库上
    dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
    # objectClass 表示 overlay 配置条目 其实就是"memberof" 相关的配置
    objectClass: olcConfig
    objectClass: olcMemberOf
    objectClass: olcOverlayConfig
    objectClass: top
    olcOverlay: memberof
    # "memberof" 功能的具体配置选项
    # ignore 忽略悬挂成员关系,当删除组或用户时,不会检查并更新悬挂的成员关系。
    olcMemberOfDangling: ignore
    # TRUE 开启对成员关系的引用完整性检查,确保 member 和 memberOf 属性保持同步。
    olcMemberOfRefInt: TRUE
    # 指定组对象类为 "groupOfUniqueNames",表示组使用的对象类是 "groupOfUniqueNames"。
    olcMemberOfGroupOC: groupOfUniqueNames
    # 指定成员属性为 "uniqueMember",表示用户条目中使用 "uniqueMember" 属性作为成员。
    olcMemberOfMemberAD: uniqueMember
    # 指定 "memberOf" 属性,表示组条目中使用 "memberOf" 属性存储成员关系。
    olcMemberOfMemberOfAD: memberOf
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    加载refint模块,在 LDAP 中,"refint" 模块通过确保 "member" 和 "memberOf" 属性之间的引用关系保持一致,来实现引用完整性检查。

    # vim mod-refint.ldif
    dn: cn=module{0},cn=config
    add: olcmoduleload
    olcmoduleload: refint
    
    
    1
    2
    3
    4
    5

    "refint" 模块的配置项,以下配置会确保 "memberof"、"uniqueMember"、"manager" 和 "owner" 属性之间的引用关系始终保持一致。如果一个属性的值发生了更改或删除,"refint" 模块会自动更新相关引用,以保持数据的完整性。

    # vim add-refint.ldif
    dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
    objectClass: olcConfig
    objectClass: olcOverlayConfig
    objectClass: olcRefintConfig
    objectClass: top
    olcOverlay: refint
    olcRefintAttribute: memberof uniqueMember  manager owner
    
    1
    2
    3
    4
    5
    6
    7
    8

    依次执行下面命令,加载配置

    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof.ldif
    ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f mod-refint.ldif
    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f  add-refint.ldif
    
    1
    2
    3

    经过以上配置,ldap的配置就算修改完成,接下来我们来使用即可

    # 四、创建组织


    # 4.1 组织

    组织是 LDAP 目录结构中的最顶层单位。它通常代表一个实际的组织、公司或机构,如一个大学、企业、政府机构等。组织在 LDAP 中被表示为 "o"(organization)属性的值。组织是一个可选的顶层条目,它用于对目录进行逻辑划分和命名空间的管理。

    创建 一个losinx组织,并在其下创建一个 admin 的组织角色

    # losin-ou.ldif
    dn: dc=ldap,dc=tbchip,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: losinx
    dc: ldap
     
    dn: cn=admin,dc=ldap,dc=tbchip,dc=com
    objectClass: organizationalRole
    cn: admin
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    执行命令 创建组织,需要注意dc=ldap,dc=tbchip,dc=com配置要对应自己的根域

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D cn=admin,dc=ldap,dc=tbchip,dc=com -W -f losinx-ou.ldif 
    Enter LDAP Password: 
    adding new entry "dc=ldap,dc=tbchip,dc=com"
    
    adding new entry "cn=admin,dc=ldap,dc=tbchip,dc=com"
    
    1
    2
    3
    4
    5
    # 4.2 组织单元

    组织单元是 LDAP 目录结构中的一个较低层级的单位。它用于更细粒度地划分和组织目录中的条目。组织单元在 LDAP 中被表示为 "ou"(organizational unit)属性的值。组织单元是一个可选的条目,用于更好地组织和管理目录中的条目。

    创建Groups和Users组织单元

    dn: ou=Groups,dc=ldap,dc=tbchip,dc=com
    objectClass: organizationalUnit
    ou: Groups
    
    dn: ou=Users,dc=ldap,dc=tbchip,dc=com
    objectClass: organizationalRole
    cn: Users
    
    1
    2
    3
    4
    5
    6
    7

    执行命令

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D cn=admin,dc=ldap,dc=tbchip,dc=com -W -f losinx-ou.ldif 
    Enter LDAP Password: 
    adding new entry "ou=Groups,dc=ldap,dc=tbchip,dc=com"
    
    adding new entry "ou=Users,dc=ldap,dc=tbchip,dc=com"
    
    1
    2
    3
    4
    5

    说明

    通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中dc=ldap,dc=tbchip,dc=com是该树的根节点,其下有一个管理域 cn=admin,dc=ldap,dc=tbchip,dc=com和两个组织单元 ou=Users,dc=ldap,dc=tbchip,dc=com及 ou=Groups,dc=ldap,dc=tbchip,dc=com

    # 五、用户及组管理


    # 5.1 创建用户

    为用户生成密码hash值

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# slappasswd -s 123456
    {SSHA}Iu1xMEVDhljSoipHz3ovsIxfirdXmGAm
    
    1
    2

    编辑用户文件,添加一个tchua的用户,在名为Public的ou下

    # vim tchua-user.ldif
    dn: cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com
    objectClass: inetOrgPerson
    cn: tchua
    sn: Hua
    userPassword: {SSHA}Iu1xMEVDhljSoipHz3ovsIxfirdXmGAm
    
    1
    2
    3
    4
    5
    6

    执行命令添加用户

    [root@iZuf6e7po5t1w13q6mtt4lZ ~]# ldapadd -x -D "cn=admin,dc=ldap,dc=tbchip,dc=com" -W -f tchua-user.ldif 
    Enter LDAP Password: 
    adding new entry "cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com"
    
    1
    2
    3
    # 5.2 创建组

    编辑创建组文件,添加一个用户组名为wms的cn,在名为Public的ou下,并把上面的tchua用户加如该组

    # vim wms-group.ldif
    dn: cn=wms,ou=Groups,dc=ldap,dc=tbchip,dc=com
    changetype: add
    add: cn
    cn: wms
    objectClass: groupOfUniqueNames
    uniqueMember: cn=tchua,ou=Users,dc=ldap,dc=tbchip,dc=com
    
    1
    2
    3
    4
    5
    6
    7

    # 六、图形化


    OpenLDAP我们可以把它当做数据库,没有酷炫的图形界面的,这种反人类的设计真的不是给人用的,虽然也有图形化的工具,但是也丑的不行且不好用,接下来我们介绍下使用最多的phpLDAPadmin图形化的工具。

    # 6.1 yum安装
    yum install -y phpldapadmin
    
    1
    # 6.2 修改配置

    上面安装后,会使用apache服务提供web服务,我们需要修改下相关配置

    # vim /etc/httpd/conf.d/phpldapadmin.conf
     <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
      </IfModule>
    
    1
    2
    3
    4
    5
    # 6.3 修改登录配置
    # 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名
    $servers->setValue('login','attr','cn');
      
    # 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
    # 打开注释,修改为false
    $servers->setValue('login','anon_bind',false);
      
    # 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性
    $servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 6.4 启动访问
    systemctl enable httpd
    systemctl start httpd
    
    1
    2

    浏览器输入: 服务器IP/ldapadmin,使用开始创建的admin/123456登录即可

    image-20230726160548350

    # 6.5 创建用户
    • 创建组tchua001

    image-20230726161722515

    image-20230726161804681

    image-20230726161857983

    • 创建用户

    image-20230726162349540

    image-20230726162648725

    编辑 (opens new window)
    #LDAP
    上次更新: 2023/07/26, 16:27:16
    ocserv 部署
    FreeIPA 高可用部署

    ← ocserv 部署 FreeIPA 高可用部署→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式