Estoy estudiando PAM y no tengo ni idea del significado de alguna combinación de banderas de control. De la documentación de Red Hat tenemos:
-
requerida
la falla de tal PAM conducirá en última instancia a la falla de devolución de la PAM-API
pero solo después de que los módulos apilados restantes (para este servicio y tipo)
hayan sido invocados -
requisito
como requerido, sin embargo, en el caso de que dicho módulo devuelva una falla,
el control se devuelve directamente a la aplicación. -
el éxito
suficiente de dicho módulo es suficiente para satisfacer los requisitos de autenticación
de la pila de módulos (si un módulo requerido anterior ha fallado
, se ignora el éxito de este). Una falla de este módulo no se considera
como fatal para satisfacer a la aplicación de que este tipo ha tenido éxito. Si el módulo
tiene éxito, el marco PAM devuelve el éxito a la aplicación
inmediatamente sin probar ningún otro módulo.
Entonces, según tengo entendido, si un módulo requisite
falla, no se analizará toda la pila de módulos y el control volverá a la aplicación inmediatamente.
Si un módulo sufficient
tiene éxito, el resto de la pila de módulos no se analizará y el control volverá a la aplicación inmediatamente.
Si un módulo required
falla, se analizará toda la pila.
Ahora, no puedo entender cuál será el comportamiento cuando un cierto módulo required
falla y otro módulo sufficient
tiene éxito.
Respuesta aceptada:
PAM procede a través de los elementos de la pila en secuencia. Solo guarda la memoria de en qué estado se encuentra (éxito o denegado, con éxito significa éxito hasta el momento), no de cómo llegó a ese estado.
Si un elemento marcado como sufficient
tiene éxito, la biblioteca PAM deja de procesar esa pila. Esto sucede si hubo required
anterior artículos o no. En este punto, PAM devuelve el estado actual:éxito si no se requiere required
elemento fallido, de lo contrario denegado.
Del mismo modo, si un elemento marcado como requisite
falla, la biblioteca PAM deja de procesar y devuelve un error. En ese momento, es irrelevante si un required
anterior elemento fallido.
En otras palabras, required
no necesariamente hace que se procese toda la pila. Solo significa seguir adelante.