OpenLDAP添加自定义属性

1 篇文章 0 订阅
1 篇文章 0 订阅

目录

知识准备

1. Objectclass

2. Attribute

3. Syntax

4. Matching Rules

前言

操作步骤

1. 首先使用docker进入容器内部

2. 在服务器任意位置创建目录,例如我在根目录下创建myldap

3. 然后进入到myldap目录下创建schema文件,例如名字为test.schema 

 3.1 内容说明

4.进入myldap目录下创建conf文件,例如名字为test.conf

 5. 执行slaptest命令编译自定义的schema,生成ldif等文件

6. 修改生成文件

        修改前文件内容       ​

        修改后文件内容

7. 执行 slapadd命令,将该文件添加进OpenLdap库

8. 查看新添加的objectclass为营的ldif文件

9. 文件复权并重启ldap服务

10. 通过工具Apache Directory Studio查看是否导入自定义属性

11. 参考博客


知识准备

        Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等,schema给LDAP服务器提供了LDAP目录中类别,属性等信息的识别方式,让这些 可以被LDAP服务器识别。


在LDAP的schema中,有四个重要的元素:

1. Objectclass

        objectclass定义了一个类别,这个类别会被不同的目录(在LDAP中就是一个Entry)用到,它说明了该目录应该有哪些属性,哪些属性是必须 的,哪些又是可选的。一个objectclass的定义包括名称(NAME),说明(DESC),类型(STRUCTURAL或AUXILARY ,表示是结构型的还是辅助型的),必须属性(MUST),可选属性(MAY)等信息。

2. Attribute

         attribute就是一个上面objectclass中可能包含的属性,对其的定义包括名称,数据类型,单值还是多值以及匹配规则等。后面用具体的例子来说明。

3. Syntax

        syntax是LDAP中的“语法”,其实就是LDAP中会用到的数据类型和数据约束,这个语法是遵从X.500中数据约束的定义的。其定义需要有一个ID(遵从X.500)以及说明(DESP)

4. Matching Rules

        是用来指定某属性的匹配规则,实际上就是定义一个特殊的Syntax的别名,让LDAP服务器可以识别,并对定义的属性进行匹配

很多常用schema的定义都在了RFC2252中,LDAP服务器都应该支持这些基本的schema。下面进行定义自己的schema。

前言

        由于OpenLDAP本身包含的属性有限,不能满足实际生产需求,因此考虑自定义部分属性来满足业务上的需要,此文也在参考其他博客的基础上进行总结编写,以此记录下实际操作过程,参考博文在文章最后有标出

操作步骤

本人使用的是docker安装的OpenLDAP       

docker run -p 389:389 ^
--name myopenldap ^
--network bridge ^
--hostname openldap-host ^
--env LDAP_ORGANISATION="XXX" ^
--env LDAP_DOMAIN="XXX.com" ^
--env LDAP_ADMIN_PASSWORD="ldap123" ^
--detach osixia/openldap


配置LDAP组织者:--env LDAP_ORGANISATION="mylitboy"
配置LDAP域:--env LDAP_DOMAIN="mylitboy.com"
配置LDAP密码:--env LDAP_ADMIN_PASSWORD="ldap123"
默认登录用户名:admin

OpenLDAP版本:2.4.57

查看OpenLDAP版本命令:
slapd -V

1. 首先使用docker进入容器内部

docker exec -it 你的容器id bash

2. 在服务器任意位置创建目录,例如我在根目录下创建myldap

3. 然后进入到myldap目录下创建schema文件,例如名字为test.schema 

注:docker下默认没有vi和vim编辑器,记得安装,不会的百度一下

vim test.schema

在test.schema中输入内容

attributetype (
    3.2.2.1.1
    NAME 'myId'
    DESC '我测试的id'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SINGLE-VALUE )
attributetype (
    3.2.2.1.2
    NAME 'myName'
    DESC '我测试的名称'
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SINGLE-VALUE )
objectClass (
    3.2.2.1.3
    NAME 'myObjectClass'
	DESC '我测试的objectClass'
    SUP inetOrgPerson STRUCTURAL
    MAY ( myId $ myName ))

 3.1 内容说明

        以上创建了myId和myName两个属性,和myObjectClass一个类别,myObjectClass类别下包含myId和myName两个属性

        第一个参数

                第一个参数是oid,oid必须且唯一,不重复就好

        NAME:

                你需要定义的属性名称

        DESC:

                属性的描述

        SYNTAX:

                表示的数据类型,可参考如下表格

