PAM

Wprowadzenie

System PAM jest bardzo ważnym rozszerzeniem mechanizmów bezpieczeństwa w systemie GNU/Linux. Jego uniwersalnoœć pozwala na opracowanie specjalnych metod autentykacji dla istniejšcych usług w sieciach komputerowych, a otwarta architektura umożliwia jego dowolnš rozbudowę i wsparcie dla nowych technologii autentykacji.

PAM (Pluggable Authentication Modules - Wstawialne Moduły Autentykacji) jest elastycznym systemem autentykacji użytkowników umożliwiajšcym tworzenie aplikacji całkowicie niezależnych od samej metody autentykacji. Nie narzuca on żadnych metod oraz nie ma ograniczeń na ich tworzenie. PAM używa zestawu "modułów autentykacyjnych", które umożliwiajš implementację dowolnych metod autentykacji i używanie ich z dowolnymi aplikacjami.

System został rozwinięty w firmie SunSoft i przystosowany do pracy w systemie Solaris. Jego standard jest opisany przez V.Samara i R.Schemersa w dokumencie OSF RFC 86.0. "Unified Login with Pluggable Authentication Modules (PAM)".

Za implementację systemu dla platformy GNU/Linux jest odpowiedzialny Andrew G.Morgan (morgan@ftp.kernel.org). Ta implementacja nosi nazwę Linux-PAM i posiada ona szereg rozszerzeń względem oryginalnej implementacji, takie jak modularna konfiguracja i możliwoœć hierarchicznej autentykacji.

Integracja PAM w dystrybucji systemu GNU/Linux jest złożona i wymaga rekompilacji wielu programów. W zwišzku z tym nie wszystkie dystrybucje używajš PAM. PAM jest wykorzystywany w Caldera Open Linux, Debian/GNU, RedHat Linux (wersje 3.04 wzwyż), SuSE Linux oraz w systemie FreeBSD.

Opis PAM

Linux-PAM jest systemem bibliotek, które zajmujš sie zadaniami autentykacji aplikacji (usług) systemu. Biblioteka daje stabilny i ogólny interfejs (API - Application Interface), któremu podlegajš w zadaniach autentykacji programy dajšce przywileje

Aplikacja jest wyposażona w interfejs do biblioteki Linux-PAM i jest niezależna od metody autentykacji. Aby zweryfikować tożsamoœć użytkownika, aplikacja komunikuje się z Linux-PAM. System PAM okreœla na podstawie konfiguracji (odpowiedniej dla danej aplikacji) sposób autentykacji i okreœla które moduły i w jaki sposób będę realizowały autentykację. Aplikacja może opcjonalnie udostępniać PAM własny moduł realizujšcy konwersację z modułami PAM. Po ustaleniu uprawnień PAM przesyła odpowiednie informacje o uprawnieniach użytkownika do aplikacji.

Uproszczony schemat architektury z wykorzystaniem PAM:

Schemat architektury PAM dla wielopoziomowej autentykacji:

Moduły PAM

System PAM ma cztery podstawowe grupy modułów, zarzšdzajšce czterema grupami zadań: Dzięki systemowi PAM to administrator ma możliwoœć pełnego wyboru mechanizmów autentykacji dla całego systemu i każdej aplikacji z osobna. Przez odpowiedniš konfigurację można całkowicie wyłšczyć autentykację (przy pomocy modułu pam_permit). Z drugiej strony można wymusić wieloetapowš autentykację na podstawie hasła jednorazowego (pam_pwgen), systemu LDAP (pam_ldap), linii papilarnych (pam_biomouseplus), kart dostępu (SecureID, pam_cryptocard), czy skaningu siatkówki.

Konfiguracja systemu

Konfiguracja PAM znajduje się w pliku /etc/pam.conf lub w plikach w katalogu /etc/pam.d. Ta druga wersja jest nowsza i wygodniejsza. Składnia plików konfiguracyjnych jest praktycznie w obydwóch przypadkach identyczna.

Plik pam.conf
Plik konfiguracyjny /etc/pam.conf składa się z lini o następujšcej składni:
[service-name] [module-type] [control-flag] [module-path] [arguments]

W przypadku plików w katalogu /etc/pam.d różnica jest tylko taka, że każdy plik odpowiada jednej usłudze. Nazwa pliku jest taka sama jak pole service-name, a linie w pliku zawierajš pozostałe cztery pola. Każda linia odpowiada pojedynczemu modułowi PAM dla konkretnej usługi. Stosowanie plików konfiguracyjnych w katalogu /etc/pam.d jest rozwišzaniem bardziej uniwersalnym i zalecanym.

Znaczenie pól jest następujšce:

Stosowanie plików konfiguracyjnych w katalogu /etc/pam.d ma różne zalety, takie jak łatwiejsza rekonfiguracja, możliwoœć używania linków symbolicznych dla tych samych metod autentykacji, oraz ułatwione zarzšdzanie pakietami (każdy pakiet DEB, lub RPM może dodawać własny plik z metodš autentykacji).

