내 디렉터리에 대해 다음과 같은 쿼리가 있습니다.
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>
지금내 목표는특정 속성에만 읽기 액세스를 제한합니다. 그래서 다음과 같이 acl을 변경했습니다.
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
필요하지 않지만 추가 보안 수준을 추가합니다.