Openldap 添加属性问题

Openldap 添加属性问题

我是 serverfault 的新手,但我已经使用过 google 和 serverfault 搜索,但找不到问题的答案。我需要在 ldap 中添加名为权限的新属性,并能够设置权限级别。

找到了几种“方法”,但都不起作用。卡住了,就像这里一样为 ldap 用户添加新属性并提交给 ldap

dn: cn=core,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: <new value>

dn: cn=core,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.2.3.4.5.6.7 
 NAME ( 'test' 'test' ) 
 DESC 'test' 
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
 SINGLE-VALUE )

但我以最好的方式

modifying entry "cn=core,cn=schema,cn=config"
ldap_modify: No such object (32)
    matched DN: cn=schema,cn=config 

ldap_modify: Invalid syntax (21)
additional info: attributetypes: value #0 normalization failed

或者

ldap_add: Undefined attribute type (17)
    additional info: add: attribute type undefined

我不知道如何添加这个属性:/

因为我必须这样做,所以我仍在尝试(也创建新的服务器)并得到以下结果
dn:cn = config
changetype:添加
olcAttributeTypes:(2.5.4.66 NAME'permission'DESC'RFC2256
:对于Supermicro用户'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255})

ldap_add: Object class violation (65)
additional info: no objectClass attribute

因此添加一个 objectClass
ldap_add:对象类违规(65)
附加信息:对象类“person”需要属性“sn”

现在怎么办?我当然希望该权限成为 person objectclass 的一部分,并且是 MAY,但仍然不知道如何修改 objectclass ldapsearch -H ldap://ldap.ogicom.net -x -s base -b "" + base <> with scope baseObject 的
结果 # filter: (objectclass=*) # requesting: + dn: structureObjectClass:OpenLDAProotDSE configContext:cn=confignamingContexts :privatesupportedControl : 2.16.840.1.113730.3.4.18supportedControl :2.16.840.1.113730.3.4.2supportedControl:1.3.6.1.4.1.4203.1.10.1supportedControl :1.3.6.1.1.22supportedControl :1.2.840.113556.1.4.319supportedControl : 1.2.826.0.1.3344810.2.3 supportedControl: 1.3.6.1.1.13.2 supportedControl: 1.3.6.1.1.13.1 supportedControl: 1.3.6.1.1.12 supportedExtension: 1.3.6.1.4.1.1466.20037 supportedExtension: 1.3.6.1.4.1.4203.1.11.1 supportedExtension: 1.3.6.1.4.1.4203.1.11.3 supportedExtension: 1.3.6.1.1.8 supportedFeatures: 1.3.6.1.1.14 supportedFeatures: 1.3.6.1.4.1.4203.1.5.1 supportedFeatures: 1.3.6.1.4.1.4203.1.5.2 支持的功能:1.3.6.1.4.1.4203.1.5.3 支持的功能:1.3.6.1.4.1.4203.1.5.4 支持的功能:1.3.6.1.4.1.4203.1.5.5 支持的LDAPVersion:3 支持的SASLM 机制:DIGEST-MD5 支持的SASLM 机制:NTLM 支持的SASLM 机制:CRAM-MD5 entryDN: subschemaSubentry:cn=Subschema
































# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

答案1

好吧,让我们稍微清理一下:

  1. ldapmodify都可以创造调整LDAP 树中的节点。此行为由参数 标识changetype。因此,如果您使用changetype: add尝试添加新节点。显然,您需要为该新节点提供一个对象类,因此您会收到错误 ldap_add: Object class violation (65) additional info: no objectClass attribute(由于 dn 已存在,因此此操作仍会失败cn=config)。
  2. 首先,您需要找出哪个节点包含对象类(例如,我的节点cn={0}core,cn=schema,cn=config包含对象类“person”,而“inetOrgPerson”位于cn={3}inetorgperson,cn=schema,cn=config)。第一个 dn 属性(在本例中为“core”或“inetorgperson”)前面的花括号由 OpenLDAP 设置,以确定节点的加载顺序。顺便说一句:这就是您在寻找 cn=core 时收到的原因ldap_modify: No such object (32)...... - 您错过了括号 :)
  3. 对象类和属性类型分别存储在对象类为 的节点中,olcSchemaConfig属性类型为olcObjectClassesolcAttributeTypes。只需查看您的方案(例如ldapsearch -xLLLWD cn=admin,cn=config -b cn=schema,cn=config -s oneldapsearch -xLLLWD cn=admin,cn=config -b cn={0}core,cn=schema,cn=config -s base),您就会知道这是什么样子。因此,请明确您想要做什么:您正在尝试调整一个节点的形式代替olcObjectClasses 的属性之一(以您重新定义它的形式,包括您的属性类型。如果属性类型之前没有定义过,您需要将其添加为olcAttributeTypes同一节点或另一个节点中类型的另一个属性olcSchemaConfig)。您可以使用以下方式执行此操作

dn: cn={0}core,cn=schema,cn=config changetype: modify replace: olcObjectClasses olcObjectClasses: {4}( 2.5.6.6 NAME 'person'...

然而:

你不想这样做。说真的,不要。扰乱现有的类和属性永远不是一个好主意。

相反,有更好的选择,它们更清晰,应该被选择:

  1. 快速方法:创建下一个用户节点时,可以使用结构对象类(例如“人”)并添加辅助的对象类“extensibleObject”混合在一起;这让您添加任何现有属性类型的属性。
  2. 正确的方法:您可以轻松定义自己的对象类。通过这种方式,您可以创建自己的结构类(可以从任何其他对象类继承,并由您的属性扩展),然后您可以将其用作节点仅有的对象类,或者你也可以创建一个辅助的拥有属性的对象类,可用作额外的对象类。如果您选择这种方式,请确保您使用的命名空间(定义中的数字,如“2.5.4.66”)不会与现有类和/或属性冲突。如下所示:

ldapadd -xWD cn=admin,cn=config dn: cn=<schemaName>,cn=schema,cn=config objectClass: olcSchemaConfig cn: <schemaName> olcAttributeTypes: ( <your namespace>.01.01 NAME <attributeTypeName> DESC <description> EQUALITY <equalitySettings> SYNTAX <syntaxSettings> ) olcObjectClasses: ( <your namespace>.02.01 NAME <objectClassName> DESC <description> AUXILIARY MUST <attributeTypeName> )

学习如何处理 cn=config 一开始可能会有点令人困惑,但一旦你理解了它背后的概念,你就会意识到它比以前酷多了。它绝对值得学习。

玩得开心!

答案2

嗯,这不是我的想法,但我有一个答案。我手动做

· 编辑配置文件,

$ vim /etc/ldap/schema/core.schema

· 添加属性类型,

attributetype ( 2.5.4.66 NAME 'permission'

        DESC 'my desc '

        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} )

· 将“permission”添加到对象类“person”

objectclass ( 2.5.6.6 NAME 'person'

        DESC 'RFC2256: a person'

        SUP top STRUCTURAL

        MUST ( sn $ cn )

        MAY ( userPassword $ telephoneNumber $ seeAlso $ description $ permission ) )

· 创建 core.conf 文件

$ vim /etc/ldap/core.conf

· 在 core.conf 中添加以下行

include /etc/ldap/schema/core.schema

· 删除或备份旧的 /etc/ldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif 文件

$ rm /etc/ldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif

· 生成新的 /etc/ldap/slapd.d/cn=config/cn=sch

$ slaptest -f /etc/ldap/core.conf -F /etc/ldap/slapd.d

相关内容