Итак, я пытаюсь добавить несколько 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