在Ubuntu和Debian上啟用雙因子身份驗(yàn)證的三種備選方案
如何為你的 SSH 服務(wù)器安裝三種不同的雙因子身份驗(yàn)證方案。
如今,安全比以往更加重要,保護(hù) SSH 服務(wù)器是作為系統(tǒng)管理員可以做的最為重要的事情之一。傳統(tǒng)地,這意味著禁用密碼身份驗(yàn)證而改用 SSH 密鑰。無疑這是你首先應(yīng)該做的,但這并不意味著 SSH 無法變得更加安全。
雙因子身份驗(yàn)證就是指需要兩種身份驗(yàn)證才能登錄??梢允敲艽a和 SSH 密鑰,也可以是密鑰和第三方服務(wù),比如 Google。這意味著單個(gè)驗(yàn)證方法的泄露不會危及服務(wù)器。
以下指南是為 SSH 啟用雙因子驗(yàn)證的三種方式。
當(dāng)你修改 SSH 配置時(shí),總是要確保有一個(gè)連接到服務(wù)器的第二終端。第二終端意味著你可以修復(fù)你在 SSH 配置中犯的任何錯(cuò)誤。打開的終端將一直保持,即便 SSH 服務(wù)重啟。
SSH 密鑰和密碼
SSH 支持對登錄要求不止一個(gè)身份驗(yàn)證方法。
在 /etc/sh/sshd_config
中的 SSH 服務(wù)器配置文件中的 AuthenticationMethods
選項(xiàng)中設(shè)置了身份驗(yàn)證方法。
當(dāng)在 /etc/ssh/sshd_config
中添加下一行時(shí),SSH 需要提交一個(gè) SSH 密鑰,然后提示輸入密碼:
AuthenticationMethods "publickey,password"
如果你想要根據(jù)使用情況設(shè)置這些方法,那么請使用以下附加配置:
Match User jsmith
AuthenticationMethods "publickey,password"
當(dāng)你已經(jīng)編輯或保存了新的 sshd_config
文件,你應(yīng)該通過運(yùn)行以下程序來確保你沒有犯任何錯(cuò)誤:
sshd -t
任何導(dǎo)致 SSH 不能啟動的語法或其他錯(cuò)誤都將在這里標(biāo)記出來。當(dāng) ssh-t
運(yùn)行時(shí)沒有錯(cuò)誤,使用 systemctl
重新啟動 SSH:
systemctl restart sshd
現(xiàn)在,你可以使用新終端登錄,以核實(shí)你會被提示輸入密碼并需要 SSH 密鑰。如果你用 ssh-v
,例如:
ssh -v jsmith@example.com
你將可以看到登錄的每一步。
注意,如果你確實(shí)將密碼設(shè)置成必需的身份驗(yàn)證方法,你要確保將 PasswordAuthentication
選項(xiàng)設(shè)置成 yes
。
使用 Google Authenticator 的 SSH
Google 在 Google 自己的產(chǎn)品上使用的雙因子身份驗(yàn)證系統(tǒng)可以集成到你的 SSH 服務(wù)器中。如果你已經(jīng)使用了Google Authenticator,那么此方法將非常方便。
雖然 libpam-google-authenticator 是由 Google 編寫的,但它是開源的。此外,Google Authenticator 是由 Google 編寫的,但并不需要 Google 帳戶才能工作。多虧了 Sitaram Chamarty 的貢獻(xiàn)。
如果你還沒有在手機(jī)上安裝和配置 Google Authenticator,請參閱 這里的說明。
首先,我們需要在服務(wù)器上安裝 Google Authenticatior 安裝包。以下命令將更新你的系統(tǒng)并安裝所需的軟件包:
apt-get update
apt-get upgrade
apt-get install libpam-google-authenticator
現(xiàn)在,我們需要在你的手機(jī)上使用 Google Authenticatior APP 注冊服務(wù)器。這是通過首先運(yùn)行我們剛剛安裝的程序完成的:
google-authenticator
運(yùn)行這個(gè)程序時(shí),會問到幾個(gè)問題。你應(yīng)該以適合你的設(shè)置的方式回答,然而,最安全的選項(xiàng)是對每個(gè)問題回答 y
。如果以后需要更改這些選項(xiàng),您可以簡單地重新運(yùn)行 google-authenticator
并選擇不同的選項(xiàng)。
當(dāng)你運(yùn)行 google-authenticator
時(shí),一個(gè)二維碼會被打印到終端上,有些代碼看起來像這樣:
Your new secret key is: VMFY27TYDFRDNKFY
Your verification code is 259652
Your emergency scratch codes are:
96915246
70222983
31822707
25181286
28919992
你應(yīng)該將所有這些代碼記錄到一個(gè)像密碼管理器一樣安全的位置。“scratch codes” 是單一的使用代碼,即使你的手機(jī)不可用,它總是允許你訪問。
要將服務(wù)器注冊到 Authenticator APP 中,只需打開應(yīng)用程序并點(diǎn)擊右下角的紅色加號即可。然后選擇掃描條碼選項(xiàng),掃描打印到終端的二維碼。你的服務(wù)器和應(yīng)用程序現(xiàn)在連接。
回到服務(wù)器上,我們現(xiàn)在需要編輯用于 SSH 的 PAM (可插入身份驗(yàn)證模塊),以便它使用我們剛剛安裝的身份驗(yàn)證器安裝包。PAM 是獨(dú)立系統(tǒng),負(fù)責(zé) Linux 服務(wù)器上的大多數(shù)身份驗(yàn)證。
需要修改的 SSH PAM 文件位于 /etc/pam.d/sshd
,用以下命令編輯:
nano /etc/pam.d/sshd
在文件頂部添加以下行:
auth required pam_google_authenticator.so
此外,我們還需要注釋掉一行,這樣 PAM 就不會提示輸入密碼。改變這行:
# Standard Un*x authentication.
@include common-auth
為如下:
# Standard Un*x authentication.
# @include common-auth
```
接下來,我們需要編輯 SSH 服務(wù)器配置文件:
nano /etc/ssh/sshd_config “`
改變這一行:
ChallengeResponseAuthentication no
為:
ChallengeResponseAuthentication yes
接下來,添加以下代碼行來啟用兩個(gè)身份驗(yàn)證方案:SSH 密鑰和谷歌認(rèn)證器(鍵盤交互):
AuthenticationMethods "publickey,keyboard-interactive"
在重新加載 SSH 服務(wù)器之前,最好檢查一下在配置中沒有出現(xiàn)任何錯(cuò)誤。執(zhí)行以下命令:
sshd -t
如果沒有標(biāo)識出任何錯(cuò)誤,用新的配置重載 SSH:
systemctl reload sshd.service
現(xiàn)在一切都應(yīng)該開始工作了。現(xiàn)在,當(dāng)你登錄到你的服務(wù)器時(shí),你將需要使用 SSH 密鑰,并且當(dāng)你被提示輸入:
Verification code:
打開 Authenticator APP 并輸入為您的服務(wù)器顯示的 6 位代碼。
Authy
Authy 是一個(gè)雙重身份驗(yàn)證服務(wù),與 Google 一樣,它提供基于時(shí)間的代碼。然而,Authy 不需要手機(jī),因?yàn)樗峁┳烂婧推桨蹇蛻舳?。它們還支持離線身份驗(yàn)證,不需要 Google 帳戶。
你需要從應(yīng)用程序商店安裝 Authy 應(yīng)用程序,或 Authy 下載頁面所鏈接的桌面客戶端。
安裝完應(yīng)用程序后,需要在服務(wù)器上使用 API 密鑰。這個(gè)過程需要幾個(gè)步驟:
- 在這里注冊一個(gè)賬戶。
- 向下滾動到 “Authy” 部分。
- 在帳戶上啟用雙因子認(rèn)證(2FA)。
- 回 “Authy” 部分。
- 為你的服務(wù)器創(chuàng)建一個(gè)新的應(yīng)用程序。
- 從新應(yīng)用程序的 “General Settings” 頁面頂部獲取 API 密鑰。你需要 “PRODUCTION API KEY”旁邊的眼睛符號來顯示密鑰。如圖:
在某個(gè)安全的地方記下 API 密鑰。
現(xiàn)在,回到服務(wù)器,以 root 身份運(yùn)行以下命令:
curl -O 'https://raw.githubusercontent.com/authy/authy-ssh/master/authy-ssh'
bash authy-ssh install /usr/local/bin
當(dāng)提示時(shí)輸入 API 鍵。如果輸入錯(cuò)誤,你始終可以編輯 /usr/local/bin/authy-ssh
再添加一次。
Authy 現(xiàn)已安裝。但是,在為用戶啟用它之前,它不會開始工作。啟用 Authy 的命令有以下形式:
/usr/local/bin/authy-ssh enable <system-user> <your-email> <your-phone-country-code> <your-phone-number>
root 登錄的一些示例細(xì)節(jié):
/usr/local/bin/authy-ssh enable root john@example.com 44 20822536476
如果一切順利,你會看到:
User was registered
現(xiàn)在可以通過運(yùn)行以下命令來測試 Authy:
authy-ssh test
最后,重載 SSH 實(shí)現(xiàn)新的配置:
systemctl reload sshd.service
Authy 現(xiàn)在正在工作,SSH 需要它才能登錄。
現(xiàn)在,當(dāng)你登錄時(shí),你將看到以下提示:
Authy Token (type 'sms' to request a SMS token):
你可以輸入手機(jī)或桌面客戶端的 Authy APP 上的代碼。或者你可以輸入 sms
, Authy 會給你發(fā)送一條帶有登錄碼的短信。
可以通過運(yùn)行以下命令卸載 Authy:
/usr/local/bin/authy-ssh uninstall