在LDAP的schema中,有四个重要的元素:
attribute就是一个上面objectclass中可能包含的属性,对其的定义包括名称,数据类型,单值还是多值以及匹配规则等。后面用具体的例子来说明。
syntax是LDAP中的“语法”,其实就是LDAP中会用到的数据类型和数据约束,这个语法是遵从X.500中数据约束的定义的。其定义需要有一个ID(遵从X.500)以及说明(DESP)
是用来指定某属性的匹配规则,实际上就是定义一个特殊的Syntax的别名,让LDAP服务器可以识别,并对定义的属性进行匹配
很多常用schema的定义都在了RFC2252中,LDAP服务器都应该支持这些基本的schema。下面进行定义自己的schema。
由于OpenLDAP本身包含的属性有限,不能满足实际生产需求,因此考虑自定义部分属性来满足业务上的需要,此文也在参考其他博客的基础上进行总结编写,以此记录下实际操作过程,参考博文在文章最后有标出
本人使用的是docker安装的OpenLDAP
docker run -p 3:3 ^
--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
docker exec -it 你的容器id bash
注: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 ))
以上创建了myId和myName两个属性,和myObjectClass一个类别,myObjectClass类别下包含myId和myName两个属性
第一个参数:
第一个参数是oid,oid必须且唯一,不重复就好
NAME:
你需要定义的属性名称
DESC:
属性的描述
SYNTAX:
表示的数据类型,可参考如下表格
Name | OID | Description |
---|---|---|
boolean | 1.3.6.1.4.1.1466.115.121.1.7 | boolean value |
directoryString | 1.3.6.1.4.1.1466.115.121.1.15 | Unicode (UTF-8) string |
distinguishedName | 1.3.6.1.4.1.1466.115.121.1.12 | LDAP DN |
integer | 1.3.6.1.4.1.1466.115.121.1.27 | integer |
numericString | 1.3.6.1.4.1.1466.115.121.1.36 | numeric string |
OID | 1.3.6.1.4.1.1466.115.121.1.38 | object identifier |
octetString | 1.3.6.1.4.1.1466.115.121.1.40 | arbitrary octets |
EQUALITY:
约束规则,参考如下表格
Name | Type | Description |
---|---|---|
booleanMatch | equality | boolean |
caseIgnoreMatch | equality | case insensitive, space insensitive |
caseIgnoreOrderingMatch | ordering | case insensitive, space insensitive |
caseIgnoreSubstringsMatch | substrings | case insensitive, space insensitive |
caseExactMatch | equality | case sensitive, space insensitive |
caseExactOrderingMatch | ordering | case sensitive, space insensitive |
caseExactSubstringsMatch | substrings | case sensitive, space insensitive |
distinguishedNameMatch | equality | distinguished name |
integerMatch | equality | integer |
integerOrderingMatch | ordering | integer |
numericStringMatch | equality | numerical |
numericStringOrderingMatch | ordering | numerical |
numericStringSubstringsMatch | substrings | numerical |
octetStringMatch | equality | octet string |
octetStringOrderingMatch | ordering | octet string |
octetStringSubstringsMatch | ordering | octet st ring |
objectIdentiferMatch | equality | object identifier |
SUBSTR caseIgnoreSubstringsMatch
表示支持模糊查询
SINGLE-VALUE:
SUP:
继承的父类别,父类别可以在已有的ObjectClass中查找,使用Apache Directory Studio查看如下,可以在其中搜索
SUP top:后续只会生成一个ldif文件
MAY:
必须属性(MUST),可选属性(MAY)
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
slaptest -f /myldap/test.conf -F /myldap
多个ldif文件中的cn={3}test.ldif就是我们需要的文件,需要将它重命名,并修改其中的cn和dn(ldif文件中对空格等元素有严格要求,请不要额外添加空格等其他不必要的元素)
重命名
mv cn\=\{3\}test.ldif myObjectClass.ldif
修改文件
slapadd -l /myldap/cn=config/cn=schema/myObjectClass.ldif -n 0
如图正常不报错即成功了
要注意是否有提示属性重复或者oid重复,如果提示报错需要修改schema后再次编译。
较为常见的错误是提示你属性重复或者oid重复,此时最好重新修改schema文件然后再次编译。
完成以上步骤就可以在路径/etc/ldap/slapd.d/cn=config/cn=schema(根据自己的安装路径确定)看到文件了
直接重启服务会报错,需要给/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
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务