18.12. 检查条目上的访问权限权利(获得有效的权利)


查找用户对特定条目内属性的访问权限,可方便管理员查找和控制访问权限。
获取有效权限 是扩展目录搜索的方法,以显示哪些访问权限,如读取、搜索、写入和自我写入、添加和删除 - 用户对指定条目必须具有哪些访问权限。
在目录服务器中,普通用户可以检查其能查看的条目的权限,并可检查其他人员对个人条目的访问。Directory Manager 可以检查一个用户通过另一个用户的权限。
在两种常见情况下,检查条目的有效权限很有用:
  • 管理员可以使用 get valid rights 命令来更好地组织目录的访问控制指令。通常需要限制一组用户可以查看或编辑另一组。例如,QA Managers 组的成员可能有权限搜索并读 managersalary 等属性,当只有 HR Group 的成员有权限修改或删除它们。检查用户或组的有效权限是验证是否放置了适当的访问控制的方法。
  • 用户可以运行 get valid rights 命令,以查看他可以查看或修改其个人条目的属性。例如,用户应具有对 homePostalAddresscn 等属性的访问权限,但可能只能具有 managersalary 属性的读取访问权限。
getEffectiveRights 搜索中涉及三个实体。第一个是 请求者,这是发出 getEffectiveRights 搜索操作时的身份验证条目。第二个是评估其权限的主体,它被定义为 GER 控制中的 授权 DN第三个是 目标,它由请求的搜索基础、搜索过滤器和属性列表定义。

18.12.1. 通过 Get Effective Rights Search 显示权利

在命令行中搜索时,任何 get valid 权限搜索都会显示请求者对目标条目必须具有的权利。
任何条目都允许两种访问权限。第一个权限是条目本身的高级别 权限,即用户 A 可以作为一个整体对 User B 的条目执行的操作。第二级的访问权限更为细致,显示了 给定属性 User A 具有哪些权限。在这种情况下,用户 A 可能会对同一条目中不同属性有不同的访问权限。用户允许的任何访问控制都是该条目的 有效权限
例如:
entryLevelRights: vadn
attributeLevelRights: givenName:rscWO, sn:rscW, objectClass:rsc, uid:rsc, cn:rscW
表 18.2 “条目权利” 表 18.3 “属性 Rights”表 18.3 “属性 Rights” 显示对条目和属性的访问权限,分别由 get valid 权限搜索来返回。
Expand
表 18.2. 条目权利
权限 描述
a 添加一个条目。
d 删除此条目。
n 重命名 DN。
v 查看条目。
Expand
表 18.3. 属性 Rights
权限 描述
r 读取.
s 搜索.
w 写(mod-add)。
o Obliterate (mod-del).与删除类似。
c 比较.
W 自我写入。
O 自我删除。

18.12.3. GER 搜索示例

运行 GER 搜索的方法有多种,具体取决于需要返回的信息类型,以及要搜索的条目和属性类型。

18.12.3.1. 检查访问权利的常规示例

有效权限搜索的一个常见场景是,普通用户确定他可以对个人条目进行哪些更改。
例如,Ted Morris 想要检查其条目必须具有的权限。-D-E 选项都将其条目作为请求者提供。由于他正在检查其个人条目,因此 the -b 选项还包含其 DN。

例 18.36. 检查个人权利(用户 A 到用户 A)

# ldapsearch -x -p 389 -h server.example.com -D "uid=tmorris,ou=people,dc=example,dc=com" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=tmorris,ou=people,dc=example,dc=com' "(objectClass=*)"

 dn: uid=tmorris,ou=People,dc=example,dc=com
 givenName: Ted
 sn: Morris
 ou: IT
 ou: People
 l: Santa Clara
 manager: uid=jsmith,ou=People,dc=example,dc=com
 roomNumber: 4117
 mail: tmorris@example.com
 facsimileTelephoneNumber: +1 408 555 5409
 objectClass: top
 objectClass: person
 objectClass: organizationalPerson
 objectClass: inetOrgPerson
 uid: tmorris
 cn: Ted Morris
 userPassword: {SSHA}bz0uCmHZM5b357zwrCUCJs1IOHtMD6yqPyhxBA==
 entryLevelRights: v
 attributeLevelRights: givenName:rsc, sn:rsc, ou:rsc, l:rsc, manager:rsc, roomNumber:rscwo, mail:rscwo, facsimileTelephoneNumber:rscwo, objectClass:rsc, uid:rsc, cn:rsc, userPassword:wo
