Мне нужно подключиться к серверу OpenLDAP для аутентификации пользователей, но я не хочу, чтобы этот низкопривилегированный или «делегированный администратор» мог видеть больше атрибутов, чем это строго необходимо.
Как уменьшить количество атрибутов, которые пользователь привязки может видеть с помощью белого списка? Какие атрибуты строго необходимы для аутентификации пользователей?
Например, этому конкретному пользователю привязки нет необходимости видеть NTPassword
и я полагаю, что другие атрибуты, такие как домашний каталог и т. д.
Вот что я сделал до сих пор:
Я отключил анонимную привязку:
# 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
Я создал подразделение «Приложения» и пользователя «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}.....
Чтобы создать пользователя, я использовал пользователя с правами администратора LDAP:
ldapadd -xvvv -f applications.ldif -D 'cn=admin,dc=example,dc=com' -W
Чтобы ограничить привилегии 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
Тогда я использовал 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'