Я настроил аутентификацию клиента linux через ldap, он работает. Я хочу контролировать доступ пользователей к нескольким службам, добавляя или удаляя разные подразделения для учетных записей. Например, если пользователю разрешено входить в систему с Linux-машинами, он должен содержать "linux". Если этому пользователю разрешен доступ, скажем, к redmine, он также должен содержать «redmine».
Проблема в том, что параметр pam_filter в /etc/ldap.conf игнорируется. Когда я установил это
pam_filter ou=linux
строка поиска, которая приходит на сервер ldap, не содержит этого фильтра:
openldap slapd [5374]: conn = 1857 op = 1 SRCH base = "ou = people, dc = rwth-cbmb, dc = de" scope = 2 deref = 0 filter = "(objectClass = posixAccount)"
Как я уже сказал, я использовал его с redmine (системой отслеживания билетов), где я также установил фильтр ldap, и он работает. Я получаю на сервере следующие поисковые запросы:
openldap slapd [5374]: conn = 1863 op = 1 SRCH base = "ou = people, dc = rwth-cbmb, dc = de" scope = 2 deref = 0 filter = "(& (objectClass = *) (uid = alex ) (ou = redmine)) "
У меня есть следующие версии пакетов:
ldap-auth-client 0.5.3
ldap-auth-config 0.5.3
ldap-utils 2.4.28-1.1ubuntu4.2
libldap-2.4-2 2.4.28-1.1ubuntu4.2
libnss-ldap 264-2.2ubuntu2
libpam-ldap 184-8.5ubuntu2
Клиент ubuntu 12.04, сервер ubuntu server 10.04.
Хорошо, решение заключалось в использовании
nss_base_passwd ou=people,dc=rwth-cbmb,dc=de??ou=linux
в /etc/ldap.conf на клиенте. Согласно документации:
Синтаксис:
nss_base_XXX base? scope? filter
Я не знаю, почему pam_filter не работает, но nss_ * решает проблему.
Добавьте следующую строку в файл /etc/pam_ldap.conf
pam_check_host_attr yes
Из страница руководства pam_ldap:
pam_check_host_attr
Указывает, следует ли проверять атрибут «host» для авторизации входа в систему («учетная запись» в стеке PAM). По умолчанию это не так. Если установлено «да» и пользователь не имеет значения для атрибута «host», то пользователь не сможет войти в систему.