我们原有的 OpenLDAP 环境中有一些条目,例如“经理”,这些条目应该始终存在,但却缺失了。如果经理字段存在且正确,则它包含负责该属性人员的人员的 OU。缺失的条目似乎是由于创建帐户的流程不一致造成的。我正在寻找一种方法来强制执行某物在那个 Manager 属性中。这可能是错误的,但那是另一回事。我想至少确保有一个条目,即使它是“需要管理器”。想法?建议?我是 LDAP 的业余爱好者,继承了这个烂摊子,所以请放轻松!
答案1
这是通过目录架构– 条目的objectClass
定义。每个 objectClass 的主要目的是指定哪些属性是必需的,哪些属性是可选但允许的。
例如,这是内置的 /etc/ldap/schema/core.schema 定义person
类的方式——标记属性“cn”和“sn/surname”(但奇怪的是没有“gn/givenName”)对于具有以下内容的每个条目是强制性的objectClass: person
:
objectclass ( 2.5.6.6 NAME 'person'
DESC 'RFC2256: a person'
SUP top
STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
因此,如果您的帐户条目已经定义了自定义对象类,只需将所需的属性添加到MUST
该类模式定义的列表中(最好在批量更新所有条目以实际具有该属性之后)。
但我不建议修改“标准”对象类定义(尽管可以这样做)。相反,如果您的帐户条目还没有自定义对象类,您可能需要创造一个并开始在任何地方使用它。(最有可能的是作为从您当前正在使用的任何内容派生的“结构”类。)
尽管您仍然需要一种方法来强制使用它objectClass
...(我记得 OpenLDAP 具有强制执行哪些 objectClasses 可以在哪些子树下使用的能力,但现在似乎找不到它。)
请注意,在默认的 OpenLDAP 架构中(余弦),manager
不是“字符串”属性 - 它被明确定义为包含 DN 值。这意味着Needs a manager
不会被接受为有效值。
如果你需要占位符,你需要使用类似的cn=Needs a manager
东西看起来就像一个 DN,即使它不存在。