Linux
登錄 GNU/Linux 發行版花費的時間太長
所以,
當我嘗試使用我的使用者名和密碼(在 tty 中)登錄並輸入錯誤的密碼時,我需要等待大約5 秒鐘,系統才會告訴我密碼錯誤。
為什麼驗證過程需要這麼長時間?
GNU/Linux 發行版:Archlinux。
加上一點歷史觀點,密碼錯誤後休眠的想法不僅僅出現在基於 PAM 的系統中。它很老了。對於4.4BSD 登錄源中的 eaxmple,您會發現這個美味的片段:
/* we allow 10 tries, but after 3 we start backing off */ if (++cnt > 3) { if (cnt >= 10) { badlogin(username); sleepexit(1); } sleep((u_int)((cnt - 3) * 5)); }
所以前 3 次失敗是免費的,接下來的 7 次有越來越多的延遲(5 秒、10 秒、15 秒……),在 10 次之後它會執行 a
sleepexit(1)
,即 5 秒延遲,然後是exit(1)
.當您在控制台上輸入密碼時,睡眠只是一種煩惱,但當輸入來自可能正在自動化該過程的遠端使用者時,它們很重要。
10次
sleepexit
失敗後值得特別解釋。login
退出後,getty
只需列印另一個登錄提示並再次開始循環。那麼為什麼要睡覺並退出而不是僅僅睡覺呢?因為在引入此功能時,通過撥號登錄很常見。(請注意 1995 年之前從未使用過調製解調器的人:我說的是通過撥號登錄,而不是通過撥號登錄 PPP 或其他基於數據包的協議。您可以在終端仿真器中撥打一個號碼並獲得登錄提示。)在撥號世界中,任何人都可以撥打您的號碼並開始向其輸入密碼,因此該
login
過程在輸入幾個錯誤密碼後退出,導致調製解調器連接終止,迫使他們在嘗試更多密碼之前重撥。同樣的原則適用於ssh
今天(配置選項MaxAuthTries
),但在過去更有效,因為撥號調製解調器比 TCP 握手要慢很多。