Narzędzia i moduły
O sile systemu PAM stanowi uniwersalne API umożliwiajšce rozwijanie różnych modułów autentykacji. W standardowej dystrybucji Linux-PAM jest ponad 20 różnych modułów. Oprócz tego dostępnych jest ponad 40 modułów dodatkowych dostępnych jako osobne pakiety. Listę tych wszystkich modułów, wraz z opisem można znaleŸć na stronach projektu Linux-PAM. Poniższa lista zawiera informację o niektórych wybranych modułach:

Moduł pam_unix realizuje wszystkie funkcje zwišzane z tradycyjnym modelem autentykacji w Uniksie, opartym na pliku /etc/passwd. Dzięki niemu można skonfigurować system używajšcy PAM tak, aby naœladował działanie systemu haseł Uniksa.

Moduły dodatkowe umożliwiajš wprowadzenie rozproszonego systemu autentykacji wykorzystujšcego sieć komputerowš. Dostępne sš moduły umożliwiajšce połšczenia z sieciš opartš na serwisach LDAP, NDS czy Samba.

Przykłady zastosowań

Liczba dostępnych modułów, a co za tym idzie liczba możliwych sposobów ich konfiguracji jest tak duża, że trudno w sposób wyczerpujšcy omówić ich praktyczne konfigurowanie. Można co najwyżej podać kilka konkretnych przykładów konfiguracji.

Po pierwsze, konfiguracja PAM powinna zawierać plik /etc/pam.d/other okreœlajšcy domyœlne zachowanie systemu dla usług nie majšcych osobnych metod autentykacji.

Plik /etc/pam.d/other może wyglšdać następujšco:
------------------------------------------------------------------------
auth required /lib/security/pam_warn.so
auth required /lib/security/pam_unix.so
account required /lib/security/pam_warn.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_warn.so
password required /lib/security/pam_unix.so
session required /lib/security/pam_warn.so
session required /lib/security/pam_unix.so
------------------------------------------------------------------------

Przy takiej konfiguracji usługi nie majšce własnych metod autentykacji będš obsługiwane w standardowy sposób, na podstawie pliku /etc/passwd. Dodatkowo, moduł pam_warn będzie rejestrował dostęp do usługi przez Syslog.
Jeżeli w powyższym przykładzie każde wystšpienie modułu pam_unix.so, zastšpi się przez pam_deny.so to dostęp do usług, które nie majš zdefiniowanych osobno metod autentykacji będzie zabroniony.

Przykład ilustruje ważnš cechę PAM, a mianowicie hierarchiczne łšczenie modułów. Dla każdej usługi (w tym przypadku other) i każdego typu modułu (na przykład auth) można podać kilka modułów, jeden po drugim (ang. stacking). W takim przypadku sš one wykonywane kolejno i w zależnoœci od wyniku działania konkretnego modułu możliwe jest przerywanie sekwencji. Przy pomocy modułu pam_if istnieje nawet możliwoœć warunkowego wykonywania sekwencji modułów.

Przykład rozbudowanej konfiguracji PAM dla programu login może wyglšdać tak:
------------------------------------------------------------------------
auth requisite /lib/security/pam_unix.so nullok
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so
auth required /lib/security/pam_env.so
auth required /lib/security/pam_mail.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_unix.so
session required /lib/security/pam_unix.so
session required /lib/security/pam_limits.so
------------------------------------------------------------------------

W trakcie autentykacji jest sprawdzany terminal z którego użytkownik się loguje, istnienie blokady logowania, ustawiane jest œrodowisko pracy i wyœwietlana jest informacja o poczcie elektronicznej. Parametry sesji sš regulowane w zależnoœci od dostępnych zasobów.

Inny, prosty przykład, wykorzystujšcy listę użytkowników uprawnionych do logowania jest następujšcy:
------------------------------------------------------------------------
auth required /lib/security/pam_listfile.so onerr=fail item=user sense=allow file=/etc/pam-login_users
auth required /lib/security/pam_unix.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_unix.so
session required /lib/security/pam_unix.so
------------------------------------------------------------------------

Przykład konfiguracji usługi Ftp z uwzględnieniem dostępu anonimowego:
------------------------------------------------------------------------
ftpd auth sufficient /usr/lib/security/pam_ftp.so
ftpd auth required /usr/lib/security/pam_unix_auth.so use_first_pass
ftpd auth required /usr/lib/security/pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ftpusers
------------------------------------------------------------------------

Pierwszy z modułów realizuje dostęp przez anonimowe Ftp, drugi typowy dostęp dla użytkowników, a trzeci sprawdza, czy użytkownik nie ma zabronionego dostępu do usługi w pliku /etc/ftpusers.
W przypadku użycia opcji debug lub modułu pam_warn.so system PAM rejestruje zdarzenia przy pomocy Syslog. Te komunikaty mogš wyglšdać następujšco:
login: pam_unix session started for user root, service login
xdm: pam_unix session finished for user gjn, service xdm

pomoc do PAMa