J'étudie PAM, et je suis un peu ignorant de la signification d'une combinaison d'indicateurs de contrôle. Dans la documentation de Red Hat, nous avons :
l'échec requis d'un tel PAM entraînera finalement l'échec du retour de l'API PAM
mais seulement après que les modules empilés restants (pour ce service et ce type)
auront été invoquésrequis
comme requis, cependant, dans le cas où un tel module retourne un échec,
le contrôle est directement rendu à l'application.un succès
suffisant d'un tel module est suffisant pour satisfaire les exigences d'authentification
de la pile de modules (si un module requis antérieur a échoué
le succès de celui-ci est ignoré). Un échec de ce module n'est pas considéré
comme fatal pour satisfaire l'application que ce type a réussi. Si le module
réussit, le framework PAM renvoie le succès à l'application
immédiatement sans essayer d'autres modules.
Donc, d'après ce que j'ai compris, si un module requisite
échoue, la pile entière de modules ne sera pas analysée et le contrôle reviendra immédiatement à l'application.
Si un module sufficient
réussit, le reste de la pile de modules ne sera pas analysé et le contrôle reviendra immédiatement à l'application.
Si un module requisite
échoue, la pile entière sera analysée.
Maintenant, je ne peux pas comprendre quel sera le comportement lorsqu'un certain module requisite
échoue et un autre module sufficient
réussit.
Réponse acceptée :
PAM parcourt les éléments de la pile dans l'ordre. Il ne garde que la mémoire de l'état dans lequel il se trouve (succès ou refus, succès signifiant succès jusqu'à présent), pas de la façon dont il a atteint cet état.
Si un élément marqué sufficient
réussit, la bibliothèque PAM arrête de traiter cette pile. Cela se produit s'il y avait des required
précédents articles ou non. À ce stade, PAM renvoie l'état actuel :succès si aucun requisite
précédent l'élément a échoué, sinon refusé.
De même, si un élément marqué requisite
échoue, la bibliothèque PAM arrête le traitement et renvoie un échec. À ce stade, il n'est pas pertinent de savoir si un requisite
précédent l'élément a échoué.
En d'autres termes, required
n'entraîne pas nécessairement le traitement de toute la pile. Cela signifie simplement continuer.