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