Pluggable Authentication Modules

Transkrypt

Pluggable Authentication Modules
PAM
Pluggable Authentication Modules
Co to jest PAM
●
Sens:
–
●
umożliwienie elastycznej kontroli dostępu do systemu i
programów przez wprowadzenie możliwości definiowania
własnych modułów dostępu.
Koncepcja działania
–
ładowalne moduły autoryzacji (Pluggable Authorization
Modules, PAM), popularnie zwane wtyczkami, zawierające
specjalizowane metody identyfikacji
–
Oprócz autoryzacji mają dodatkowe możliwości, takie jak
nakładanie dodatkowych ograniczeń (np. na liczbę
jednoczesnych loginów).
Poziomy działania, pierwszy
●
Programista aplikacji:
–
umieszcza w programie (np. /bin/login) odpowiednie
wywołania funkcji dla ładowalnych modułów
autoryzacji (no i linkuje program z odpowiednią
biblioteką).
Drugi
●
Programista modułów:
–
pisze ładowalne moduły autoryzacji zawierające
specjalizowane metody identyfikacji (np. linie
papilarne), które będą używane w aplikacjach.
Poziom trzeci i najważniejszy:)
●
Administrator:
–
instaluje i modyfikuje pliki konfiguracyjne dla
aplikacji i modułów autoryzacji (i zapewne także
instaluje moduły w systemie).
API PAM
●
●
API systemu PAM dzieli się na 4 w miarę
niezależne grupy/usługi:
–
auth: zarządzanie autoryzacją i identyfikacją,
–
account: zarządzanie kontami,
–
session: zarządzanie sesjami (np. limity),
–
password: zarządzanie aktualizacją żetonów
identyfikujących (np. haseł).
Niektóre programy, np. login, potrzebują usług z
wszystkich czterech grup. Inne, takie jak
passwd, mogą korzystać tylko z wybranych
grup.
Konfiguracja
●
●
●
Każda aplikacja chcąca używać PAM ma plik
konfiguracyjny zawierający listę modułów dla
procesu uwierzytelniania. Pliki te znajdują się
w katalogu /etc/pam.d (w starych wersjach
mógł być jeden wspólny plik /etc/pam.conf,
obecnie jest on używany tylko gdy brak
katalogu /etc/pam.d), na przykład dla /bin/login
login plikiem tym będzie /etc/pam.d/login.
Plik konfiguracyjny other zawiera wartości
domyślne (zwykle zabrania wszystkiego).
Konfiguracja c.d.
●
Wpisy w plikach konfiguracyjnych mają postać:
–
●
<grupa> <kategoria> <moduł>
np.:
–
auth
required
pam_securetty.so
–
auth
auth
required
pam_stack.so service=system-
Kategorie
●
●
●
●
requisite niepowodzenie natychmiast wraca do
aplikacji z błędem,
required każdy taki moduł musi zwrócić sukces,
sufficient sukces takiego modułu i wszystkich
jego poprzedników, powoduje zwrócenie sukcesu
do aplikacji (niepowodzenie jest ignorowane),
optional ,,ozdobnik'' bez wpływu na sukces lub
niepowodzenie.
Moduł pam_stack.so i inne
●
●
●
Moduł pam_stack.so odgrywa specjalną rolę --powoduje dołączenie list z innego podanego
pliku --- zwykle system-auth.
Poszczególne moduły ładowane są kolejno,
wiele z nich ma pliki konfiguracyjne zawarte w
katalogu /etc/security.
Modułów PAM jest wiele, są one typu opensource, więc można je samodzielnie
modyfikować.
Moduły, przykłady
●
Moduł pam_access zarządza klasycznym
logowaniem do systemu lub aplikacji. W celu
uaktywnienia modułu pam_access dla aplikacji login
należy do jej pliku konfiguracyjnego dodać na końcu
grupy account wiersz:
–
●
account required pam_access.so
Moduł pam_access ma plik sterujący
/etc/security/access.conf. Każdy wiersz w nim ma
postać
–
<uprawnienie> : <użytkownicy> : <miejsca>
–
Uprawnienie to jeden ze znaków + lub -. Nazwy
użytkowników można oddzielać spacjami. Miejsce to
nazwa komputera, LOCAL oznacza dostęp lokalny.
Limity
●
●
Do nakładania limitów służy moduł pam_limits:
–
session required pam_limits.so
–
z plikiem konfiguracyjnym limits.conf.
Składnia wierszy:
–
<dziedzina> <typ> <ograniczenie> <wartość>
–
gdzie <dziedzina> określa użytkowników lub grupy, <typ>
to hard lub soft, zaś <ograniczenie> to np. fsize lub nproc.
Aby pozwolić użytkownikowi guest tylko na jednokrotne
logowanie, należy tam wpisać
●
guest hard maxlogins 1
Inne
●
●
●
Moduł pam_deny odmawia dostępu (zawsze
zwraca niepowodzenie).
Moduł pam_warn rejestruje w syslogu
informacje o wykonywanej operacji.
Moduł pam_securetty ogranicza do konsoli
możliwość logowania się na konto root.
PAM we własnym programie
●
PAM można używać również we własnych
aplikacjach. Popatrzmy na przykład w języku C:
#include <security/pam_appl.h>
#include <security/pam_misc.h>
retval = pam_authenticate(pamh, 0);
próba autoryzacji */
if (retval != PAM_SUCCESS) {
#include <stdio.h>
static struct pam_conv login_conv = {
fprintf(stderr, "Chyba się nie
udało!\n");
misc_conv,
/* przykładowa
funkcja konwersacji z libpam_misc */
exit(2);
}
NULL
/* ewentualne
dane aplikacji (,,domknięcie'') */
};
void main () {
else
fprintf(stderr, "Świetnie Ci
poszło.\n");
pam_handle_t* pamh = NULL;
int retval;
char *username = NULL;
printf("OK\n");
aplikacji */
retval = pam_start("login", username,
&login_conv, &pamh);
if (pamh == NULL || retval !=
PAM_SUCCESS) {
fprintf(stderr, "Error when starting:
%d\n", retval);
exit(1);
}
/* rzekomy kod
pam_end(pamh, PAM_SUCCESS);
exit(0);
}
/*
Opis programu
●
●
●
Po wywołaniu pam_start zmienna pam będzie zawierać
dowiązanie do obiektu
PAM, który będzie argumentem wszystkich kolejnych wywołań
funkcji PAM
Zmienna pam_conv to struktura zawierająca informacje o funkcji
do konwersacji
●
z użytkownikiem -- tu użyliśmy najprostszej bibliotecznej funkcji
●
misc_conv, można jednak użyć własnej
●
Pierwszy argument funkcji pam_start to nazwa aplikacji,
potrzebna do odnalezienia pliku konfiguracyjnego
Opis programu c.d., kompilacja
●
●
●
●
Funkcja pam_authenticate uruchamia ,,motor''
sprawdzania PAM – usługę
Dla pozostałych usług/grup istnieją analogiczne
funkcje
Funkcja pam_end kończy sesję
Przy kompilacji i linkowaniu należy pamiętać o
bibliotekach libpam i libpam_misc, np.
–
gcc -o tescik tescik.c -lpam -lpam_misc
–
ew. apt-get install libpam0g-dev
Zadanie
●
●
●
Logowanie na konto user1 przez ssh niech
będzie możliwe od 19 do 19:30
Ogranicz liczbę procesów dla user1 do 100
Wprowadź sprawdzanie złożoności hasła dla
user1 (słownik) oraz dodatkowe warunki:
–
Minimalna długość hasła 12 znaków
–
Przynajmniej jedna wielka litera i cyfra

Podobne dokumenty