PAM - bandera de control requerida y suficiente

14

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:

  • La
    falla requerida de tal PAM conducirá en última instancia a la falla de retorno de PAM-API, pero solo después de que se hayan invocado los módulos apilados restantes (para este tipo y servicio)

  • requisite
    como se requiere, sin embargo, en el caso de que un módulo de tales devuelve un error, el control se devuelve directamente a la aplicación.

  • suficiente
    éxito de dicho módulo es suficiente para satisfacer los requisitos de autenticación de la pila de módulos (si un módulo requerido anteriormente ha fallado, se ignora el éxito de este). Una falla de este módulo no se considera fatal para satisfacer la aplicación 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 requisitefalla, no se analizará toda la pila de módulos y el control volverá a la aplicación de inmediato. Si un módulo sufficienttiene éxito, el resto de la pila de módulos no se analizará y el control volverá a la aplicación de inmediato. Si un módulo requiredfalla, se analizará toda la pila.

Ahora, no puedo entender cuál será el comportamiento cuando un determinado módulo requiredfalla y otro módulo sufficienttiene éxito.

ludiegu
fuente

Respuestas:

11

PAM avanza a través de los elementos en la pila en secuencia. Solo guarda la memoria de en qué estado se encuentra (éxito o denegación, con éxito significa éxito hasta ahora), no de cómo llegó a ese estado.

Si un elemento marcado sufficienttiene éxito, la biblioteca PAM deja de procesar esa pila. Esto sucede si hubo requiredelementos anteriores o no. En este punto, PAM devuelve el estado actual: éxito si no requiredfalla ningún elemento anterior , de lo contrario se niega.

Del mismo modo, si un elemento marcado requisitefalla, la biblioteca PAM detiene el procesamiento y devuelve un error. En ese punto, es irrelevante si un requiredartículo anterior falló.

En otras palabras, requiredno necesariamente hace que se procese toda la pila. Solo significa seguir adelante.

Gilles 'SO- deja de ser malvado'
fuente
Pero si requiredfalla algún elemento, ¿por qué es PAMnecesario seguir pasando por la pila? si finalmente fallará de todos modos?
Mohammed Noureldin
1
@MohammedNoureldin Incluso si falla un intento de inicio de sesión, se deben hacer algunas cosas, como iniciar sesión, agregar un tiempo de espera contra los intentos de fuerza bruta, etc. Además, generalmente el sistema no revela la razón exacta de la falla, por ejemplo, si busca el nombre de usuario falla y el usuario aún necesita una contraseña.
Gilles 'SO- deja de ser malvado'
¿El orden es el orden en que se enumeran en la configuración?
OrangeDog
@OrangeDog Sí. El módulo que aparece en la primera línea se ejecuta, a continuación, la segunda línea se ejecuta (o saltado en función del resultado de la primera línea), etc.
Gilles 'SO- ser parada mal'
1

En mi opinión, un requiredindicador de control debe ser siempre exitoso para que un módulo sea exitoso.

Un sufficientmódulo marcado se ignora si falla. Si es exitoso y ningún requiredmódulo marcado anteriormente ha fallado, no es necesario verificar otros módulos del mismo tipo y el módulo se considera exitoso. Básicamente, la requiredbandera tiene mayor prioridad que la sufficientbandera, pero la última tiene la capacidad de dejar de verificar el resto si las anteriores requiredtuvieron éxito.

Ejemplo:

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

Si las líneas 1, 2, 3 y 4 son exitosas, entonces la línea 5 puede saltarse y el módulo authes exitoso. Si la línea 4 no tiene éxito, se ignora y se marca la línea 5. Si alguna de las líneas 1, 2, 3 ha fallado, entonces la línea 4 no se tiene en cuenta.

dsmsk80
fuente
1
Creo que su pregunta es qué sucede si 1 falla y 2-4 tiene éxito. ¿Se corren 5? Si 1 hubiera tenido éxito, 5 no se ejecutarían. O, en otras palabras, ¿se aplica "detener después de suficientes éxitos" si falla un módulo requerido anterior?
cjm
No, el módulo de autenticación fallará con dicha combinación.
dsmsk80
La pregunta no es si la autorización fallará. Va a. La pregunta es si el módulo 5 se ejecutará antes de que la falla se informe a la aplicación.
cjm