Sto provando a configurare un modulo PAM che consente di aggiungere uno schema di modifica della password condizionale. Il comportamento previsto è il seguente:
-
passwd
-
vuoi cambiare il token di autenticazione per TestProgram? (s / n):
nel caso in cui decida di farlo (s)
- 3.1.1 (s) > utente: ...
- 3.1.2 > pass: ...
- 3.1.3 > newpass: ...
-
3.1.4 > repeat newpass: ...
-
3.1.5 > password modificata (o non corretta)
Nel caso volesse utilizzare regolarmente passwd
- 3.2.1: password UNIX utente: ....
...
Sono già riuscito a farlo funzionare più o meno, ma ho problemi con i flag PAM. in questo momento la configurazione del modulo (chiamiamola myauthschema) è così:
auth sufficient /usr/lib/security/pam_mymod.so ...
e nel mio file /etc/pam.d/passwd ho aggiunto prima la riga
@include myauthschema
Nell'interfaccia pam_sm_chauthtok faccio questo:
if(flags & PAM_PRELIM_CHECK) return PAM_IGNORE;
Altrimenti esegui la conversazione pam per sapere se vuoi cambiare le credenziali del programma.
Se lo fai, restituisci PAM_SUCCESS
o un errore (questo dovrebbe sempre -end stack execution sempre, per successo o fallimento-),
Se vuoi usare il modulo regolare,
return PAM_IGNORE*
Il mio problema è questo: ogni volta che eseguo passwd
verrà eseguito il mio modulo, ma se decido di PAM_IGNORE
è risultato, non mi verrà richiesta la password utente successiva, per l'uso regolare di% co_de comando%. Qualche idea su come potrebbe essere risolto? è molto probabile che non riesca a usare correttamente i flag, cioè, restituisco sempre passwd
alla prima volta che viene chiamato PAM_IGNORE
, ma non sono sicuro di cosa dovrei restituire.
Forse il comportamento corretto è chiedere prima cosa voglio pam_sm_chauthok
, quindi controllare se è il controllo preliminare o meno. Se la mia domanda non è chiara, mi piacerebbe sentirla.
Per quello che so, è molto simile a questa domanda che ho trovato a scavare nell'inter-web: link