Authentication
使用 vsftpd 進行密碼散列的自定義算法
傳統上,當客戶端登錄時,它會發送憑據(使用者名+密碼)而無需任何進一步處理。然後,伺服器檢查其使用者數據庫中是否存在與提供的憑據匹配的條目。
為了在數據庫洩露的情況下更難恢復密碼,密碼以散列形式儲存。這意味著客戶端或伺服器對密碼進行雜湊處理,然後檢查憑據是否匹配。
但是,如果客戶端進行散列,它實際上變得無用。為什麼 ?因為雜湊密碼現在用作密碼。人們可以竊取數據庫,讀取雜湊並將其與使用者名一起發送,但仍然可以獲得訪問權限。
這就是為什麼必須在伺服器上進行散列運算,這樣如果事先不知道密碼,就不可能登錄。
但是,我找不到任何方法來使用 PAM 模組實現這一點,以便 vsftpd 將其用於登錄。請注意,我不想使用普通的雜湊函式,因為它們不適合密碼。我需要使用 KDF,例如 scrypt 或 bcrypt。
我必須編寫自己的 PAM 模組還是必須按需生成 htpasswd 雜湊?
tl;dr 如何使用 vsftpd 的伺服器端密碼雜湊執行使用者身份驗證?
crypt()
PAM 使用的可能只支持 BCRYPT 而不是 SCRYPT(或兩者都不支持)。在所有情況下,您只需要在對密碼進行編碼時設置方法,而不是在檢查密碼時設置。由於 vsftp 使用系統密碼文件,您需要重新配置 PAM 以使用 BCRYPT。這取決於實際使用的 unix/linux。只要您的 passwd 文件包含
$2y$
前綴密碼雜湊(您可以使用最近完成的密碼生成它們htpasswd -B
)。某些 Linux 支持
authconfig --passalgo=blowfish --update
其他 Linux,您需要找到正確的 PAM 配置文件並將 blowfish 添加到密碼行:password sufficient /lib/security/pam_unix.so nullok use_authok blowfish shadow