NameOIDDescription
boolean1.3.6.1.4.1.1466.115.121.1.7boolean value
directoryString1.3.6.1.4.1.1466.115.121.1.15Unicode (UTF-8) string
distinguishedName1.3.6.1.4.1.1466.115.121.1.12LDAP DN
integer1.3.6.1.4.1.1466.115.121.1.27integer
numericString1.3.6.1.4.1.1466.115.121.1.36numeric string
OID1.3.6.1.4.1.1466.115.121.1.38object identifier
octetString1.3.6.1.4.1.1466.115.121.1.40arbitrary octets

         EQUALITY:

                约束规则,参考如下表格

NameTypeDescription
booleanMatchequalityboolean
caseIgnoreMatchequalitycase insensitive, space insensitive
caseIgnoreOrderingMatchorderingcase insensitive, space insensitive
caseIgnoreSubstringsMatchsubstringscase insensitive, space insensitive
caseExactMatchequalitycase sensitive, space insensitive
caseExactOrderingMatchorderingcase sensitive, space insensitive
caseExactSubstringsMatchsubstringscase sensitive, space insensitive
distinguishedNameMatchequalitydistinguished name
integerMatchequalityinteger
integerOrderingMatchorderinginteger
numericStringMatchequalitynumerical
numericStringOrderingMatchorderingnumerical
numericStringSubstringsMatchsubstringsnumerical
octetStringMatchequalityoctet string
octetStringOrderingMatchorderingoctet string
octetStringSubstringsMatchorderingoctet st ring
objectIdentiferMatchequalityobject identifier

SUBSTR caseIgnoreSubstringsMatch

                表示支持模糊查询        

SINGLE-VALUE:

                表示这个属性只有一个值,有些属性可以有多个值,比如地址等。默认是多值的。

        SUP:

                继承的父类别,父类别可以在已有的ObjectClass中查找,使用Apache Directory Studio查看如下,可以在其中搜索

                SUP top:后续只会生成一个ldif文件

 

        MAY:

                必须属性(MUST),可选属性(MAY)

4.进入myldap目录下创建conf文件,例如名字为test.conf

vim test.conf

在test.conf中输入如下内容

参考自己OpenLDAP安装的路径,这个是inetorgperson类别需要的schema,如果SUP是top,则下面三行不需要引入
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
即引入上步骤创建的schema文件
include /myldap/test.schema

 5. 执行slaptest命令编译自定义的schema,生成ldif等文件

slaptest -f /myldap/test.conf -F /myldap

6. 修改生成文件

        执行完后,会在myldap目录下方生成cn=config和cn=config.ldif目录,再进入cn=config/cn=schema目录下可以查到生成的多个ldif文件

        多个ldif文件中的cn={3}test.ldif就是我们需要的文件,需要将它重命名,并修改其中的cn和dn(ldif文件中对空格等元素有严格要求,请不要额外添加空格等其他不必要的元素)

        修改前文件内容       

        修改后文件内容

                重命名

mv cn\=\{3\}test.ldif myObjectClass.ldif

                 修改文件

7. 执行 slapadd命令,将该文件添加进OpenLdap库

slapadd -l /myldap/cn=config/cn=schema/myObjectClass.ldif -n 0

如图正常不报错即成功了

        要注意是否有提示属性重复或者oid重复,如果提示报错需要修改schema后再次编译。

较为常见的错误是提示你属性重复或者oid重复,此时最好重新修改schema文件然后再次编译。

8. 查看新添加的objectclass为营的ldif文件

        完成以上步骤就可以在路径/etc/ldap/slapd.d/cn=config/cn=schema(根据自己的安装路径确定)看到文件了

9. 文件复权并重启ldap服务

         直接重启服务会报错,需要给/etc/openldap/slapd.d/cn=config/cn=schema赋权

chmod -R 777 /etc/ldap/slapd.d/cn=config/cn=schema

        重启服务

docker stop 容器id
docker restart 容器id

10. 通过工具Apache Directory Studio查看是否导入自定义属性

 

 


 

11. 参考博客

OpenLDAP自定义Schema_芒果黑的博客-CSDN博客

OpenLDAP添加自定义objectClass实现添加自定义属性 - 快乐肥宅 - 博客园

OpenLDAP添加自定义属性_雷炎氏的博客-CSDN博客

关于openldap加inetorgperson.schema报错的问题_wangpeng_新浪博客

windows docker 命令行无法粘贴解决方案-PHP-jkloozx博客

 Openldap命令详解 - 大胖猴 - 博客园

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值