如何在 Debian伺服器 上啟用雙因子身份驗證
雙因子身份驗證就是指,需要兩種身份驗證才能完成賬號有效性的驗證,可以是密碼、SSH 金鑰,也可以是第三方服務,比如 Google Authenticator。這意味著單個驗證方式的缺陷,不會影響賬號的安全。本文我們將介紹如何在 Debian 伺服器上啟用雙因子驗證。

請注意,本文涉及到多次修改 SSH 配置,當你修改配置時,請確保有至少兩個到伺服器終端的連線。開啟的終端將一直保持,即便 SSH 服務重啟。第二終端意味著你可以修復你在SSH配置的錯誤。
金鑰和密碼驗證的SSH
SSH 支援對登入要求不止一個身份驗證方法,我們首先啟用金鑰和密碼驗證。
在 /etc/sh/sshd_config 中的 SSH 伺服器配置檔案中的 AuthenticationMethods 選項中設定了身份驗證方法。
當在 /etc/ssh/sshd_config 中新加一行配置,如下。這樣在建立sshliaSSH 需要提交一個 SSH 金鑰,然後提示輸入密碼:
AuthenticationMethods "publickey,password"
如果你想要對指定使用者設定這些方法,那麼請使用以下附加配置:
Match User joseph AuthenticationMethods "publickey,password"
當你已經編輯或儲存了新的 sshd_config 檔案,你應該通過執行以下程式來確保你沒有犯任何錯誤:
sshd -t
任何導致 SSH 不能啟動的語法或其他錯誤都將在這裡標記出來。當 ssh-t 執行時沒有錯誤,使用 systemctl 重新啟動 SSH:
systemctl reload sshd
現在,你可以使用新終端登入,以核實你會被提示輸入密碼並需要 SSH 金鑰。如果你用 ssh -v,例如 ssh -v [email protected]
,你將可以看到登入的每一步,可以加多個v來獲取更多的 debug 資訊。
注意,如果你確實將密碼設定成必需的身份驗證方法,你要確保將 PasswordAuthentication 選項設定成 yes。
使用 Google Authenticator 的 SSH
Google 在 Google 自己的產品上使用的雙因子身份驗證系統可以整合到你的 SSH 伺服器中。如果你已經使用了Google Authenticator,那麼此方法將非常方便。
雖然 ofollow,noindex">libpam-google-authenticator 是由 Google 編寫的,但它是開源的。此外 Google Authenticator 是由 Google 編寫的,但不需要 Google 帳戶也能工作,多虧了 Sitaram Chamarty 的貢獻。
如果你還沒有在手機上安裝和配置 Google Authenticator,請參閱 這裡的介紹 。
首先,我們需要在伺服器上安裝 Google Authenticatior 安裝包。使用以下命令安裝所需的軟體包:
apt-get update apt-get install libpam-google-authenticator
現在,我們需要在你的手機上使用 Google Authenticatior 工具註冊伺服器。這是通過執行我們剛才安裝的 Debian 軟體包完成的,在命令列下執行:
google-authenticator
執行這個程式時,會問到幾個問題。你應該以適合你的設定的方式回答,最安全的選項是對每個問題回答y。如果以後需要更改這些選項,你可以簡單地重新執行 google-authenticator 並選擇不同的選項。
當你執行 google-authenticator 時,一個二維碼會被列印到終端上,二維碼下方的程式碼樣例如下:
Your new secret key is: 75YD5PTE6R65BYFR2AWQGUV6FE Your verification code is 781629 Your emergency scratch codes are: 12321432 29069242 34406891 34387624 79357602
你應該將所有這些程式碼記錄到一個像密碼管理器一樣安全的位置。 emergency scratch codes
是單一的使用程式碼,應急時使用。即使你的手機不可用,它總是允許你訪問。
要將伺服器註冊到 Authenticator
App中,只需開啟應用程式並點選右下角的紅色加號即可。然後選擇掃描條碼選項,掃描列印到終端的二維碼。你的伺服器和應用程式現在連線。
回到伺服器上,我們現在需要編輯用於 SSH 的 PAM (可插入身份驗證模組),以便它使用我們剛剛安裝的身份驗證器安裝包。PAM 是獨立系統,負責 Linux 伺服器上的大多數身份驗證。
需要修改的 SSH PAM 檔案位於 /etc/pam.d/sshd ,用以下命令編輯:
vim /etc/pam.d/sshd
在檔案頂部新增以下行:
auth required pam_google_authenticator.so
此外,我們還需要註釋掉這一行 “@include common-auth”,這樣 PAM 就不會提示輸入密碼,修改後如下:
# Standard Un*x authentication. # @include common-auth
接下來,我們需要編輯 SSH 伺服器配置檔案:
vim /etc/ssh/sshd_config
改變 ChallengeResponseAuthentication
的值為 yes,以便我們啟用鍵盤互動的認證方式:
ChallengeResponseAuthentication yes
接下來,新增以下程式碼行來啟用兩個身份驗證方案:SSH 金鑰和谷歌認證器(需要鍵盤互動):
AuthenticationMethods "publickey,keyboard-interactive"
在重新載入 SSH 伺服器之前,最好檢查一下在配置中沒有出現任何錯誤,執行以下命令測試:
sshd -t
如果沒有標識出任何錯誤,用新的配置過載 SSH:
systemctl reload sshd.service
現在一切都應該開始工作了。現在,當你登入到你的伺服器時,你將需要使用 SSH 金鑰,並且當你被提示輸入:
Verification code:
開啟 Authenticator APP 並輸入為您的伺服器顯示的 6 位程式碼。