18.12. 检查条目上的访问权限权利(获得有效的权利)
查找用户对特定条目内属性的访问权限,可方便管理员查找和控制访问权限。
获取有效权限 是扩展目录搜索的方法,以显示哪些访问权限,如读取、搜索、写入和自我写入、添加和删除 - 用户对指定条目必须具有哪些访问权限。
在目录服务器中,普通用户可以检查其能查看的条目的权限,并可检查其他人员对个人条目的访问。Directory Manager 可以检查一个用户通过另一个用户的权限。
在两种常见情况下,检查条目的有效权限很有用:
- 管理员可以使用 get valid rights 命令来更好地组织目录的访问控制指令。通常需要限制一组用户可以查看或编辑另一组。例如,QA Managers 组的成员可能有权限搜索并读
manager和salary等属性,当只有 HR Group 的成员有权限修改或删除它们。检查用户或组的有效权限是验证是否放置了适当的访问控制的方法。 - 用户可以运行 get valid rights 命令,以查看他可以查看或修改其个人条目的属性。例如,用户应具有对
homePostalAddress和cn等属性的访问权限,但可能只能具有manager和salary属性的读取访问权限。
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
| 权限 | 描述 |
|---|---|
| a | 添加一个条目。 |
| d | 删除此条目。 |
| n | 重命名 DN。 |
| v | 查看条目。 |
| 权限 | 描述 |
|---|---|
| r | 读取. |
| s | 搜索. |
| w | 写(mod-add)。 |
| o | Obliterate (mod-del).与删除类似。 |
| c | 比较. |
| W | 自我写入。 |
| O | 自我删除。 |
18.12.2. Get Effective Rights Search 的格式 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
获取有效权限(有时称为 GER)是扩展目录搜索;使用
-E 选项定义 GER 参数,以使用 ldapsearch 命令传递 LDAP 控制。(如果在没有 the -E 选项的情况下运行 ldapsearch,则自然,该条目将正常返回,没有任何获得有效权限信息。)
# ldapsearch -x -D bind_dn -W -p server_port -h server_hostname -E [!]1.3.6.1.4.1.42.2.27.9.5.2=:GER_subject (searchFilter) attributeList
-b是用于搜索 GER 主题的子树或条目的基本 DN。如果搜索基础是一个特定的条目 DN,或者只返回一个条目,则结果会显示请求者对该特定条目具有的权限。如果搜索基础下的多个条目与过滤器匹配,则搜索会返回每个匹配的条目,并且请求者通过每个条目的权限。- 1.3.6.1.4.1.42.2.27.9.5.2 是 get 有效权限控制的 OID。
- 感叹号(!)指定如果服务器不支持此控制(!),还是其应忽略并且让搜索返回正常(没有)时,搜索操作是否应该返回错误。
- GER_subject 是检查其权限的人员。如果 GER_subject 留空(dn:),则返回匿名用户的权限。
- 可选的 attributeList 将 get valid rights 结果限制为指定的属性或对象类。与常规 ldapsearch 一样,这可以提供特定属性,如
mail。如果没有列出属性,则返回条目的每个 present 属性。使用星号 (*) 返回条目的每个可能属性的权利,包括现有属性和非不存在的属性。使用加号(+)返回条目的操作属性。第 18.12.3.2 节 “Get Effective Rights Searches for Non-Existent 属性的示例” 和 第 18.12.3.3 节 “Get Effective Rights 搜索特定属性或对象类的示例” 中提供了检查特定属性权限的示例。
获取有效权限搜索的证实是能够检查 GER 主题(
-E)对搜索目标(-b)的访问权限。get effective 权限搜索是一个常规 ldapsearch,它只是查找与搜索参数匹配的条目并返回其信息。get valid rights 选项在这些搜索结果中添加额外的信息,显示特定用户对这些结果具有哪些权利。该 GER 主题用户可以是自己自己(D 与 -E相同)或其他其他人。
如果请求者是常规用户(而不是目录管理器),则请求者只能看到 GER 主题在请求者自己的条目上具有的有效。也就是说,如果 John Smith 运行了一个请求来查看 Babs Jensen 具有的有效权利,则他只能获得 Babs Jensen 在其自己的条目上的有效权利。所有其他条目为有效的权限返回不足的访问权限错误。
运行 get valid rights 搜索时,常规用户有三个常规场景:
- 用户 A 检查他拥有其他目录条目的权限。
- 用户 A 检查他对个人条目具有的权利。
- 用户 A 检查用户 B 必须具有 User A 条目的权限。
get valid 权限搜索具有许多灵活的不同方式,它可以检查属性的权限。
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,并可以读取、搜索并比较
ou、givenName、l 和其他属性,以及对 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 )都已列出,即使该属性不存在。
18.12.3.3. Get Effective Rights 搜索特定属性或对象类的示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
进一步执行与属性相关的 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
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 搜索设置关键性,并且发生错误,则返回常规条目信息,而是代替 entryLevelRights 和 attributeLevelRights 的权限,则返回错误代码。此代码可以提供有关查询的条目配置的信息。表 18.4 “返回的结果码” 总结了错误代码以及他们可以中继的潜在配置信息。
| 代码 | 描述 |
|---|---|
| 0 | 成功完成。 |
| 1 | 操作错误。 |
| 12 | 关键扩展不可用。如果关键性表达式设为 true,并且正在查询的条目上不存在有效的权限,则返回此错误。 |
| 16 | 没有这样的属性。如果一个属性被专门查询以获取访问权限,但该属性在架构中不存在,则返回此错误。 |
| 17 | 未定义属性类型。 |
| 21 | 无效的属性语法。 |
| 50 | 权限不足。 |
| 52 | 不可用。 |
| 53 | 解放执行。 |
| 80 | 其他. |