openldap предоставляет группе доступ на запись к поддереву

У меня есть

dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people

и группа администраторов для него:

dn: cn=people-admins,ou=groups,dc=example,dc=com
objectClass: groupOfUniqueNames
cn: admins of people group
uniqueMember: uid=admin1,ou=people,dc=example,dc=com

, и я добавляю такие правила, чтобы разрешить людям-админам добавлять / удалять / изменять пользователей в человек группы

dn: olcDatabase={1}hdb,cn=config
changetype: modify
delete: olcAccess
-
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=example,dc=com" write by anonymous auth by * none
olcAccess: to dn.one="ou=people,dc=example,dc=com" by group.exact=cn=people-admins,ou=groups,dc=example,dc=com write by self write by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: to dn.base="ou=people,dc=example,dc=com" by group.exact=cn=people-admins,ou=groups,dc=example,dc=com write by self write by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: to dn.children="ou=people,dc=example,dc=com" by group.exact=cn=people-admins,ou=groups,dc=example,dc=com write by self write by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: to dn.subtree="ou=people,dc=example,dc=com" by group.exact=cn=people-admins,ou=groups,dc=example,dc=com write by self write by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: to * by self write by dn="cn=admin,dc=example,dc=com" write by * none

, затем я пытаюсь добавить нового пользователя в группу людей , используя учетные данные admin1, и получил следующее:

ldapadd -x -H ldap://127.0.0.1:3000/  -D "uid=admin1,ou=people,dc=example,dc=com" -W
dn: uid=test1,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
uid: test1
sn: test
givenName: test1
cn: test test1
displayName: Test1
userPassword: test1
adding new entry "uid=test1,ou=people,dc=example,dc=com"
ldap_add: Insufficient access (50)
        additional info: no write access to parent

Здесь аналогичный вопрос, но он получил неправильный ответ из-за dn.entry не существует в openldap.

1
задан 13 April 2017 в 15:13
2 ответа

Проблема заключалась в том, что group.exact не работал с groupOfUniqueNames . Я решил это, изменив это правило:

by group.exact=cn=people-admins,ou=groups,dc=example,dc=com write

на это правило:

by group/groupOfUniqueNames/uniqueMember=cn=people-admins,ou=groups,dc=example,dc=com write
2
ответ дан 3 December 2019 в 18:35

Если вы только начинаете, я рекомендую перейти на использование groupOfNames , а не groupOfUniqueNames .

Большинство систем, которые взаимодействуют с OpenLDAP для членства в группах, ожидают groupOfNames по умолчанию, включая сам OpenLDAP. Хотя их обычно можно изменить для использования groupOfUniqueNames / uniqueMember (например, sssd-ldap ldap_group_member или ваше собственное использование в olcAccess OpenLDAP), это избавит вас от необходимости изменять значения по умолчанию.


Там это различия между visibleNameMatch , используемым member , и uniqueMemberMatch , используемым uniqueMember , но первого обычно достаточно.

$ ldapadd <<EOF
dn: cn=testgroup,ou=groups,dc=example,dc=com
> objectclass: groupofnames
> member: uid=testuser,ou=people,dc=example,dc=com
> member: uid=testuser,ou=people,dc=example,dc=com
> EOF
SASL/GSSAPI authentication started
SASL username: self@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
adding new entry "cn=testgroup,ou=groups,dc=example,dc=com"
ldap_add: Type or value exists (20)
    additional info: member: value #0 provided more than once



$ ldapsearch cn=testgroup
dn: cn=testgroup,ou=groups,dc=example,dc=com
objectClass: groupOfNames
objectClass: posixGroup
cn: testgroup
gidNumber: 12345
member: uid=testuser,ou=people,dc=example,dc=com

$ ldapmodify <<EOF
dn: cn=testgroup,ou=groups,dc=example,dc=com
add: member
member: uid=testuser,ou=people,dc=example,dc=com
EOF

SASL/GSSAPI authentication started
SASL username: self@EXAMPLE.COM
SASL SSF: 56
SASL data security layer installed.
modifying entry "cn=testgroup,ou=groups,dc=example,dc=com"
ldap_modify: Type or value exists (20)
    additional info: modify/add: member: value #0 already exists
1
ответ дан 3 December 2019 в 18:35

Теги

Похожие вопросы