在Linux中使用PAM进行身份验证为什么它可能无法从某些用户运行?

时间:2011-10-25 08:45:09

标签: linux authentication pam

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

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

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

P.S。第二种情况下的用户'A'是没有密码和/ bin / false shell的用户。

2 个答案:

答案 0 :(得分:0)

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

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

另外,请注意不要在用户A冒充用户B的情况下在应用程序/模块中创建安全漏洞。

答案 1 :(得分:0)

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

所以:如果你以root用户身份执行root程序,它对用户A和用户B有效吗?