例如,Ted Morris 可能是经理或工作,他必须编辑其他用户的条目,如 IT 或人力资源。在这种情况下,他可能希望检查自己对另一个用户条目的权利,如 例 18.37 “通过另一个用户个人检查一个用户的权利(用户 A 到用户 B)”,其中 Ted (-D)检查其权限(-E) to Dave Miller 的条目(-b):

例 18.37. 通过另一个用户个人检查一个用户的权利(用户 A 到用户 B)

# ldapsearch -p 389 -h server.example.com -D "uid=tmorris,ou=people,dc=example,dc=com" -W -b "uid=dmiller,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=tmorris,ou=people,dc=example,dc=com' "(objectClass=*)"

dn: uid=dmiller,ou=People,dc=example,dc=com
...
entryLevelRights: vad
attributeLevelRights: givenName:rscwo, sn:rscwo, ou:rscwo, l:rscwo, manager:rsc, roomNumber:rscwo, mail:rscwo, facsimileTelephoneNumber:rscwo, objectClass:rscwo, uid:rscwo, cn:rscwo, userPassword:rswo
对于所有属性,Ted Morris 对 Dave Miller 的条目具有读取、搜索、比较、修改和删除权限。这些结果与检查 Ted Morris 对自己条目的访问所返回的结果不同,因为他个人仅具有读取、搜索和比较这些属性的权限。
Directory Manager 能够检查一个用户通过另一个用户条目的权限。在 例 18.38 “目录管理器通过另一个用户检查一个用户的权利(用户 A 到用户 B)” 中,目录管理器正在检查管理器 Jane Smith (-E)的权限,它有超过她的子公司 Ted Morris (-b):

例 18.38. 目录管理器通过另一个用户检查一个用户的权利(用户 A 到用户 B)

# ldapsearch -p 389 -h server.example.com -D "cn=Directory Manager" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=jsmith,ou=people,dc=example,dc=com' "(objectClass=*)"

dn: uid=tmorris,ou=People,dc=example,dc=com
...
entryLevelRights: vadn
attributeLevelRights: givenName:rscwo, sn:rscwo, ou:rscwo, l:rscwo, manager:rscwo, roomNumber:rscwo, mail:rscwo, facsimileTelephoneNumber:rscwo, objectClass:rscwo, uid:rscwo, cn:rscwo, userPassword:rscwo
只有管理员可以检索不同用户对条目具有的有效权限。如果 Ted Morris 试图确定 Dave Miller 的条目的权限,则他会收到一个不足的访问错误:
# ldapsearch -p 389 -h server.example.com -D "uid=dmiller,ou=people,dc=example,dc=com" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=tmorris,ou=people,dc=example,dc=com' "(objectClass=*)"

ldap_search: Insufficient access
ldap_search: additional info: get-effective-rights: requester has no g permission on the entry
但是,普通用户可以运行 get valid 权限,以查看其他用户对个人条目具有哪些权利。在 例 18.39 “检查 Rights someone Else Has to a Personal Entry” 中,Ted Morris 检查 Dave Miller 在 Ted Morris 条目中有什么权限。

例 18.39. 检查 Rights someone Else Has to a Personal Entry

# ldapsearch -p 389 -h server.example.com -D "uid=tmorris,ou=people,dc=example,dc=com" -W -b "uid=tmorris,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=dmiller,ou=people,dc=example,dc=com' "(objectClass=*)"

