Was ich erreichen möchte, ist ein interaktives Programm, das entweder vor oder nach der Frage des Benutzers nach dem Kennwort ausgeführt wird, aber den Zugriff auf den Computer nur dann handhabt, wenn er erfolgreich beendet wurde. Um es etwas verständlicher zu machen, hier ein Beispiel:
Ich möchte Zugriff auf meinen Computer erhalten, indem ich zuerst meinen Benutzernamen und dann mein Passwort schreibe und danach eine einfache zufällig generierte mathematische Frage richtig beantworte.
Damit dies funktioniert, verwende ich die folgende Systemauthentifizierungsdatei:
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
Das Problem ist, dass das Programm mit dem Namen math keine Eingaben des Benutzers verarbeiten kann, da es automatisch einen EOF aus PAM liest, was ihn im Wesentlichen unbrauchbar macht. Ich habe auch die folgende Variante der fraglichen Zeile ausprobiert. In diesem Fall liest sie das Passwort ein, was auch nicht das ist, was ich will:
auth optional pam_exec.so stdout expose_authtok /home/math
quelle
Antworten:
Kein stdout / stdin dort in der PAM-Phase. Sie müssen Anruf
pam_conv(3)
überpam_get_item(3)
i / o auszuführen.Gutes Beispiel bei ben.akrin.com einschließlich des entsprechenden C-Quellenbeispiels.
quelle