PAM - flag di controllo richiesto e sufficiente


14

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 alla fine porterà all'errore di restituzione dell'API PAM ma solo dopo che i moduli stacked rimanenti (per questo servizio e tipo) sono stati richiamati

  • requisito
    come richiesto, tuttavia, nel caso in cui un tale modulo restituisca un errore, il controllo viene restituito direttamente all'applicazione.

  • il
    successo sufficiente di un tale modulo è sufficiente per soddisfare i requisiti di autenticazione della pila di moduli (se un modulo richiesto in precedenza ha fallito, il successo di questo modulo viene ignorato). Un errore di questo modulo non è considerato fatale nel soddisfare l'applicazione che questo tipo ha avuto successo. Se il modulo ha esito positivo, il framework PAM restituisce immediatamente il successo all'applicazione senza provare altri moduli.

Quindi, a mio avviso, se un modulo requisitefallisce, l'intero stack di moduli non verrà analizzato e il controllo tornerà immediatamente all'applicazione. Se un modulo ha sufficientesito positivo, il resto dello stack dei moduli non verrà analizzato e il controllo tornerà immediatamente all'applicazione. Se un modulo requiredfallisce, verrà analizzato l'intero stack.

Ora, non riesco a capire quale sarà il comportamento quando un determinato modulo requiredfallisce e un altro modulo ha sufficientsuccesso.

Risposte:


11

PAM procede attraverso gli oggetti in pila in sequenza. Mantiene solo la memoria dello stato in cui si trova (successo o negazione, con successo che significa successo finora), non di come ha raggiunto quello stato.

Se un elemento contrassegnato ha sufficientesito positivo, la libreria PAM interrompe l'elaborazione di quello stack. Ciò accade indipendentemente dal fatto che esistessero requiredarticoli precedenti . A questo punto, PAM restituisce lo stato corrente: esito positivo se nessun requiredelemento precedente ha avuto esito negativo, altrimenti negato.

Allo stesso modo, se un elemento contrassegnato requisitenon riesce, la libreria PAM interrompe l'elaborazione e restituisce un errore. A quel punto, è irrilevante se un requiredelemento precedente non è riuscito.

In altre parole, requirednon causa necessariamente l'elaborazione dell'intero stack. Significa solo andare avanti.


Ma se qualche requiredoggetto fallisce, perché PAMdeve continuare ad andare in pila? se alla fine fallirà comunque?
Mohammed Noureldin,

1
@MohammedNoureldin Anche se un tentativo di accesso fallisce, alcune cose devono essere fatte, come la registrazione, l'aggiunta di un timeout contro i tentativi di forza bruta, ecc. Inoltre di solito il sistema non rivela il motivo esatto dell'errore, ad esempio se si cerca il nome utente non riesce quindi all'utente viene ancora richiesta una password.
Gilles 'SO- smetti di essere malvagio' il

L'ordine è l'ordine in cui sono elencati nella configurazione?
OrangeDog,

@OrangeDog Sì. Il modulo elencato nella prima riga viene eseguita, quindi la seconda linea viene eseguita (o tralasciato a seconda del risultato della prima riga), ecc
Gilles 'SO- fermata essere male'

1

Secondo me, un requiredflag di controllo deve sempre avere successo affinché un modulo abbia successo.

Un sufficientmodulo contrassegnato viene ignorato se fallisce. Se ha esito positivo e nessun requiredmodulo contrassegnato sopra ha avuto esito negativo, non è necessario controllare altri moduli dello stesso tipo e il modulo viene considerato riuscito. Quindi, fondamentalmente, la requiredbandiera ha una priorità maggiore rispetto alla sufficientbandiera, ma quest'ultima ha la capacità di smettere di controllarne il resto se le precedenti requiredhanno avuto successo.

Esempio:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

Se le linee 1, 2, 3 e 4 hanno esito positivo, la linea 5 può essere saltata e il modulo ha authesito positivo. Se la riga 4 non ha esito positivo, viene ignorata e la riga 5 viene controllata. Se una delle linee 1, 2, 3 non è riuscita, la linea 4 non viene presa in considerazione.


1
Penso che la sua domanda sia cosa succede se 1 fallisce e 2-4 riesce. 5 viene eseguito? Se 1 avesse avuto successo, 5 non sarebbe stato eseguito. O in altre parole, si applica lo "stop dopo sufficienti successi" se un modulo richiesto precedente non è riuscito?
cjm

No, il modulo auth fallirebbe con tale combinazione.
dsmsk80,

La domanda non è se l'autorizzazione fallirà. Lo farà. La domanda è se il modulo 5 verrà eseguito prima che l'errore venga segnalato all'applicazione.
cjm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.