0

我编写了一个简单的应用程序来使用 PAM 以常用方式验证用户身份:pam_start(), pam_authenticate()+ 我自己的对话功能 + pam_end().

如果应用程序在正在检查凭据的用户下运行,则身份验证成功。否则,如果从 user 运行应用程序A以检查 user 的凭据B,则身份验证失败。(

我的问题:为什么?作为传递给pam_start()我的服务名称,我也尝试loginpasswd. 什么也没有变。去哪个方向调试问题?或者可能我应该使用另一个 pam 服务来执行任务?

ps user 'A' 在第二种情况下是没有密码和 /bin/false shell 的用户。

4

2 回答 2

0

您如何检查“凭据”?是否正在读取某些文件?用户 A 可以读取该文件吗?

传递给 pam_start 的服务名称不会影响进程可以执行的操作。请注意,需要执行类似操作的程序,例如 su 或 passwd,实际上是 setuid 程序。

此外,请注意不要允许用户 A 冒充用户 B,从而在您的应用程序/模块中造成安全漏洞。

于 2011-12-30T16:57:34.163 回答
0

用户 A 可能没有读取密码文件的权限/etc/shadow。这就是为什么凭证检查程序通常需要 root 权限的原因之一。

那么:如果您以root权限/作为root用户执行程序,它是否适用于用户A和用户B?

于 2011-12-30T18:35:06.610 回答