Ce que j'aimerais réaliser, c'est un programme interactif qui s'exécute avant ou après avoir demandé le mot de passe à l'utilisateur, mais ne gérera pas l'accès à l'ordinateur à moins qu'il ne se termine avec succès. Pour le rendre un peu plus compréhensible, voici un exemple:
Je voudrais avoir accès à mon ordinateur, en écrivant d'abord mon nom d'utilisateur, puis mon mot de passe, puis en répondant correctement à une simple question mathématique générée aléatoirement.
Pour que cela fonctionne, j'utilise le fichier d'authentification système suivant:
auth required pam_unix.so try_first_pass nullok nodelay
auth optional pam_faildelay.so delay=600000
auth optional pam_exec.so stdout /home/math
auth optional pam_permit.so
auth required pam_env.so
Le problème est que le programme nommé math ne peut pas gérer les entrées de l'utilisateur, car il lit automatiquement un EOF depuis PAM, ce qui le rend essentiellement inutile. J'ai également essayé la variante suivante de la ligne douteuse, auquel cas elle lit dans le mot de passe, ce qui n'est pas non plus ce que je veux:
auth optional pam_exec.so stdout expose_authtok /home/math
la source
Réponses:
Pas de stdout / stdin là au stade PAM. Vous devez appeler
pam_conv(3)
viapam_get_item(3)
pour effectuer des E / S.Bon exemple sur ben.akrin.com, y compris l'exemple de source C pertinent.
la source