W ostatnich dniach skonfigurowałem system Linux z uwierzytelnianiem LDAP i wszystko działa dobrze, ale wciąż jest coś, czego tak naprawdę nie mogę zrozumieć w odniesieniu do NSS i PAM, również po wielu badaniach.
Powołując się:
NSS pozwala administratorom określić listę źródeł, w których pliki uwierzytelniania, nazwy hostów i inne informacje będą przechowywane i wyszukiwane
i
PAM to zestaw bibliotek, które zapewniają konfigurowalną platformę uwierzytelniania dla aplikacji i systemu operacyjnego
To, czego nie rozumiem, to to, jak PAM i NSS współpracują ze sobą. W tej książce architektura została wyjaśniona całkiem dobrze: konfiguruję PAM do korzystania pam_ldap
z kont LDAP i pam_unix
kont lokalnych, a następnie konfiguruję nsswitch.conf
pobieranie informacji z plików lokalnych i LDAP.
Jeśli dobrze zrozumiałem, LDAP jest używany dwa razy: najpierw pam_ldap
przez NSS, który sam jest wywoływany z pam_unix
. Czy to prawda? Czy LDAP naprawdę jest używany dwukrotnie? Ale dlaczego muszę skonfigurować zarówno NSS, jak i PAM? Wyjaśniam, że PAM wykonuje inne zadania niż NSS i jest używany przez inne programy. Ale wtedy powinno być możliwe używanie tylko NSS lub tylko PAM, jak czytałem na tej stronie .
Więc poeksperymentowałem trochę i najpierw próbowałem usunąć LDAP z nsswitch.conf
(a uwierzytelnianie zatrzymało się, jakby tylko pam_ldap nie wystarczyło do wykonania zadania). Następnie ponownie włączyłem LDAP w NSS i usunąłem go z konfiguracji PAM (tym razem wszystko działało dobrze, jakby pam_ldap
było bezużyteczne, a NSS wystarczy do uwierzytelnienia użytkownika).
Czy jest ktoś, kto może mi pomóc to wyjaśnić? Z góry bardzo dziękuję.
AKTUALIZACJA
Właśnie próbowałem coś teraz. Ponownie usunąłem wszystkie pam_ldap
wpisy we wszystkich polach konfiguracji pam, a także usunąłem shadow: ldap
z nsswitch.conf
. Jak teraz w całym systemie są tylko linie: passwd: ldap files
i group: ldap files
w nsswitch.conf
. Cóż ... logowanie do użytkowników LDAP działa idealnie, te dwie linie (plus /etc/ldap.conf
) wystarczą, aby skonfigurować uwierzytelnianie LDAP.
Z mojej wiedzy PAM jest niezależny od NSS, ale moje testy wykazały, że nie. Więc zadaję sobie pytanie, czy można całkowicie wyłączyć NSS i używać tylko PAM?
źródło
getent shadow | grep LDAPUSER
grep LDAPUSER /etc/shadow
Odpowiedzi:
Pomaga rozbić takie rzeczy w twojej głowie:
NSS - oparty na modułach system do kontrolowania, w jaki sposób bazy danych na poziomie systemu operacyjnego są montowane w pamięci. Obejmuje to (ale nie tylko)
passwd
,group
,shadow
(jest to ważne, aby pamiętać) ihosts
. Wyszukiwania UID korzystają zpasswd
bazy danych, a wyszukiwania GID korzystają zgroup
bazy danych.PAM - modułowy system umożliwiający uwierzytelnianie i rozliczanie w oparciu o usługi. W przeciwieństwie do NSS, nie rozszerzasz istniejących baz danych; Moduły PAM mogą wykorzystywać dowolną logikę, jakkolwiek loginy powłoki nadal zależą od
passwd
igroup
baz danych NSS. (zawsze potrzebujesz wyszukiwania UID / GID)Ważną różnicą jest to, że PAM nie robi nic samodzielnie. Jeśli aplikacja nie łączy się z biblioteką PAM i wykonuje do niej połączenia, PAM nigdy się nie przyzwyczai. NSS jest rdzeniem systemu operacyjnego, a bazy danych są dość wszechobecne dla normalnego działania systemu operacyjnego.
Teraz, gdy mamy to na uboczu, oto krzywa: chociaż pam_ldap jest popularnym sposobem uwierzytelniania na podstawie LDAP, nie jest to jedyny sposób.
shadow
wskazuje na usługę ldap wewnątrz/etc/nsswitch.conf
, wszelkie uwierzytelnianie, które działa na bazie cienia, zakończy się powodzeniem, jeśli atrybuty tych mapowań pól cienia (w szczególności pole zaszyfrowanego hasła) są obecne w LDAP i pozwolą na logowanie.pam_unix.so
może to spowodować uwierzytelnienie w oparciu o protokół LDAP, ponieważ uwierzytelnia się ono w bazie danych w tle. (który jest zarządzany przez NSS i może wskazywać na LDAP)pam_sss.so
, która podpina sięsssd
), możliwe jest, że odniesienie do LDAP będzie możliwe.źródło
passwd
igroup
(NSS), co oznacza, że muszą znajdować się w systemie lokalnym (/etc/passwd
+/etc/group
) lub uzyskać za pośrednictwemldap
modułu NSS.getent passwd
i włączgetent group
obsługę LDAP dla obu baz danych w/etc/nsswitch.conf
. Następnie wyłącz LDAP w tym pliku i ponownie uruchom oba polecenia.getent
to polecenie do zrzucania baz danych NSS.NSS służy do wyliczania informacji o usługach / użytkownikach (do jakiej grupy należysz, gdzie znajduje się Twój katalog domowy itp.). PAM określa, co zrobić z tymi informacjami.
Jeśli chcesz używać LDAP do uwierzytelniania , potrzebujesz pam_ldap. Jeśli używasz czegoś innego (konta lokalne, Kerberos itp.), Możesz tego nie robić.
Więc robią różne rzeczy. NSS otrzymuje informacje, PAM określa, kto może zrobić, co raz, gdy informacje te zostaną uzyskane.
źródło
common-auth
zawierał tylko pam_env, pam_unix i pam_deny.