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

LDAP: создание привязанного пользователя с ограниченными привилегиями

Мне нужно подключиться к серверу OpenLDAP для аутентификации пользователей, но я не хочу, чтобы этот низкопривилегированный или «делегированный администратор» мог видеть больше атрибутов, чем это строго необходимо.

Как уменьшить количество атрибутов, которые пользователь привязки может видеть с помощью белого списка? Какие атрибуты строго необходимы для аутентификации пользователей?

Например, этому конкретному пользователю привязки нет необходимости видеть NTPassword и я полагаю, что другие атрибуты, такие как домашний каталог и т. д.

Вот что я сделал до сих пор:

  1. Я отключил анонимную привязку:

    # disable anon bind
    dn: cn=config
    changetype: modify
    add: olcDisallows
    olcDisallows: bind_anon
    
    dn: cn=config
    changetype: modify
    add: olcRequires
    olcRequires: authc
    
    dn: olcDatabase={-1}frontend,cn=config
    changetype: modify
    add: olcRequires
    olcRequires: authc
    
  2. Я создал подразделение «Приложения» и пользователя «gitlab»:

    # file: applications.ldif
    dn: ou=Applications,dc=example,dc=com
    objectclass: top 
    objectClass: organizationalunit
    ou: Applications
    
    dn: cn=gitlab,ou=Applications,dc=example,dc=com
    cn: gitlab
    objectClass: simpleSecurityObject
    objectClass: organizationalRole
    userPassword: {CRYPT}.....
    
  3. Чтобы создать пользователя, я использовал пользователя с правами администратора LDAP:

    ldapadd -xvvv -f applications.ldif -D 'cn=admin,dc=example,dc=com' -W
    
  4. Чтобы ограничить привилегии gitlab, я пробовал это:

    # file: give-applications-access.ldif
    dn: cn=config
    changetype: modify
    # allow Applications (e.g. GitLab) access to userPassword
    access to dn.chidren="ou=People,dc=example,dc=com" attrs=userPassword
      by dn.exact="ou=Applications,dc=eaxmple,dc=com" read
    
  5. Тогда я использовал ldapmodify чтобы применить предыдущий LDIF:

    ldapmodify -xvvv  -D 'cn=admin,dc=example,dc=com' -W -f give-applications-access.ldif
    

Сейчас Я могу успешно аутентифицировать пользователей в ou=People из gitlab. Однако, если я использую, например, jxplorer или ldapsearch с gitlab учетные данные пользователя, я могу видеть все атрибуты пользователя Кроме пользовательский пароль:

ldapsearch -h ldaps://ldap.example.com -p 636 -LLL -D 'cn=gitlab,ou=Applications,dc=example,dc=com' -s base -b "ou=People,dc=example,dc=com"  -s sub -W "(objectclass=*)" | grep -i userpassword | wc -l
0

Что тут происходит? Я полагаю, что gitlab использует sambaNTPassword для аутентификации .. но я думал attrs=userPassword был только для чтения, а теперь его даже нет в атрибутах.

Приносим свои извинения за вставку всех команд - я оставляю их здесь в надежде, что другие сочтут это полезным. Большая часть найденной мной документации описывает каждый доступный вариант, но не дает хороших примеров, которые можно было бы использовать в последних версиях OpenLDAP; и большинство доступных примеров касается редактирования slapd.conf, а не типа "новой" базы данных (cn = config), поэтому трудно понять, что имеет значение.

ОБНОВЛЕНИЕ - текущий ACL:

olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read

Я следил этот ответ читать ACL, которые в моем случае были на {0}mdb: ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}mdb'