限制 openldap ldapsearch 的属性

限制 openldap ldapsearch 的属性

我对我的目录有以下查询:

ldapsearch -x -H ldaps://example.com -D "cn=gitlab,ou=Service Accounts,dc=example,dc=com" -w foobar -b "ou=Persons,dc=example,dc=com"

通过以下 olcAccess 我得到以下结果:

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to dn.subtree="ou=Persons,dc=example,dc=com" by dn="cn=gitlab,ou=Service Accounts,dc=example,dc=com" read
olcAccess: {1}to attrs=userPassword,shadowLastChange by self =xw by anonymous auth
olcAccess: {2}to * by self read by * none

(规则 1 应该放在第一位,它也可以这样工作,但可以肯定的是,我现在把它放下)

结果:

# Persons, example.com
dn: ou=Persons,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Persons

# Hans Wurst, Persons, example.com
dn: cn=Hans Wurst,ou=Persons,dc=example,dc=com
givenName: Hans
sn: Wurst
cn: Hans Wurst
uid: hwurst
userPassword:: <PASSWORDHASH>
uidNumber: 1001
gidNumber: 500
homeDirectory: /home/hwurst
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top

# Carla Kaese, Persons, example.com
dn: cn=Carla Kaese,ou=Persons,dc=example,dc=com
gidNumber: 500
givenName: Carla
homeDirectory: /home/ckaese
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Kaese
uid: ckaese
uidNumber: 1000
cn: Carla Kaese
userPassword:: <PASSWORDHASH>

现在我的目标是限制仅对某些属性的读取访问。因此我将 acls 更改如下:

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to dn.subtree="ou=Persons,dc=example,dc=com" attrs="entry,uid,cn" by dn="cn=gitlab,ou=Service Accounts,dc=example,dc=com" read
olcAccess: {1}to attrs=userPassword,shadowLastChange by self =xw by anonymous auth
olcAccess: {2}to * by self read by * none

我添加了attrs="entry,uid,cn"

然而,相同的搜索现在只返回:

# search result
search: 2
result: 0 Success

我究竟做错了什么?我缺少什么?怎样才能发挥作用呢?

答案1

ACL 也会影响身份验证步骤。

当使用简单绑定(使用 DN 和密码)时,您必须授予授权属性权入口用户密码在要验证的条目上。

但是 AFAICS 您的最后一个 ACL 有效地阻止了对伪属性的身份验证访问入口。我会尝试最后一个 ACL(未测试):

olcAccess: {2}to * by self read by * auth

答案2

olcAccess: {0}to dn.children="ou=Persons,dc=example,dc=com" attrs=entry,uid,cn,userPassword,mail by dn="cn=gitlab,ou=Service Accounts,dc=example,dc=com" tls_ssf=128 read by * none break
olcAccess: {1}to dn.subtree="ou=Persons,dc=example,dc=com" by dn="cn=gitlab,ou=Service Accounts,dc=example,dc=com" tls_ssf=128 search by * none break

迈克尔·斯特罗德(Michael Ströder)很接近。我需要一个额外的search。此外,这break是必要的。显然,否则在树可以迭代到正确的条目之前评估已经停止。

对于这个问题来说这tls_ssf=128不是必需的,但增加了额外的安全级别。

相关内容