Sto studiando PAM e sono un po' all'oscuro del significato di una combinazione di flag di controllo. Dalla documentazione di Red Hat abbiamo:
l'errore richiesto
di tale PAM comporterà alla fine l'errore PAM-API
ma solo dopo che i moduli impilati rimanenti (per questo servizio e tipo)
sono stati richiamatirequisito
come richiesto, tuttavia, nel caso in cui tale modulo restituisca un errore,
il controllo viene restituito direttamente all'applicazione.sufficiente
successo di tale modulo è sufficiente per soddisfare i requisiti di autenticazione
dello stack di moduli (se un modulo richiesto precedente ha fallito
il successo di questo viene ignorato). Un errore di questo modulo non è considerato
fatale per soddisfare l'applicazione che questo tipo ha avuto successo. Se il modulo
riesce, il framework PAM restituisce il successo all'applicazione
immediatamente senza provare altri moduli.
Quindi, a mio avviso, se un modulo requisite
non riesce, l'intero stack di moduli non verrà analizzato e il controllo tornerà immediatamente all'applicazione.
Se un modulo sufficient
riesce, il resto dello stack dei moduli non verrà analizzato e il controllo tornerà immediatamente all'applicazione.
Se un modulo required
non riesce, l'intero stack verrà analizzato.
Ora, non riesco a capire quale sarà il comportamento quando un determinato modulo required
fallisce e un altro modulo sufficient
riesce.
Risposta accettata:
PAM procede attraverso gli elementi sullo stack in sequenza. Mantiene solo la memoria dello stato in cui si trova (successo o negato, con successo che significa successo finora), non di come ha raggiunto quello stato.
Se un articolo contrassegnato come sufficient
riesce, la libreria PAM interrompe l'elaborazione di quello stack. Questo accade se c'erano precedenti required
oggetti o meno. A questo punto, PAM restituisce lo stato corrente:success se nessun precedente required
elemento non riuscito, altrimenti negato.
Allo stesso modo, se un elemento contrassegnato requisite
non riesce, la libreria PAM interrompe l'elaborazione e restituisce un errore. A quel punto, è irrilevante se un precedente required
elemento non riuscito.
In altre parole, required
non causa necessariamente l'elaborazione dell'intero stack. Significa solo andare avanti.