Я установил сервер OpenLDAP на RHEL 5.4 и настраиваю другие серверы для аутентификации против него. У меня настроены и работают ldap с StartTLS и ldaps.
На моих клиентских машинах мой /etc/nsswitch.conf включает:
passwd: files ldap
shadow: files ldap
group: files ldap
Я могу успешно войти в систему на клиенте с пользователем, который определен только в LDAP (т.е. он не находит его в / etc / passwd и успешно запрашивает у LDAP информацию о пользователе и аутентифицируется по хешу пароля, хранящемуся в LDAP).
Моя проблема заключается в том, что я пытаюсь заблокировать доступ к атрибутам на сервере LDAP, в частности, в /etc/openldap/slapd.conf, пользователи ldap больше не могут войти в систему:
access to attrs=userpassword
by self write
by anonymous auth
by * none
Я регистрирую slapd, и кажется (моя интерпретация, поправьте меня, если я ошибаюсь), что pam_ldap пытается читать все атрибуты объектного класса poxixAccount:
filter: (&(objectClass=posixAccount)(uid=cthompson))
attrs:
uid
userPassword
uidNumber
gidNumber
cn
homeDirectory
loginShell
gecos
description
objectClass
В моем журнале openldap я не получаю ошибок доступа или ACL, но получаю:
access_allowed: search access to "uid=cthompson,ou=People,dc=domain,dc=com" "objectClass" requested
access_allowed: search access to "uid=cthompson,ou=People,dc=domain,dc=com" "uid" requested
Нужно ли что-то настроить, чтобы вместо чтения атрибута userPassword pam_ldap пытался выполнить «аутентификацию» против него (чтобы запросы обрабатывались правилом доступа «анонимной аутентификацией»?
pam_ldap
не следует пытаться прочитать значение userPassword для входа в систему - он выполняет вход, выполняя привязку LDAP с полученным DN.
Возможно, параметры поиска, которые использует pam_ldap, слишком широки, и в результате он пытается получить userPassword, но если ваш ACL настроен правильно (мне кажется, это нормально), он не получит это значение в своих результатах.
На всякий случай ваши ACL не хорошо (раньше я, как известно, пропускал глупо очевидные вещи), вот рабочий список ACL из моей производственной среды LDAP :)
# Access and Security Restrictions
# (Most restrictive entries first)
access to attrs=userPassword
by self write
by dn.sub="ou=sync,dc=mydomain,dc=com" read
by anonymous auth
by users none
access to * by * read
В конце access to * by * read
важно, я не видел его в ваших примерах, поэтому я не уверен, отсутствует ли он или просто пропущен в вашем фрагменте.
В sync
строка предназначена для моей службы синхронизации LDAP и не нужна, если вы не выполняете репликацию ...