dn: uid=tmorris,ou=people,dc=example,dc=com
...
entryLevelRights: v
attributeLevelRights: givenName:rsc, sn:rsc, ou:rsc, l:rsc,manager:rsc, roomNumber:rsc, mail:rsc, facsimileTelephoneNumber:rsc, objectClass:rsc, uid:rsc, cn:rsc, userPassword:none
在这种情况下,Dave Miller 有权查看条目的 DN,并可以读取、搜索并比较 ougivenNamel 和其他属性,以及对 userPassword 属性没有权利。
默认情况下,不会为没有值的条目中的属性提供信息;例如,如果删除了 userPassword 值,则以后对条目的有效权限搜索不会返回 userPassword 的任何有效权限,即使可以允许自助和自我删除权限。
使用带有适当权限的、带有星号 (*) 的搜索会返回条目可用的每个属性,包括条目上未设置的属性。

例 18.40. 为 Non-Existent 属性返回 Effective Rights

# ldapsearch -D "cn=Directory Manager" -W -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "*"  

dn: uid=scarter,ou=People,dc=example,dc=com
givenName: Sam
telephoneNumber: +1 408 555 4798
sn: Carter
ou: Accounting
ou: People
l: Sunnyvale
manager: uid=dmiller,ou=People,dc=example,dc=com
roomNumber: 4612
mail: scarter@example.com
facsimileTelephoneNumber: +1 408 555 9700
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: scarter
cn: Sam Carter
userPassword: {SSHA}Xd9Jt8g1UsHC8enNDrEmxj3iJPKQLItlDYdD9A==
entryLevelRights: vadn
attributeLevelRights: objectClass:rscwo, aci:rscwo, sn:rscwo, cn:rscwo, description:rscwo, seeAlso:rscwo, telephoneNumber:rscwo, userPassword:rscwo, destinationIndicator:rscwo, facsimileTelephoneNumber:rscwo, internationaliSDNNumber:rscwo, l:rscwo, ou:rscwo, physicalDeliveryOfficeName:rscwo, postOfficeBox:rscwo, postalAddress:rscwo, postalCode:rscwo, preferredDeliveryMethod:rscwo, registeredAddress:rscwo, st:rscwo, street:rscwo, teletexTerminalIdentifier:rscwo, telexNumber:rscwo, title:rscwo, x121Address:rscwo, audio:rscwo, businessCategory:rscwo, carLicense:rscwo, departmentNumber:rscwo, displayName:rscwo, employeeType:rscwo, employeeNumber:rscwo, givenName:rscwo, homePhone:rscwo, homePostalAddress:rscwo, initials:rscwo, jpegPhoto:rscwo, labeledUri:rscwo, manager:rscwo, mobile:rscwo, pager:rscwo, photo:rscwo, preferredLanguage:rscwo, mail:rscwo, o:rscwo, roomNumber:rscwo, secretary:rscwo, uid:rscwo,x500UniqueIdentifier:rscwo, userCertificate:rscwo, userSMIMECertificate:rscwo, userPKCS12:rscwo
所有可用于条目的属性(如 secretary )都已列出,即使该属性不存在。
进一步执行与属性相关的 GER 搜索,可以搜索特定属性和一组属性的权限,并列出条目上设置的一个对象类可用的所有属性。
第 18.12.2 节 “Get Effective Rights Search 的格式” 中格式示例中列出的其中一个选项是 attributeList。要只返回特定属性的有效权限,请在 search 命令的末尾列出以空格分开的属性。

例 18.41. 获取特定属性的有效权利结果

# ldapsearch -D "cn=Directory Manager" -W -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" cn mail initials  

dn: uid=scarter,ou=People,dc=example,dc=com
cn: Sam Carter
mail: scarter@example.com
entryLevelRights: vadn
attributeLevelRights: cn:rscwo, mail:rscwo, initials:rscwo
可以在 attributeList 中指定不存在的属性,就像 例 18.41 “获取特定属性的有效权利结果” 中的 initials 属性一样,查看可用权限,类似于使用星号来列出所有属性。
Directory Manager 也可以列出特定对象类所有可用属性的权限。此选项具有格式 attribute@objectClass。这会返回两个条目,第一个用于指定的 GER 主题,第二个用于对象类的模板条目。

