我是 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
好吧,让我们稍微清理一下:
ldapmodify
都可以创造和调整LDAP 树中的节点。此行为由参数 标识changetype
。因此,如果您使用changetype: add
尝试添加新节点。显然,您需要为该新节点提供一个对象类,因此您会收到错误ldap_add: Object class violation (65) additional info: no objectClass attribute
(由于 dn 已存在,因此此操作仍会失败cn=config
)。- 首先,您需要找出哪个节点包含对象类(例如,我的节点
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)
...... - 您错过了括号 :) - 对象类和属性类型分别存储在对象类为 的节点中,
olcSchemaConfig
属性类型为olcObjectClasses
或olcAttributeTypes
。只需查看您的方案(例如ldapsearch -xLLLWD cn=admin,cn=config -b cn=schema,cn=config -s one
或ldapsearch -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'...
然而:
你不想这样做。说真的,不要。扰乱现有的类和属性永远不是一个好主意。
相反,有更好的选择,它们更清晰,应该被选择:
- 快速方法:创建下一个用户节点时,可以使用结构对象类(例如“人”)并添加辅助的对象类“extensibleObject”混合在一起;这让您添加任何现有属性类型的属性。
- 正确的方法:您可以轻松定义自己的对象类。通过这种方式,您可以创建自己的结构类(可以从任何其他对象类继承,并由您的属性扩展),然后您可以将其用作节点仅有的对象类,或者你也可以创建一个辅助的拥有属性的对象类,可用作额外的对象类。如果您选择这种方式,请确保您使用的命名空间(定义中的数字,如“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