我编写了一个简单的应用程序,以常见方式使用PAM对用户进行身份验证:pam_start()
,pam_authenticate()
+我自己的会话功能+ pam_end()
。
如果在正在检查凭据的用户下运行应用程序,则验证成功。否则,如果从用户A
运行应用程序以检查用户B
的凭据,则身份验证失败。 (
我的问题:为什么?作为传递给pam_start()
的服务名称,我还尝试了login
以及passwd
。什么也没有变。调试问题的方向是哪个?或者我可能应该使用另一个pam服务来执行任务?
P.S。第二种情况下的用户'A'是没有密码和/ bin / false shell的用户。
答案 0 :(得分:0)
您如何查看“凭据”?是否正在读取某个文件?用户A可以读取该文件吗?
传递给pam_start的服务名称不会影响进程可以执行的操作。请注意,需要执行类似操作的程序(如su或passwd)实际上是setuid程序。
另外,请注意不要在用户A冒充用户B的情况下在应用程序/模块中创建安全漏洞。
答案 1 :(得分:0)
用户A可能没有读取密码文件/etc/shadow
的权限。这是凭证检查程序通常需要root权限的一个原因。
所以:如果你以root用户身份执行root程序,它对用户A和用户B有效吗?