ОС: 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)
После документации 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).