Понять PAM и NSS

21

В последние дни я настроил систему Linux с аутентификацией LDAP, и все работает отлично, но я все еще не могу понять, что касается NSS и PAM, даже после долгих исследований.

Цитирование:

NSS позволяет администраторам указывать список источников, в которых будут храниться и искать файлы аутентификации, имена хостов и другую информацию.

а также

PAM - это набор библиотек, которые обеспечивают настраиваемую платформу аутентификации для приложений и базовой операционной системы.

Я не понимаю, как PAM и NSS работают и взаимодействуют друг с другом. В этой книге архитектура объясняется довольно хорошо: я настраиваю PAM для использования pam_ldapдля учетных записей LDAP и pam_unixдля локальных учетных записей, затем я настраиваю nsswitch.confдля получения информации из локальных файлов и LDAP.

Если я правильно понял, LDAP используется дважды: сначала pam_ldapNSS, который сам вызывается из него pam_unix. Это правильно? Действительно ли LDAP используется дважды? Но почему мне нужно настроить NSS и PAM? Я объясняю, что PAM выполняет другие задачи, чем NSS, и используется другими программами. Но тогда должно быть возможно использовать только NSS или только PAM, как я прочитал на этой странице .

Поэтому я немного поэкспериментировал и сначала попытался удалить LDAP из nsswitch.conf(и аутентификация перестала работать, как будто только pam_ldap недостаточно для выполнения этой работы). Затем я снова включил LDAP в NSS и удалил его из конфигурации PAM (на этот раз все работало нормально, как будто pam_ldapбесполезно, а NSS достаточно для аутентификации пользователя).

Есть ли кто-нибудь, кто может помочь мне прояснить это? Спасибо заранее.

ОБНОВИТЬ

Я только что попробовал сейчас. Я снова удалил все pam_ldapзаписи во всех полях конфигурации PAM, и я также удалил shadow: ldapиз nsswitch.conf. Как и сейчас во всей системе есть только строки: passwd: ldap filesи group: ldap filesв nsswitch.conf. Ну ... логин с пользователями LDAP работает отлично, этих двух строк (плюс /etc/ldap.conf) достаточно для настройки аутентификации LDAP.

Насколько мне известно, PAM независим от NSS, но мои тесты показали, что это не так. Поэтому я спрашиваю себя, возможно ли полностью отключить NSS и использовать только PAM?

ColOfAbRiX
источник
Я не видел ваше обновление. Пожалуйста, выполните следующие команды и сообщите о своих результатах, заменив LDAPUSER пользователем, который, по вашему мнению, настроен только в LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Андрей B

Ответы:

25

Это помогает разбить такие вещи в вашей голове:

  • NSS - модульная система для управления сборкой различных баз данных на уровне ОС в памяти. Это включает в себя (но не ограничивается) passwd, group, shadow(это важно отметить), и hosts. Поиск UID использует passwdбазу данных, а поиск GID использует groupбазу данных.

  • PAM - модульная система, обеспечивающая аутентификацию и учет на основе услуг. В отличие от NSS, вы не расширяете существующие базы данных; Модули PAM могут использовать любую логику, какую пожелают, хотя входы в оболочку по-прежнему зависят от баз данных passwdи groupNSS. (вам всегда нужны UID / GID поиски)

Важным отличием является то, что PAM ничего не делает сам по себе. Если приложение не связывается с библиотекой PAM и не обращается к ней, PAM никогда не будет использоваться. NSS является ядром операционной системы, а базы данных довольно распространены для нормальной работы ОС.

Теперь, когда у нас это не так, вот кривая: хотя pam_ldap является популярным способом аутентификации на LDAP, это не единственный способ.

  • Если shadowуказывает на службу ldap внутри /etc/nsswitch.conf, любая аутентификация, которая выполняется на теневой базе данных, будет успешной, если атрибуты для этих сопоставлений теневого поля (в частности, поля зашифрованного пароля) присутствуют в LDAP и позволят войти в систему.
    • Это, в свою очередь, означает, что pam_unix.soпотенциально может привести к аутентификации по LDAP, так как он аутентифицируется по теневой базе данных. (который управляется NSS и может указывать на LDAP)
  • Если модуль PAM выполняет вызовы для демона, который, в свою очередь, запрашивает базу данных LDAP (скажем pam_sss.so, которая перехватывает sssd), возможно, на LDAP будут ссылаться.
Андрей Б
источник
Большое спасибо, я знаю, что nsswitch.conf + pam_unix может выполнять всю работу самостоятельно. Но и PAM должен делать то же самое, потому что он независим, как вы тоже написали. Насколько я понимаю, модуля pam_ldap должно быть достаточно для аутентификации пользователя на сервере ldap. Не так ли?
ColOfAbRiX
6
Аутентифицируйте да, но если у вас нет другого способа получить информацию о пользователе (локальный / etc / passwd или что-то еще), вам все равно нужен способ узнать членство в группе, домашний каталог и т. Д. Вы все еще путаете аутентификацию и перечисление авторизации / атрибута.
TheFiddlerWins
1
@ColOfAbRiX TheFIddlerWins правильный. Этого достаточно для аутентификации , но вам все равно нужен способ поиска UIDs + GID членства, как я уже отмечал. Они получены из passwdи groupбаз данных (NSS), что означает , что они должны быть в локальной системе ( /etc/passwd+ /etc/group), или полученные с помощью ldapмодуля NSS.
Андрей Б
3
Вот способ помочь вам понять: запустить getent passwdи getent groupс включенным LDAP для обеих баз данных в /etc/nsswitch.conf. Затем отключите LDAP в этом файле и снова запустите обе команды. getentкоманда для сброса баз данных NSS
Андрей B
Наконец-то я смог понять все, немного потрудившись. Спасибо вам, ребята!
ColOfAbRiX
1

NSS предназначен для перечисления информации об услугах / пользователях (к какой группе вы принадлежите, где находится ваш домашний каталог и т. Д.). PAM определяет, что делать с этой информацией.

Если вы хотите использовать LDAP для аутентификации, вам нужен pam_ldap. Если вы используете что-то другое (локальные учетные записи, Kerberos и т. Д.), То вы не можете.

Так что они делают разные вещи. NSS получает информацию, PAM определяет, кому разрешено делать, как только эта информация будет получена.

TheFiddlerWins
источник
Спасибо, но проблема в том, что это не работает таким образом, по крайней мере, в моей системе :) В начале я понял то же самое, но затем я попытался удалить все записи pam_ldap в PAM, и аутентификация LDAP все еще работала (и отключил кеш). Это увеличило мое замешательство :)
ColOfAbRiX
Как вы проверяете, что вы аутентифицируетесь через pam_ldap после его удаления? Опубликуйте содержимое вашего общего автора, пожалуйста. Я не уверен насчет путей в SUSE, но в ответ на первую часть вашего третьего вопроса, даже когда работает pam_ldap, вам нужен какой-то способ, чтобы система знала, кто вы - это предоставлено NSS
TheFiddlerWins
Извините, я имею в виду, что после удаления pam_ldap, аутентификация LDAP работала без него, я думаю, что это работало через NSS. Файл common-authсодержит только pam_env, pam_unix и pam_deny.
ColOfAbRiX
Это не имеет смысла, как вы подтвердили работу аутентификации LDAP?
TheFiddlerWins
Вход в систему с использованием учетной записи LDAP и мониторинг журнала серверов ldap. nscd (кэширование) отключено
ColOfAbRiX