Estoy intentando configurar un módulo PAM que le permite a uno agregar un esquema de cambio de contraseña condicional. El comportamiento deseado es así:
passwd
-
¿Desea cambiar el token de autenticación para TestProgram? (s / n):
en caso de que decida que lo hace (s)
- 3.1.1 (s) > usuario: ...
- 3.1.2 > pass: ...
- 3.1.3 > newpass: ...
-
3.1.4 > repetir paso nuevo: ...
-
3.1.5 > la contraseña se modificó correctamente (o no)
En caso de que solo quisiera usar passwd regularmente
- 3.2.1: contraseña de usuario de UNIX: ....
...
Ya me las arreglé para que funcionara más o menos, pero tengo problemas con los indicadores PAM. En este momento, la configuración del módulo (llamémoslo myauthschema) es así:
auth sufficient /usr/lib/security/pam_mymod.so ...
y en mi archivo /etc/pam.d/passwd agregué primero la línea
@include myauthschema
En la interfaz pam_sm_chauthtok hago esto:
if(flags & PAM_PRELIM_CHECK) return PAM_IGNORE;
De lo contrario, ejecute la conversación pam para saber si desea cambiar las credenciales de este programa.
Si lo hace, devuelva PAM_SUCCESS
o un error (esto debería terminar con la ejecución de la pila, ya sea por éxito o por falla),
Si desea utilizar el módulo regular,
return PAM_IGNORE*
Mi problema es el siguiente: cuando ejecuto passwd
, ejecutará mi módulo, pero si decido dar a PAM_IGNORE
su resultado, no se me solicitará mi contraseña de usuario a continuación, para el uso regular de passwd
comando. ¿Alguna idea de cómo podría resolverse? es muy probable que no pueda usar las banderas correctamente, es decir, siempre devuelvo PAM_IGNORE
la primera vez que se llama pam_sm_chauthok
, pero no estoy seguro de qué debo devolver.
Tal vez el comportamiento correcto es preguntar primero lo que quiero chauthtok
, luego verificar si es la verificación preliminar o no. Si mi pregunta no es clara, me gustaría escucharla.
Por lo que sé, es muy similar a esta pregunta que encontré al excavar la inter-web: enlace