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

LDAP полностью игнорирует атрибуты pam_groupdn и pam_filter в ldap.conf

ОС: Ubuntu 17.10

В настоящее время я установил ldap на Ubuntu для доступа к серверу ldap. Я настроил nls, pam и ldap, как и во многих предлагаемых уроках. Итак, это сработало, но теперь любой пользователь ldap может войти в систему. Поэтому я хотел ограничить доступ к системе атрибутом

    pam_groupdn 

или

    pam_filter

в /etc/ldap.conf (обратите внимание, что pam_ldap.conf не существует в системе, и он также не помогает создавать)

Когда я, например,

    ldapsearch -x -H ldaps://ldap.domain.local:636 -b "cn=users,dc=ldap,dc=mydomain,dc=local" uid="someuser"

В этом примере я получаю результаты

    memberOf:  cn=users,cn=groups,cd=ldap,dc=domain,dc=local
    memberOf:  cn=lindev,cn=groups,cd=ldap,dc=domain,dc=local

Поэтому мой фильтр должен содержать пользователей cn и lindev для доступа к системе. Сначала я попытался установить фильтр в /etc/ldap.conf вот так

    pam_filter &((member=cn=lindev,dc=ldap,dc=domain,dc=local)(member=cn=lindev,dc=ldap,dc=domain,dc=local))

Теперь я переключился в режим отладки nslcd

    sudo service nslcd stop
    sudo nslcd -d

для управления выводом. К сожалению, не однажды используется определенный фильтр. Он просто принимает значение binddn (также настраивается в /etc/ldap.conf и в /etc/nslcd.conf)

    binddn cn=users,dc=ldap,dc=domain,dc=local

Фактически, uid пользователя вставляется в вывод nslcd, а затем выполняется сравнение, но фильтр никогда не применялся. Похоже, что эти атрибуты pam_xyz в /etc/ldap.conf полностью игнорируются. Я также искал в Google несколько решений, в которых говорится об изменении файлов в /etc/pam.d, особенно в файле common-account, который выглядит здесь:

   account [success=1 new_authtok_reqd=done default=ignore]   pam_unix.so
   account requisite                                          pam_deny.so
   account required                                           pam_permit.so
   account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad]       pam_ldap.so minimum_uid=1000

В Интернете было много советов по адаптации этих файлов, а также файлов common-account, common-auth, common-password и common-session. Я перепробовал все подсказки, но проблема осталась. Фильтр вообще не применяется к запросам, которые клиент делает на сервере.

Поэтому у меня вопрос, где я могу активировать эти атрибуты в /etc/ldap.conf?

Я отказался от рассмотрения атрибутов pam_filter и pam_groupdn в /etc/ldap.conf. В /etc/nslcd.conf доступны две опции, которые делают то же самое (согласно https://arthurdejong.org/nss-pam-ldapd/nslcd.conf.5)

  1. pam_authc_search
  2. pam_authz_search

После документации authz немного сложнее authc. Для моих целей было достаточно взять вариант authc.

Мой подход заключался в первом создании действительного поискового фильтра с помощью ldapsearch:

    ldapsearch -x -H ldaps://ldap.domain.local -b "dc=ldap,dc=domain,dc=local" "(&(memberUid=loginName)(|(cn=sudogroup)(cn=lindev)))"

Фильтр проверяет, действительно ли пользователь принадлежит к группам sudogroup и lindev.

Теперь я был готов вставить это в /etc/nslcd.conf:

    pam_authc_search (&(memberUid=$username)(|(cn=sudogroup)(cn=lindev)))

Цель достигнута: теперь я могу войти в систему только с членами Sudogroup и Linux Development Group (lindev).