![如何添加额外的登录步骤?](https://linux22.com/image/70326/%E5%A6%82%E4%BD%95%E6%B7%BB%E5%8A%A0%E9%A2%9D%E5%A4%96%E7%9A%84%E7%99%BB%E5%BD%95%E6%AD%A5%E9%AA%A4%EF%BC%9F.png)
我想要实现的是一个交互式程序,它可以在询问用户密码之前或之后运行,但不会处理对计算机的访问,除非它成功退出。为了让它更容易理解,下面是一个例子:
我想通过首先输入我的用户名,然后输入密码,然后正确回答一个简单的随机生成的数学问题来访问我的计算机。
为此,我使用以下系统身份验证文件:
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
问题是,名为 math 的程序无法处理用户的输入,因为它会自动从 PAM 读取 EOF,这实际上使其变得毫无用处。我还尝试了以下有问题行的变体,在这种情况下它会读取密码,这也不是我想要的:
auth optional pam_exec.so stdout expose_authtok /home/math
答案1
PAM 阶段没有标准输出/标准输入。需要调用pam_conv(3)
viapam_get_item(3)
来执行i/o。
很好的例子在ben.akrin.com包括相关的C源代码示例。