例 18.42. 为对象类中的属性获得有效的权利结果

# ldapsearch -D "cn=Directory Manager" -W -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" uidNumber@posixAccount   
...
dn: cn=template_posixaccount_objectclass,uid=scarter,ou=people,dc=example,dc=com
uidnumber: (template_attribute)
entryLevelRights: v
attributeLevelRights: uidNumber:rsc
注意
只有在请求者(-D)是目录管理器时,使用搜索格式 attribute@objectClass 才可用。
使用星号(*)而不是一个特定的属性,会返回特定 GER 主题的所有属性(包括存在的和不存在的),以及对象类模板的完整属性。

例 18.43. 为对象类的所有属性获得有效的权利结果

# ldapsearch -D "cn=Directory Manager" -W -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" *@posixaccount   
...
dn: cn=template_posixaccount_objectclass,uid=scarter,ou=people,dc=example,dc=com 
objectClass: posixaccount 
objectClass: top 
homeDirectory: (template_attribute) 
gidNumber: (template_attribute) 
uidNumber: (template_attribute) 
uid: (template_attribute) 
cn: (template_attribute) 
entryLevelRights: v 
attributeLevelRights: cn:rsc, uid:rsc, uidNumber:rsc, gidNumber:rsc, homeDirectory:rsc, objectClass:rsc, userPassword:none, loginShell:rsc, gecos:rsc, description:rsc, aci:rsc
管理员可能希望根据现有的访问控制规则,检查特定用户(jsmith)必须具有不存在的用户的权限。要检查不存在的条目,服务器会在该子树中生成一个模板条目。例如,要检查模板条目 cn=joe new user,cn=accounts,ou=people,dc=example,dc=com,服务器会创建 cn=template,cn=accounts,ou=people,dc=example,dc=com
若要检查不存在的条目,get 有效权限搜索可以使用指定的对象类来生成具有(不存在)条目的所有潜在属性的模板条目。对于 cn=joe new user,cn=accounts,ou=people,dc=example,dc=com,带有 个人 对象类(@person),服务器会生成 cn=template_person_objectclass,cn=accounts,ou=people,dc=example,dc=com
当服务器创建模板条目时,它使用对象类定义中的第一个 MUST 属性来创建 RDN 属性(如果没有 MUST 属性,则使用 MAY)。但是,这可能会导致不正确的 RDN 值,反过来违反或绕过为给定子树建立 ACI。在这种情况下,可以通过将 RDN 值与对象类传递来指定要使用的 RDN 值。它的格式是 @objectclass:rdn_attribute
例如,要检查不存在的 Posix 条目的权利,并将 uidNumber 作为其 RDN:
# ldapsearch -D "cn=Directory Manager" -W -b "ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" @posixaccount:uidnumber

dn: uidNumber=template_posixaccount_objectclass,ou=people,dc=example,dc=com
entryLevelRights: v
attributeLevelRights: description:rsc, gecos:rsc, loginShell:rsc, userPassword
 :rsc, objectClass:rsc, homeDirectory:rsc, gidNumber:rsc, uidNumber:rsc, uid:
 rsc, cn:rsc

18.12.3.5. 获取有效权利搜索操作属性的示例

常规 ldapsearches 中不会返回操作属性,包括获取有效的权限搜索。要返回操作属性的信息,请使用加号(+)。这只返回条目中可以使用的操作属性。

例 18.44. 获取操作属性的高效权利结果

# ldapsearch -D "cn=Directory Manager" -W -x -b "uid=scarter,ou=people,dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "+"  

