如何在 openldap 中自行更改属性

如何在 openldap 中自行更改属性

我正在运行 openldap 2.4.40 并应用了以下 ACL:

olc访问:{0}至 *      
          自写       
          由 dn="cn=Manager,dc=sample,dc=com" 撰写       
          由 * 阅读
olcAccess:{1}到 dn.children="ou=sysUsers,dc=sample,dc=com"
           attrs=用户密码,shadowLastChange,描述,sshPublicKey       
          自写
          由 dn="cn=Manager,dc=sample,dc=com" 撰写             
          由匿名用户认证
          作者:*无

我想由用户 (sysUsers) 更改 userPassword、shadowLastChange、description 和 sshPublicKey。但它给出权限错误,无法写入权限。

# slapacl -D''-b'uid=user1,ou=sysUsers,dc=sample,dc=com'
 身份验证DN:“”
 条目:读取(=rscxd)
 子项:读取(=rscxd)
 gidNumber=1000: 读取(=rscxd)
 homeDirectory=/home/user1:读取(=rscxd)
  :
 cn=user1:读取(=rscxd)
 sshPublicKey=ssh-rsa AAAAB3Nza…cGWliPbw==[电子邮件保护]:读取(=rscxd)
 用户密码=****: 读取(=rscxd)
 描述=测试用户1:读取(=rscxd)
  :
 修改时间戳=20161025074434Z:读取(=rscxd)
LDAP 响应:访问权限不足
错误编号:0x32(LDAP_INSUFFICIENT_ACCESS)
描述:您没有足够的权限执行该操作。

我尝试通过用户 uid=user1,ou=sysUsers,dc=sample,dc=com 修改描述,但失败了。

uid=Manager,ou=sysUsers,dc=sample,dc=com 可以修改。

我做错了什么?我怀疑是 ACL 问题?

答案1

olcAccess: {0}to *      
          by self write       
          by dn="cn=Manager,dc=sample,dc=com" write       
          by * read
olcAccess: {1}to dn.children="ou=sysUsers,dc=sample,dc=com" 
           attrs=userPassword,shadowLastChange,description,sshPublicKey       
          by self write
          by dn="cn=Manager,dc=sample,dc=com" write             
          by anonymous auth
          by * none

首先,您给出的 ACL 序列是不正确的,在这种情况下,所有内容都会与第一个指令匹配,因为它包含“*”,它与所有内容匹配,并且它永远不会转到 ACL 的第二条规则。

第二,您用来检查 ACL 权限的命令不正确,您使用了:

slapacl -D '' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com'

不正确的是 -D 是 DN谁的要检查权限并且 -b 是 baseDN需要检查哪些权限。

因此正确的命令应该是检查自身权限:

slapacl -D 'uid=user1,ou=sysUsers,dc=sample,dc=com' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com'

根据你的发现进行编辑:您申请的 ACL 是dn:olcDatabase={0}配置,cn=配置而它应该适用于数据库 DNdn:olcDatabase={2}bdb,cn=config

我很确定您要尝试更改 DN:“uid=Manager,ou=sysUsers,dc=sample,dc=com”的描述,当然根据 ACL,除了 DN:“uid=Manager,ou=sysUsers,dc=sample,dc=com”本身或 DN:“cn=Manager,dc=sample,dc=com”之外,任何其他人都无法做到这一点。

希望这能有所帮助!如果答案有帮助,请将其标记为“有帮助”或“已回答”,以表示支持。

答案2

致。Anirudh Malhotra 感谢地回复道。

我尝试改变 ALC。

[root@evolable-ldap-01 cn=config]# cat olcDatabase\=\{0\}config.ldif
# 自动生成的文件 - 请勿编辑!!使用 ldapmodify。
#CRC32 57182ee5
dn:olcDatabase={0}配置
对象类:olcDatabaseConfig
olcDatabase:{0}配置
olcAddContentAcl: 真实
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly:FALSE
olcRootDN: cn=config
olcSyncUseSubentry:FALSE
olcMonitoring:错误
结构对象类:olcDatabaseConfig
条目UUID:af419f18-0036-1035-8ba5-452a6aebab7f
创作者名称:cn=config
创建时间戳:20151006052730Z
olcAccess:{0}to dn.children="ou=sysUsers,dc=evolableasia,dc=net"
          attrs=用户密码,shadowLastChange,描述,sshPublicKey
       由 dn="uid=user1,ou=sysUsers,dc=sample,dc=com" 写入
       自写
       由 dn="cn=Manager,dc=sample,dc=com" 撰写
       作者:*无
olc访问:{1}至 *
       自写
       由 dn="cn=Manager,dc=sample,dc=com" 撰写
       由匿名用户认证
       由 * 阅读
条目CSN:20161026004145.362887Z#000000#000#000000
modifiersName:cn=manager,dc=sample,dc=com
修改时间戳:20161026004145Z

但是,slapacl 没有改变。

# slapacl -D''-b'uid=user1,ou=sysUsers,dc=sample,dc=com'
 authcDN:“uid=user1,ou=sysusers,dc=sample,dc=com”
 条目:读取(=rscxd)
 子项:读取(=rscxd)
 gidNumber=1000: 读取(=rscxd)
 homeDirectory=/home/user1:读取(=rscxd)
  :
 cn=user1:读取(=rscxd)
 sshPublicKey=ssh-rsa AAAAB3Nza…cGWliPbw==[电子邮件保护]:读取(=rscxd)
 用户密码=****: 读取(=rscxd)
 描述=测试用户1:读取(=rscxd)
  :
 修改时间戳=20161025074434Z:读取(=rscxd)

相关内容