memberof и refint не работает в openLdap - PullRequest
2 голосов
/ 02 апреля 2020

Я использую 64-битную версию CentOs 7.x для настройки openLdap. Я хочу использовать оверлей memberof, чтобы показать пользователю, в какие группы он входит. Насколько я понимаю, с активными оверлеями memberof и refint сервер Openldap автоматически поддерживает свойство memberof для пользователей и обеспечивает его соответствие фактическому членству. Однако он этого не делает вообще. Я могу установить свойство memberof вручную, но оно не обязательно должно быть согласованным и не поддерживается автоматически.

Вопрос в том, правильно ли я понимаю, как оно должно работать и как мне заставить это работать?

Мое главное требование - это точно показывать членство. если бы я мог манипулировать членством через memberof, это было бы хорошо, но это не обязательно.

Подробности

Я сделал это в следующих шагах:

  1. Создайте человека в группе людей с помощью objectClass 'inetOrgPerson' и 'person'. И с именем «Джо»
  2. Создайте группу с именем «groupOfNames» с именем «агент». А с атрибутом member со значением 'uid = joe, ou = people, dc = company, dc = com'

Теперь, когда я посмотрел на человека 'Joe', я не смог найти 'memberOf атрибут с отображением атрибута организации включен в Apache ldap studio. И с помощью следующего поиска в командной строке также не удается найти группу.

ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf

Ниже приведен фрагмент slapcat:

dn: ou=people,dc=company,dc=com
objectClass: organizationalUnit
ou: people
description: Application users
structuralObjectClass: organizationalUnit
entryUUID: 82532aa8-f3e8-1039-9c72-6f4976491fc1
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200306112229Z
entryCSN: 20200306112229.195806Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200306112229Z

dn: uid=joe,ou=people,dc=company,dc=com
uid: joe
cn: joe.doe
sn: doe
objectClass: inetOrgPerson
objectClass: person
userPassword:
structuralObjectClass: inetOrgPerson
entryUUID: 079b9550-03b2-103a-89f5-811bd9f87026
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200326133249Z
entryCSN: 20200326133249.091679Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200326133249Z

dn: cn=a1,ou=agent,dc=company,dc=com
member: uid=joe,ou=people,dc=company,dc=com
cn: a1
objectClass: groupOfNames
structuralObjectClass: groupOfNames
entryUUID: 2c9df272-047e-103a-9203-eba7d52bfa3f
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200327135408Z
entryCSN: 20200402133540.270695Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200402133540Z

Я использую ansible для запустить конфигурацию. Вот фрагмент файла конфигурации

- name: Install memberof and refint overlays
  include_tasks: "{{ role_path }}/tasks/add_module_to_ldap_conf.yml"
  vars:
    add_module_to_ldap: "{{ item }}"
  loop:
    - name: memberof overlay
      module_file: 'memberof.la'
    - name: refint overlay
      module_file: 'refint.la'

- name: Activate overlays
  include_tasks: "{{ role_path }}/tasks/put_ldap_admin_entry.yml"
  vars:
    put_ldap_entry:
      dn: "olcOverlay={{ item.overlay }},'olcDatabase={2}hdb','cn=config'"
      objectClass: "{{ item.objectClass }}"
      attributes: "{{ item.attributes }}"
  loop:
    - overlay: memberof
      objectClass:
        - top
        - olcConfig
        - olcMemberOf
        - olcOverlayConfig
      attributes:
        olcOverlay: memberof
        olcMemberOfRefint: 'TRUE'
        olcMemberOfDangling: ignore
        olcMemberOfGroupOC: groupOfNames
        olcMemberOfMemberAD: member
        olcMemberOfMemberOfAD: memberOf
    - overlay: refint
      objectClass:
        - top
        - olcConfig
        - olcRefintConfig
        - olcOverlayConfig
      attributes:
        olcOverlay: refint
        olcRefintAttribute: 'memberof member manager owner'

Я попытался добавить атрибут memberOf вручную, и поиск может вернуть группу. Тем не менее, он не поддерживает группу, когда группа человека обновляется. Поэтому я подозреваю, что перефразировка тоже не работает.

ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf

Вот фрагмент активного наложения:

ldapsearch -LL -Y EXTERNAL -H ldapi:/// -b cn=Overlays,cn=Monitor -s base monitoredObject
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: cn=Overlays,cn=Monitor
objectClass: monitorContainer
cn: Overlays
description: This subsystem contains information about available overlays.
monitoredInfo: refint
monitoredInfo: memberof
monitoredInfo: glue

1 Ответ

1 голос
/ 08 апреля 2020

В нашей первоначальной конфигурации отсутствовали следующие атрибуты:

olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Я вручную выполнил ldapmodify для следующей конфигурации

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

Затем членство сработало. После того, как мы удалили пропущенный атрибут и повторно запустили Ansible, кажется, что он не отменяет его. Поэтому мы не уверены в том, что было не так.

...