dn: uid=scarter,ou=People,dc=example,dc=com
entryLevelRights: vadn
attributeLevelRights: nsICQStatusText:rscwo, passwordGraceUserTime:rscwo, pwdGraceUserTime:rscwo, nsYIMStatusText:rscwo, modifyTimestamp:rscwo, passwordExpWarned:rscwo, pwdExpirationWarned:rscwo, entrydn:rscwo, aci:rscwo, nsSizeLimit:rscwo, nsAccountLock:rscwo, passwordExpirationTime:rscwo, entryid:rscwo, nsSchemaCSN:rscwo, nsRole:rscwo, retryCountResetTime:rscwo, ldapSchemas:rscwo, nsAIMStatusText:rscwo, copiedFrom:rscwo, nsICQStatusGraphic:rscwo, nsUniqueId:rscwo, creatorsName:rscwo, passwordRetryCount:rscwo, dncomp:rscwo, nsTimeLimit:rscwo, passwordHistory:rscwo, pwdHistory:rscwo, nscpEntryDN:rscwo, subschemaSubentry:rscwo, nsYIMStatusGraphic:rscwo, hasSubordinates:rscwo, pwdpolicysubentry:rscwo, nsAIMStatusGraphic:rscwo, nsRoleDN:rscwo, createTimestamp:rscwo, accountUnlockTime:rscwo, copyingFrom:rscwo, nsLookThroughLimit:rscwo, nsds5ReplConflict:rscwo, modifiersName:rscwo, parentid:rscwo, passwordAllowChangeTime:rscwo, nsBackendSuffix:rscwo, nsIdleTimeout:rscwo, ldapSyntaxes:rscwo, numSubordinates:rscwo

18.12.3.6. 获取效果结果和访问控制规则的示例

获取有效权限会根据任何 ACL 对 get 有效权限主体条目而返回。
例如,这个 ACL 被设置,在这个示例中是唯一的 ACL 集:
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example
aci: (target=ldap:///ou=Accounting,dc=example,dc=com)(targetattr="*")(version
 3.0; acl "test acl"; allow (read,search,compare) (userdn = "ldap:///anyone") ;)

dn: ou=Accounting,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Accounting
由于 ACL 不包含 dc=example,dc=com 子树,因此 get valid rights search 显示用户没有对 dc=example,dc=com 条目的任何权限:

例 18.45. 获得没有 ACL 设置(目录管理器)的 Effective Rights 结果

# ldapsearch -D "cn=Directory Manager" -W -b "dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "*@person"

dn: cn=template_person_objectclass,uid=scarter,ou=people,dc=example,dc=com
objectClass: person
objectClass: top
cn: (template_attribute)
sn: (template_attribute)
description: (template_attribute)
seeAlso: (template_attribute)
telephoneNumber: (template_attribute)
userPassword: (template_attribute)
entryLevelRights: none
attributeLevelRights: sn:none, cn:none, objectClass:none, description:none, seeAlso:none, telephoneNumber:none, userPassword:none, aci:none
如果普通用户而不是 Directory Manager,尝试运行相同的命令,则结果只会为空。

例 18.46. 获得没有 ACL 设置(普通用户)的 Effective Rights 结果

# ldapsearch -D "uid=scarter,ou=people,dc=example,dc=com" -W -b "dc=example,dc=com" -E '!1.3.6.1.4.1.42.2.27.9.5.2=:dn:uid=scarter,ou=people,dc=example,dc=com' "(objectclass=*)" "*@person"

18.12.4. Get Effective Rights 返回码

如果没有为 get valid permissions 搜索设置关键性,并且发生错误,则返回常规条目信息,而是代替 entryLevelRightsattributeLevelRights 的权限,则返回错误代码。此代码可以提供有关查询的条目配置的信息。表 18.4 “返回的结果码” 总结了错误代码以及他们可以中继的潜在配置信息。
Expand
表 18.4. 返回的结果码
代码 描述
0 成功完成。
1 操作错误。
12 关键扩展不可用。如果关键性表达式设为 true,并且正在查询的条目上不存在有效的权限,则返回此错误。
16 没有这样的属性。如果一个属性被专门查询以获取访问权限,但该属性在架构中不存在,则返回此错误。
17 未定义属性类型。
21 无效的属性语法。
50 权限不足。
52 不可用。
53 解放执行。
80 其他.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部