Linux

登錄 GNU/Linux 發行版花費的時間太長

  • April 7, 2014

所以,

當我嘗試使用我的使用者名和密碼(在 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 握手要慢很多。

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