我正在编写的应用程序将具有一些密码更改功能。但是我想知道是否可以不以 root 身份运行帐户管理部分。
现在我遇到了一个问题,如果我以我试图管理的用户身份运行,我将无法更改密码。我通过首先使用给定的密码进行身份验证来验证密码是否正确。(单独调用身份验证模块的另一部分。)只有当我调用chauthtok为用户更改它时pamtest,它才会导致对话函数的调试输出:
START PAM CHANGE PASSWORD
PAM_CONV start [('Changing password for pamtest.', 4)]
PAM_CONV iter: Changing password for pamtest. 4
PAM_CONV end: [('', 0)]
PAM_CONV start [('(current) UNIX password: ', 1)]
PAM_CONV iter: (current) UNIX password: 1
PAM_CONV end: [(u'5ACN5pbmDFBVMHp', 0)]
PAM_CONV start [('Enter new UNIX password: ', 1)]
PAM_CONV iter: Enter new UNIX password: 1
PAM_CONV end: [(u'pdJb7ffsQTHWw4V', 0)]
PAM_CONV start [('Retype new UNIX password: ', 1)]
PAM_CONV iter: Retype new UNIX password: …Run Code Online (Sandbox Code Playgroud) 我目前正在为应用程序开发身份验证模块。决定通过使用 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)