Zim*_*lim 3 authentication pam
我目前正在为应用程序开发身份验证模块。决定通过使用 PAM 来做到这一点。我已经完成了这项工作,但它只能验证启动应用程序的用户。
这意味着,如果我以用户“appname”的身份启动应用程序,则身份验证只会告诉我,如果用户是“appname”而不是“some_user”则成功
如果我 su 到那个“some_user”并在那个终端中启动应用程序,那么我可以验证“some_user”而不是“appname”
我在 common-auth 中打开了 pam_unix 的调试标志。拒绝时产生以下输出:
unix_chkpwd[4107]: check pass; user unknown
unix_chkpwd[4107]: password check failed for user (pamtest)
[app]: pam_unix(other:auth): authentication failure; logname=[appname] uid=1000 euid=1000 tty= ruser=[appname] rhost= user=pamtest
Run Code Online (Sandbox Code Playgroud)
PAM 不是守护进程,而只是一个库。由于普通用户无法访问身份验证数据(如/etc/shadow
),因此在普通用户下运行的程序无法进行身份验证。有一个小例外:用户可以对自己进行身份验证,因为在这种情况下会自动调用SETGID /sbin/unix_chkpwd帮助程序,该程序可以访问身份验证数据(但不允许对其他用户进行身份验证)。
因此,您需要通过 SUID 标志为程序本身授予 root 权限(我不建议这样做,因为很难不打开后门),以便它在 root 下运行或需要通过网络服务或运行 SUID 程序进行身份验证,例如su
.
在这个问题中讨论了可能的解决方案。