SYSTEMY
OPERACYJNE:
PAM –
Opis modułów i konfiguracji
Piotr
Zub
pz197829@students.mimuw.edu.pl
5.01.2003
SPIS TREŚCI:
1.KONFIGURACJA PRZY POMOCY PLIKU /etc/pam.conf
1.1 Notacja skrócona
1.2 Notacja szczegółowa
2. KONFIGURACJA W OPARCIU O KATALOG /etc/pam.d
3. PRZYKŁADY UŻYCIA
4. WYBRANE MODUŁY
4.1 pam_access
4.2 pam_deny
4.3 pam_unix
4.4 pam_ftp
4.5 pam_listfile
5. Bibliografia
1.KONFIGURACJA PRZY POMOCY PLIKU /etc/pam.conf
Plik konfiguracyjny PAM -a /etc/pam.conf sklada
się z linii o następującej formie:
NAZWA_USŁUGI TYP_MODUŁU FLAGA SCIEŻKA_MODUŁU ARGUMENTY
NAZWA_USŁUGI
Najczęściej jest to nazwa
zplikacji np. 'ftpd', 'login' czy 'su'.
Specjalną nazwa jest 'OTHER'
odnosząca sie do usług nie wyszczególnionych osobno.
TYP_MODUŁU
Istnieją obecnie 4 możliwe
wartości tego pola:
'auth'
Ten typ modułu dostarcza 2 rodzajów autentykacji.
1. Ustala czy użytkownik jest tym za kogo się podaje, żądając
wpisania hasła lub posługując się innymi, mniej lub bardziej wyrafinowanymi
metodami (np. badanie siatkówki oka)
2. Moduł może przyznawać
przynależność "grupową" - niezależnie od mechanizmu linuxowego
opartego o /etc/groups
'account'
Tego typu moduły odpowiedzialne
są na zarządzaniu kontami nie związanymi z autentykacją. Typowym przykładem
jest uzależnianie dostępu do usługi w zależności od pory dnia, danego stanu
zasobów (np. liczby zalogowanych użytkowników) lub też sposobu logowania się
(np. logowanie na roota tylko z konsoli)
'session'
Dotyczy to modułów związanych z
zadaniami wykonywanymi przed i po uzyskaniu dostępu do usługi. Mogą to być
zapisy do logów, montowania itp.
'password'
Tego rodzaju moduły są
potrzebne do aktualizacji 'tokenów autentykacyjnych' przez użytkownika
(najczęściej są to po prostu hasła).
FLAGA
Ten parametr określa w jaki
sposób biblioteka PAMowska bęDzie reagowała na sukces lub porażkę pojedynczego
modułu. Ponieważ moduły mogą być ustawiane na stosie, potrzebne jest ustalenie
ich względnej ważności(np. jedno wywołanie funkcji pam_authenticate()
przez aplikację może pociągać za sobą wywołanie kilku modułów typu 'auth',
przy czym wartość zwracana przez tą funkcje jest wypadkową działania wszystkich
tych modułów razem). Kolejność wywołań modułów jest odpowiada kolejności ich
występowania w pliku /etc/pam.conf (wcześniejsze wpisy najpierw).
1.1 Notacja skrócona
Są dwie możliwości definiowania flag. Pierwsza z nich opiera się na czterech słowach kluczowych: 'required', 'requisite', 'sufficient' i 'optional', ktore są przez bibliotekę PAM interpretowane w następujący sposób:
Moduły obsługiwane są po kolei.
Jeżeli wszystkie 'reqiusite' i 'required' zwrócą sukces wtedy do
aplikacji zwracany jest sukces, ignorując kody zakończenia modułów 'sufficient'
i 'optional' .
Jeżeli żaden z modułów nie jest
oznaczony jako 'required' bądź ' requisite' wtedy do zwrócenia
sukcesu konieczny jest przynajmniej jeden sukces modułu 'sufficient' bądź
'optional'. Jeżeli wszystkie odniosą porażkę zwracany jest kod błędu
pierwszego z nich.
Flagi 'requisite' i 'sufficient'
mają jednak dwa odstępstwa od tej semantyki.
Jeżeli moduł 'requisite' kończy
się porażką wtedy błąd natychmiast zwracany jest do aplikacji z pominięciem
następnych modułów, jednak kod błędu pochodzi od pierwszego zakończonego błędem
modułu typu 'requisite' bądź 'required'.
Jeżeli moduł 'sufficient' zwraca
sukces, wszystkie następujące moduły są ignorowane i do aplikacji zwracany jest
sukces jeśli żaden z wcześniejszych modułów 'required' nie zakończył się
porażką, bądź kod błędu pierwszego takiego modułu w przypadku przeciwnym.
Aplikacja będzie również
powiadomiona o błędzie w przypadku gdy moduł nie istnieje bądź nie może zostać
otwarty. Odpowiedni błąd będzie w takim przypadku przekazany przez syslog.
Poniżej przedstawiona jest przykładowa konfiguracja:
su auth
requisite
/usr/lib/security/pam_inhouse.so.1
su auth required
/usr/lib/security/pam_unix.so.1
debug
login auth required
/usr/lib/security/pam_unix.so.1
debug
login auth optional
/usr/lib/security/pam_inhouse.so.1
rlogin auth sufficient
/usr/lib/security/pam_rhosts_auth.so.1
rlogin auth required
/usr/lib/security/pam_unix.so.1
1.2 Notacja szczegółowa
Drugim sposobem zapisu flag
jest użycie notacji [wartość1=akcja1 wartość2=akcja2 ...] gdzie wartość
jest jedną z możliwych wartości zwracanych przez moduł np. success,
open_err, module_unknown, a akcja - żadaną akcją podjętą przez bibliotekę
PAM np. ok, ignore, die.
A o to równoważne zapisy przy
użyciu obu składni:
·
required <=> [success=ok new_authtok_reqd=ok ignore=ignore
default=bad]
·
requisite <=> [success=ok new_authtok_reqd=ok ignore=ignore
default=die]
·
sufficient <=> [success=done new_authtok_reqd=done
default=ignore]
·
optional <=> [success=ok new_authtok_reqd=ok default=ignore]
SCIEŻKA_MODUŁU
absolutna, lub względna
(domyślnie zaczynająca sie w /lib/security ) ścieżka.
ARGUMENTY
Argumenty dzielą się na
specyficzne dla danego modułu oraz generyczne. W przypadku otrzymania
niezrozumiałego dla siebie argumentu moduł musi wypisać do sysloga odpowiedni
komunikat o błędzie.
Do typowych generycznych
argumentów należą:
'debug'
Prześlij informację debuggerską
do sysloga
'no_warn'
Nie przesyłaj aplikacji
ostrzerzeń
'use_first_pass'
Nie pytaj użytkownika o hasło.
Zamiast tego użyj hasła otrzymanego przez poprzedni moduł - jeżeli to nie
zadziała użytkownik nie zostanie zautentykowany (dotyczy to tylko modułów typu
'auth' i 'password')
'try_first_pass'
Spróbuj autentykować na
podstawie poprzedniego hasła. Jeśli to nie zadziała spytaj użytkownika o hasło.
'expose_account''
Udostępniaj informacje o koncie
użytkownika.
2.
KONFIGURACJA W OPARCIU O KATALOG /etc/pam.d
W tym katalogu umieszczane są pliki o nazwach
odpowiadających polom NAZWA_USŁUGI, natomiast ich zawartość jest postaci
reszty linii czyli:
TYP_MODUŁU FLAGA SCIEŻKA_MODUŁU
ARGUMENTY
Biblioteka PAM może być skompilowana w jednym z dwóch
trybów:
a) Obecność katalogu /etc/pam.d
powoduje ignorowanie przez bibliotekę pliku /etc/pam.conf (zalecany)
b) Wpisy z /etc/pam.d
przesłaniają te z /etc/pam.conf
Konfiguracja przy pomocy katalogu /etc//pam.d jest
lepsza niż stosowanie pojedynczego pliku z następujących powodów:
- mniejsze prawdopodobieństwo
popełnienia błędu
- łatwiejsza w utrzymaniu -
rekonfiguracja jednej aplikacji bez ryzyka przypadkowego naruszenia drugiej
- możliwość podlinkowania
plików konfiguracyjnych różnych aplikacji w celu utrzymania spójności polityki
bezpieczeństwa
- możliwość limitowania dostępu
do konfiguracji poszczególnych aplikacji
- łatwiejsze zarządzanie
pakietami - przy instalacji nowej aplikacji wystarczy dodać plik /etc/pam.d/<nazwa_aplikacji>
3.
PRZYKŁADY UŻYCIA
-Polityka
Restrykcyjna
#
# default; deny
access
#
OTHER auth
required pam_deny.so
OTHER account
required pam_deny.so
OTHER password required pam_deny.so
OTHER session
required pam_deny.so
-Mniej
restrykcyjna
#
# default;
standard UN*X access
#
OTHER auth
required pam_unix.so
OTHER account
required pam_unix.so
OTHER password required pam_unix.so
OTHER session
required pam_unix.so
To
ustawienie pozwala na udostępnianie usług większości aplikacji w oparciu o plik
haseł, jednak niektóre usługi potrzebują specjalnych wpisów - tak jest w
przypadku aplikacji ftpd umożliwiającej logowanie 'anonymous-ftp':
#
# ftpd; add
ftp-specifics. These lines enable anonymous ftp over
# standard UN*X access (the listfile
entry blocks access to
# users listed in /etc/ftpusers)
#
ftpd auth
sufficient pam_ftp.so
ftpd auth
required pam_unix_auth.so
use_first_pass
ftpd auth
required pam_listfile.so \
onerr=succeed item=user sense=deny
file=/etc/ftpusers
4. WYBRANE MODUŁY
4.1 pam_access
Zawsze zwraca sukces.
4.2 pam_deny
Zawsze zwraca porażkę.
4.3 pam_unix
Należy do wszystkich czterech
typów: account; authentication; password session
To jest standardowy unixowy
moduł autentykacyjny. Używa standardowych wywołań systemowych do uzyskania
informacji o kontach użytkowników oraz do autentykacji. Zwykle wykorzystuje
pliki /etc/passwd i /etc/shadow
Bazując na elementach pliku /etc/shadow:
expire; last_change; max_change; min_change; warn_change, ustala status
konta i hasła użytkownika. Może zaoferować użytkownikowi radę zmiany hasła lub
zwracając wartość PAM_AUTHTOKEN_REQD, opóźnić dostęp do usługi do
momentu zmiany hasła.
#
# Ensure users account and
password are still active
#
login account required
pam_unix.so
Standardowa autentykacja
unixowa. Przyjmowane argumenty to: debug; audit; use_first_pass;
try_first_pass;
#
# Authenticate
the user
#
login auth
required pam_unix.so
Użycie modułu w tym trybie
wykonuje zadanie zmiany hasła użytkownika.
Standardowe użycie w połączeniu
z modułem pam_cracklib
#
# Change the
users password
#
passwd password
required pam_cracklib.so
retry=3 minlen=6 difok=3
passwd password
required pam_unix.so
use_authtok nullok md5
Moduł pam_cracklib obsługuje
tylko tryb 'password' i służy do testowania bezpieczeństwa haseł w
oparciu o bibliotekę libcrack, oraz słownik systemowy /usr/lib/cracklib_dict.
Przeprowadzany jest test podobieństwa hasła z użytym wcześniej zapisanym w /etc/security/opasswd.
Argument diffok oznacza minimalną liczbę znaków które nie mogą
występować w starym haśle.
Opcja 'use_authok'
zmusza moduł do ustawienia hasła dostarczonego przez poprzedni moduł typu 'password'
ze stosu.,'nullok' ustawia akceptację haseł pustych, a 'md5' kodowanie
funkcją md5 zamiast standardową - crypt
Po prostu zapisuje nazwę
użytkownika i usługę do sysloga na początku i na końcu sesji.
#
# session opening
and closing
#
login session
required pam_unix.so
4.4 pam_ftp
Ten
moduł posiada wyłącznie komponent 'authentication' i służy do
przechwytywania nazwy i hasła użytkownika. Jeżeli nazwa użytkownika (PAM_USER)
jest 'ftp' lub 'anonymous', hasło jest dzielone na podstawie delimitera @ na
część PAM_RUSER i PAM_RHOST i moduł zwraca sukces. W przeciwnym wypadku
ustawia element PAM_AUTHTOK na podane hasło w celu umożliwienia
autoryzacji następnym modułom i zwraca porażkę.
PAM_AUTHOK,
PAM_USER - to sa elementy struktury typu pam _handle_t ktora jest przekazywana przy każdym
wywołaniu funkcji biblioteki PAM przez aplikację i konsekwentnie przy wywolaniu
funkcji z odpowiedniego modułu, na przykład:
aplikacja
wywołuje funkcję:
int pam_authenticate(pam_handle_t *pamh, int flags);
biblioteka
sięga do pliku konfiguracyjnego i wywołuje dla kolejnych modułów typu 'auth' funkcję:
int pam_sm_authenticate(pam_handle_t
*pamh, int flags, int argc, const char **argv);
argv to
lista argumentów przekazana do modułu w pliku konfiguracyjnym.
ciekawostka:
argv[0] to NIE jest nazwa modułu!
inne elementy pam_handle_t:
PAM_SERVICE The service name.
PAM_USER The user name.
PAM_AUTHTOK The user
authentication token.
PAM_OLDAUTHTOK The old user authentication token.
PAM_TTY The tty name.
PAM_RHOST The remote
host name.
PAM_RUSER The remote
user name.
PAM_CONV The pam_conv structure.
PAM_USER_PROMPT The default prompt used
by
pam_get_user().
4.5 pam_listfile
Ten
moduł służy wyłącznie do autentykacji i umożliwia przyznawanie lub
odmowę dostępu do usługi w zależności od zawartosci pewnego pliku.
Argumenty:
onerr=succeed|fail;
sense=allow|deny; file=filename;
item=user|tty|rhost|ruser|group|shell apply=user|@group
Moduł
ten na szuka odopwiedniego elementu ('item') w pliku 'filename' i
jeśli go znajdzie podejmuje akcje zdefiniowaną przez 'sense'. W
przypadku błędu (np. plik 'filename' nie istnieje) podejmowana jest
akcja zdefiniowana w 'onerr'. Jeżeli 'item' nie jest ustawiony na
'group' ani 'user' dostęp może być dodatkowo limitowany
przez parametr 'apply'.
Przykład:
patrz sekcja: 3. PRZYKŁADY UŻYCIA
5.
BIBLIOGRAFIA
5.1http://www.kernel.org/pub/linux/libs/pam
5.2http://www.sun.com/software/solaris/pam
5.3Andrew G. Moragan "The Linux-PAM Systems
Administrators' Guide vo.77"
DOTATEK
A: SCHEMAT KOMUNIKACJI: APLIKACJA -
BIBLIOTEKA PAM - MODUŁY PAM