Назад | Перейти на главную страницу

Как правильно добавить ACI в OpenLDAP

Итак, я пытаюсь добавить несколько ACI в мою систему OpenLDAP (хостинг на CentOS 6). Я читал, как другие помещают свои ACI в bdb вот так ...

olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=manager,dc=bromosapien,dc=net" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=manager,dc=bromosapien,dc=net" write by * read

Однако я хочу избежать этого и просто разрешить изменение пароля из контейнера (и, по крайней мере, избегать использования диспетчера каталогов). Я читал, как кто-то делает это, и это с их точки зрения работает:

dn: ou=People,dc=bromosapien,dc=net
changetype: modify
add: aci
aci: (targetattr = "userpassword || telephonenumber")(version 3.0; acl "Allow self entry modification"; allow (write)(userdn = "ldap:///self");)

Проблема в том, что пытаясь добавить это, я получаю вот это.

# ldapadd -xWD "cn=manager,dc=bromosapien,dc=net" -f aci-password.ldif 
Enter LDAP Password: 
modifying entry "ou=People,dc=bromosapien,dc=net"
ldap_modify: Undefined attribute type (17)
        additional info: aci: attribute type undefined

Я, должно быть, делаю что-то не так или упоминаю неправильный объектный класс и т. Д. Вопрос в том, действительно ли я делаю все в bdb.ldif, или возможно ли добавить ACI таким образом, и какой метод в данном случае «рекомендуется», какой лучший способ предоставить ACI, которые мне нужны, чтобы позволить пользователю изменять свой собственный пароль (без необходимости в диспетчере каталогов)?

Изменить: я также заметил, что в строках olcAccess ldapsearch не показывает строку userPassword из анонимного поиска.

Выяснилось, что, вероятно, лучше просто сделать это способом bdb.ldif. То, что я сделал, было похоже на то, что описано выше, но я внес несколько изменений.

olcAccess: {0}to attrs=userPassword,shadowLastChange,loginShell by dn="cn=manager,dc=bromosapien,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=manager,dc=bromosapien,dc=net" write by group.exact="cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net" write by * read

Вместо этого я пометил каждую строку фигурными скобками и числом. Я также добавил возможность пользователю изменять свою оболочку входа в систему (поскольку я разрешаю Bash, ksh и zsh, по умолчанию используется bash). Затем я создал контейнер groupOfNames внутри подразделения Group. Как это.

dn: cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net
objectClass: groupOfNames
objectClass: top
cn: LDAPADMIN
member: uid=zera,ou=People,dc=angelsofclockwork,dc=net
member: uid=sithlord,ou=People,dc=angelsofclockwork,dc=net

Конечно, для этого требуется наложение memberOf.

Оверлей memberOf, который я использовал, приведен ниже:

% vi modules.ldif

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: memberof

% vi memberof.ldif

dn: olcOverlay=memberof,olcDatabase={2}bdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf