Ssh
沒有 pam,ssh 或任何其他服務如何工作?
我不明白 ssh 或任何其他服務如何在沒有 pam 的情況下工作。pam 定義了所有規則,如果我理解正確,呼叫其他模組來設置資源或限制等。
如果我們設置
UsePam=No
. 哪些模組負責身份驗證、會話創建等?
如果您設置
UsePam no
,那麼sshd
它本身將盡其所能完成 PAM 模組的工作。由於
sshd
以 root 身份執行,它可以使用getspnam(3)
函式從(或從 NIS、LDAP 或系統的 C 庫支持的任何其他儲存位置)獲取使用者的密碼雜湊和其他資訊,/etc/shadow
通過查看選擇密碼雜湊算法雜湊的開頭,然後getspnam(3)
使用來自結果的鹽對使用者輸入的密碼進行雜湊crypt(3)
。然後將結果與 檢索到的完整密碼雜湊進行比較getspnam(3)
。如果它們匹配,則密碼認證成功。帳戶驗證步驟同樣非常簡單:密碼過期資訊包含在
getspnam(3)
結果中,並再次檢查使用者的 shell 是否存在並列在/etc/shells
.會話創建包括許多步驟,其詳細資訊取決於執行服務的 Linux 或 Unix 的類型。但通常,對於 shell 會話,
sshd
處理此特定連接的子程序會將會話資訊記錄到utmp
和wtmp
文件,設置一個偽 TTY,然後fork()
另一個子程序將採用使用者的 UID 和組成員身份,切換到使用者的主目錄並呼叫setsid()
成為會話負責人。然後這個過程將exec()
使用者的shell。當 shell
sshd
終止時,持有偽 TTY 主端的子程序將執行任何必要的清理操作,例如在wtmp
文件中記錄會話結束。這大致是在 PAM 發明之前處理 Unix 會話的方式。