Jak skonfigurować i używać PAM w systemie Linux
Linux-PAM (skrót od Pluggable Authentication Modules, który wyewoluował z architektury Unix-PAM) to potężny zestaw współdzielonych bibliotek używanych do dynamicznego uwierzytelniania użytkownika w aplikacjach (lub usługach) ) w systemie Linux.
Integruje wiele modułów uwierzytelniania niskiego poziomu w interfejs API wysokiego poziomu, który zapewnia dynamiczną obsługę uwierzytelniania dla aplikacji. Umożliwia to programistom pisanie aplikacji wymagających uwierzytelniania, niezależnie od podstawowego systemu uwierzytelniania.
Wiele nowoczesnych dystrybucji Linuksa domyślnie obsługuje Linux-PAM (zwany dalej „PAM”). W tym artykule wyjaśnimy jak skonfigurować zaawansowany PAM w systemach Ubuntu i CentOS.
Zanim przejdziemy dalej, zauważ, że:
- Jako administrator systemu najważniejszą rzeczą jest opanowanie sposobu, w jaki pliki konfiguracyjne PAM definiują połączenie między aplikacjami (usługami) a wymiennymi modułami uwierzytelniającymi (PAM), które wykonują rzeczywiste zadania uwierzytelniania. Nie musisz koniecznie rozumieć wewnętrznego działania PAM.
- PAM może poważnie zmienić bezpieczeństwo Twojego systemu Linux. Błędna konfiguracja może spowodować częściowe lub całkowite zablokowanie dostępu do systemu. Na przykład przypadkowe usunięcie plików konfiguracyjnych w /etc/pam.d/* i/lub /etc/pam.conf może zablokować dostęp do własny system!
Jak sprawdzić, czy program obsługuje PAM
Aby zastosować PAM, aplikacja/program musi „obsługiwać PAM”; musi zostać napisany i skompilowany specjalnie do użycia PAM. Aby dowiedzieć się, czy program jest „obsługujący PAM”, czy nie, sprawdź, czy został skompilowany z biblioteką PAM za pomocą polecenie ldd.
Na przykład sshd:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
Jak skonfigurować PAM w systemie Linux
Główny plik konfiguracyjny PAM to /etc/pam.conf, a katalog /etc/pam.d/ zawiera pliki konfiguracyjne PAM dla każdą aplikację/usługę obsługującą PAM. PAM zignoruje plik, jeśli katalog istnieje.
Składnia głównego pliku konfiguracyjnego jest następująca. Plik składa się z listy reguł zapisanych w jednej linii (reguły można rozszerzyć za pomocą znaku ucieczki „\ ”
), a komentarze są poprzedzone znakiem „# ”
znaczniki i przedłużyć do następnego końca linii.
Format każdej reguły to zbiór tokenów oddzielonych spacjami (w przypadku pierwszych trzech wielkość liter nie jest uwzględniana). Wyjaśnimy te tokeny w kolejnych sekcjach.
service type control-flag module module-arguments
Gdzie :
- usługa: rzeczywista nazwa aplikacji.
- typ: typ modułu/kontekst/interfejs.
- flaga kontrolna: wskazuje zachowanie PAM-API w przypadku, gdy modułowi nie powiedzie się zadanie uwierzytelnienia.
- moduł: bezwzględna nazwa pliku lub względna nazwa ścieżki PAM.
- argumenty modułu: oddzielona spacjami lista tokenów służących do kontrolowania zachowania modułu.
Składnia każdego pliku w /etc/pam.d/ jest podobna do składni pliku głównego i składa się z linii w następującej formie:
type control-flag module module-arguments
To jest przykład definicji reguły (bez argumentów modułu) znalezionej w pliku /etc/pam.d/sshd, która uniemożliwia logowanie przez użytkownika innego niż root podczas /etc/nologin istnieje:
account required pam_nologin.so
Zrozumienie grup zarządzania PAM i flag kontrolnych
Zadania uwierzytelniania PAM są podzielone na cztery niezależne grupy zarządzania. Grupy te zarządzają różnymi aspektami typowego żądania użytkownika dotyczącego usługi z ograniczeniami.
Moduł jest powiązany z jednym z następujących typów grup zarządzania:
- konto: świadczenie usług weryfikacji konta: czy hasło użytkownika wygasło?; czy ten użytkownik ma dostęp do żądanej usługi?.
- uwierzytelnianie: uwierzytelnianie użytkownika i konfigurowanie jego poświadczeń.
- hasło: odpowiadają za aktualizację haseł użytkowników i współpracują z modułami uwierzytelniającymi.
- sesja: zarządzaj działaniami wykonywanymi na początku i na końcu sesji.
Pliki obiektów ładowalnych PAM (moduły) należy umieścić w katalogu: /lib/security/ lub /lib64/security w zależności od architektura.
Obsługiwane flagi kontrolne to:
- warunek: awaria natychmiast przywraca kontrolę do aplikacji, wskazując charakter awarii pierwszego modułu.
- wymagane: wszystkie te moduły są wymagane do powodzenia, aby libpam przywróciło pomyślność aplikacji.
- wystarczający: biorąc pod uwagę, że wszystkie poprzednie moduły powiodły się, sukces tego modułu prowadzi do natychmiastowego i pomyślnego powrotu do aplikacji (awaria tego modułu jest ignorowana).
- opcjonalne: sukces lub porażka tego modułu zazwyczaj nie jest rejestrowana.
Oprócz powyższych słów kluczowych istnieją dwie inne ważne flagi kontrolne:
- include i substack: uwzględnia wszystkie linie danego typu z pliku konfiguracyjnego podanego jako argument tej kontrolki.
Jak ograniczyć dostęp roota do usługi SSH za pośrednictwem PAM
Jako przykład skonfigurujemy sposób używania PAM do wyłączania dostępu użytkownika root do systemu poprzez SSH i programy logowania. W tym miejscu chcemy wyłączyć dostęp użytkownika root do systemu, ograniczając dostęp do usług logowania i sshd.
Możemy skorzystać z modułu /lib/security/pam_listfile.so, który oferuje dużą elastyczność w ograniczaniu uprawnień poszczególnych kont. Otwórz i edytuj plik usługi docelowej w katalogu /etc/pam.d/, jak pokazano.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Dodaj tę regułę w obu plikach.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
Wyjaśnienie tokenów w powyższej regule:
- auth: to typ modułu (lub kontekst).
- wymagany: to flaga kontrolna, która oznacza, że jeśli moduł jest używany, musi przejść pomyślnie, w przeciwnym razie ogólny wynik będzie negatywny, niezależnie od stanu innych modułów.
- pam_listfile.so: to moduł umożliwiający odmowę lub zezwolenie na usługi oparte na dowolnym pliku.
- onerr=succeed: argument modułu.
- item=user: argument modułu określający, co znajduje się w pliku i co należy sprawdzić.
- sense=deny: argument modułu określający akcję, jaką należy podjąć w przypadku znalezienia elementu w pliku. Jeśli element NIE zostanie znaleziony w pliku, żądana jest akcja odwrotna.
- file=/etc/ssh/deniedusers: argument modułu określający plik zawierający jeden element w każdej linii.
Następnie musimy utworzyć plik /etc/ssh/deniedusers i dodać w nim nazwę root:
sudo vim /etc/ssh/deniedusers
Zapisz zmiany i zamknij plik, a następnie ustaw dla niego wymagane uprawnienia:
sudo chmod 600 /etc/ssh/deniedusers
Od tej chwili powyższa reguła będzie informować PAM o sprawdzaniu pliku /etc/ssh/deniedusers i odmawianiu dostępu do usług SSH i logowania każdemu z wymienionych użytkowników.
Jak skonfigurować zaawansowany PAM w systemie Linux
Aby napisać bardziej złożone reguły PAM, możesz użyć prawidłowych flag kontrolnych w następującej formie:
type [value1=action1 value2=action2 …] module module-arguments
Gdzie wartośćN odpowiada kodowi powrotu z funkcji wywołanej w module, dla którego zdefiniowano linię. Obsługiwane wartości można znaleźć w internetowym Przewodniku administratora PAM. Wartość specjalna jest wartością domyślną, co oznacza, że żadna wartość N nie jest wyraźnie wymieniona.
DziałanieN może przyjąć jedną z następujących form:
- ignore: jeśli ta akcja zostanie użyta ze stosem modułów, status zwrotu modułu nie będzie miał wpływu na kod powrotu otrzymywany przez aplikację.
- zły: wskazuje, że kod powrotu należy traktować jako wskazujący awarię modułu. Jeśli ten moduł jako pierwszy na stosie ulegnie awarii, jego wartość statusu zostanie użyta jako wartość całego stosu.
- umrzeć: odpowiednik złego, ale może zakończyć stos modułów i PAM natychmiast powróci do aplikacji.
- ok: to instruuje PAM, że administrator systemu uważa, że ten kod powrotu powinien bezpośrednio wpływać na kod powrotu pełnego stosu modułów.
- gotowe: odpowiednik ok, ale może zakończyć stos modułów i PAM natychmiast powróci do aplikacji.
- N (liczba całkowita bez znaku): odpowiednik ok, ale może przeskoczyć następne N modułów na stosie.
- Resetuj: ta akcja czyści całą pamięć stanu stosu modułów i uruchamia ponownie z następnym ułożonym modułem.
Każde z czterech słów kluczowych: wymagane; wymagany; wystarczający; i opcjonalne, mają równoważne wyrażenie pod względem składni [...]
, które pozwalają na pisanie bardziej skomplikowanych reguł i są to:
- wymagane: [success=ok new_authtok_reqd=ok ignorowanie=ignore default=bad]
- wymaganie: [success=ok new_authtok_reqd=ok ignorowanie=ignore default=die]
- wystarczający: [success=done new_authtok_reqd=done default=ignore]
- opcjonalne: [success=ok new_authtok_reqd=ok default=ignore]
Poniżej znajduje się przykład z nowoczesnego systemu CentOS 7. Rozważmy te reguły z pliku /etc/pam.d/postlogin PAM:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1] pam_lastlog.so nowtmp showfailed
session optional pam_lastlog.so silent noupdate showfailed
Oto kolejna przykładowa konfiguracja z pliku PAM /etc/pam.d/smartcard-auth:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Aby uzyskać więcej informacji, zobacz stronę podręcznika pam.d:
man pam.d
Na koniec, obszerny opis składni pliku konfiguracyjnego i wszystkich modułów PAM można znaleźć w dokumentacji Linux-PAM.
Streszczenie
PAM to potężny interfejs API wysokiego poziomu, który umożliwia programom wymagającym uwierzytelniania autentycznych użytkowników korzystanie z aplikacji w systemie Linux. Jest potężny, ale bardzo trudny do zrozumienia i użycia.
W tym artykule wyjaśniliśmy, jak skonfigurować zaawansowane funkcje PAM w Ubuntu i CentOS. Jeśli masz jakieś pytania lub uwagi, którymi chcesz się podzielić, skorzystaj z poniższego formularza opinii.