Ssh

沒有 pam,ssh 或任何其他服務如何工作?

  • June 3, 2018

我不明白 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處理此特定連接的子程序會將會話資訊記錄到utmpwtmp文件,設置一個偽 TTY,然後fork()另一個子程序將採用使用者的 UID 和組成員身份,切換到使用者的主目錄並呼叫setsid()成為會話負責人。然後這個過程將exec()使用者的shell。

當 shellsshd終止時,持有偽 TTY 主端的子程序將執行任何必要的清理操作,例如在wtmp文件中記錄會話結束。

這大致是在 PAM 發明之前處理 Unix 會話的方式。

引用自:https://unix.stackexchange.com/questions/447649