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

Защита доступа userPassword с помощью OpenLDAP в RHEL

Я установил сервер 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 и не нужна, если вы не выполняете репликацию ...