Studiuję PAM i jestem trochę nieświadomy znaczenia jakiejś kombinacji flag kontrolnych. Z dokumentacji Red Hat mamy:
wymagana
awaria takiego PAM ostatecznie doprowadzi do niepowodzenia zwracania PAM-API, ale dopiero po wywołaniu pozostałych stosowych modułów (dla tej usługi i typu)wymagane,
jak wymagane, jednak w przypadku, gdy taki moduł zwraca awarię, kontrola jest zwracana bezpośrednio do aplikacji.wystarczający
sukces takiego modułu jest wystarczający, aby spełnić wymagania uwierzytelnienia stosu modułów (jeśli poprzedni wymagany moduł nie przejdzie pomyślnie, sukces tego modułu jest ignorowany). Awaria tego modułu nie jest uważana za krytyczną dla spełnienia wniosku, że ten typ się powiódł. Jeśli moduł się powiedzie, środowisko PAM natychmiast zwraca sukces aplikacji bez próbowania innych modułów.
Tak więc, moim zdaniem, jeśli moduł requisite
ulegnie awarii, cały stos modułów nie zostanie przeanalizowany, a kontrola natychmiast powróci do aplikacji. Jeśli moduł się sufficient
powiedzie, reszta stosu modułów nie zostanie przeanalizowana, a kontrola natychmiast powróci do aplikacji. Jeśli moduł required
ulegnie awarii, cały stos zostanie przeanalizowany.
Teraz nie rozumiem, jakie będzie zachowanie, gdy jeden moduł required
ulegnie awarii, a inny moduł odniesie sufficient
sukces.
źródło
required
przedmiot zawiódł, dlaczegoPAM
trzeba ciągle przechodzić przez stos? czy to w końcu i tak się nie powiedzie?Moim zdaniem
required
flaga kontrolna musi być zawsze skuteczna, aby moduł mógł odnieść sukces.sufficient
Moduł oflagowany jest ignorowana, jeśli to się nie powiedzie. Jeśli zakończy się powodzeniem i żaden zrequired
powyższych flagowanych modułów nie zawiódł, nie należy sprawdzać innych modułów tego samego typu, a moduł uznaje się za pomyślny. Zasadniczo więcrequired
flaga ma wyższy priorytet niżsufficient
flaga, ale ta ostatnia ma możliwość zaprzestania sprawdzania pozostałych, jeśli poprzednie sięrequired
powiodły.Przykład:
Jeśli linie 1, 2, 3 i 4 są udane, wówczas linię 5 można pominąć, a moduł
auth
pomyślnie. Jeśli linia 4 nie powiedzie się, zostanie zignorowana i linia 5 zostanie sprawdzona. Jeśli którakolwiek z linii 1, 2, 3 ulegnie awarii, linia 4 nie jest brana pod uwagę.źródło