如何添加额外的登录步骤?

如何添加额外的登录步骤?

我想要实现的是一个交互式程序,它可以在询问用户密码之前或之后运行,但不会处理对计算机的访问,除非它成功退出。为了让它更容易理解,下面是一个例子:

我想通过首先输入我的用户名,然后输入密码,然后正确回答一个简单的随机生成的数学问题来访问我的计算机。

为此,我使用以下系统身份验证文件:

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源代码示例。

相关内容