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
PAM 不是守護程序,而只是一個庫。由於普通使用者無法訪問身份驗證數據(如
/etc/shadow
),因此在普通使用者下執行的程序無法進行身份驗證。有一個小例外:使用者可以驗證自己,因為在這種情況下會自動呼叫SETGID /sbin/unix_chkpwd幫助程序,它可以訪問驗證數據(但不允許驗證其他使用者)。因此,您需要通過 SUID 標誌為程序本身賦予 root 權限(我不推薦它,因為很難不打開後門),以便它在 root 下執行,或者需要通過網路服務或通過執行 SUID 程序進行身份驗證
su
.在這個問題中討論了可能的解決方案。