譯者 | 康少京
審校 | 梁策 孫淑娟
介紹
安全無小事。隨著入侵事件數(shù)量與日俱增,據(jù)估計,到2025年,網(wǎng)絡(luò)犯罪將給企業(yè)帶來10.5萬億美元的損失。
所以,在技術(shù)堆棧之上構(gòu)筑一個強(qiáng)大的安全層十分必要。在本文中,我們將展示如何使用多因素身份驗證的SSH 實現(xiàn)安全。
SSH,即Secure Shell,它是一種網(wǎng)絡(luò)協(xié)議,允許用戶連接到遠(yuǎn)程機(jī)器(服務(wù)器)并訪問資源。
SSH協(xié)議實現(xiàn)了兩種安全類型,即基于密碼的身份驗證和基于密鑰的身份驗證。
與基于密碼的身份驗證相比,一般認(rèn)為基于密鑰的(公共->私有)身份驗證更為安全,因此大多數(shù)SSH強(qiáng)化說明更建議禁用基于密碼的身份驗證,只啟用基于密鑰的身份驗證。
但無論選擇哪種身份驗證機(jī)制,我們都可以通過實現(xiàn)多因素身份驗證設(shè)置來提高SSH的安全性。
什么是多因素身份驗證?
多因素身份驗證(MFA)是一種安全的認(rèn)證過程,它需要從獨立的憑證類別中選擇多種認(rèn)證技術(shù)。
多因素身份驗證也稱為“雙因子驗證 (2FA)”。
在驗證你的所述身份時,多因素身份驗證涉及兩個因素:
第一是創(chuàng)建用戶賬戶時創(chuàng)建的密碼。
第二是任何生成動態(tài)口令(OTP)的應(yīng)用程序,或任何向設(shè)備發(fā)送短信或撥打電話的協(xié)議。
根據(jù)應(yīng)用程序的實現(xiàn)方式,身份驗證的方式會有所不同。MFA使用的一些常用工具包括:
- 安裝在移動設(shè)備上生成令牌的應(yīng)用程序。
- 如Yubikey 之類的外部設(shè)備。
- 指紋
- 面部識別
- 基于OTP密碼的短信或來電
為了啟用SSH多因素身份驗證,我們將使用“Google Authenticator”應(yīng)用程序。 它使用OATH-TOTP,以及Twilio Authy 或者FreeOTP等其他替代工具,你可以安裝并試用。
我們將從在服務(wù)器和移動設(shè)備上安裝Google Authenticator 應(yīng)用開始,并嘗試啟用 MFA和驗證。
安裝谷歌身份驗證器
首先通過playstore/Itunes在Android或IOS設(shè)備上安裝Google Authenticator 應(yīng)用程序。
現(xiàn)在,在Linux系統(tǒng)上安裝Google Authenticator應(yīng)用程序。
根據(jù)發(fā)行版本,運行以下安裝命令。
在Ubuntu及其衍生發(fā)行版中,運行以下命令:
$ sudo dnf install google-authenticator -y
在基于RHEL的發(fā)行版中,運行以下命令:
$ sudo dnf install google-authenticator -y
對基于Arch 的發(fā)行版,運行以下命令;
$ sudo pacman -S libpam-google-authenticator
為用戶生成初始令牌
作為設(shè)置MFA的第一步,你必須從終端運行以下命令。這將通過生成TOTP密鑰來完成初始設(shè)置。此密鑰適用于運行命令的用戶,并不適用于系統(tǒng)中的所有用戶。
$ google-authenticator
在某些步驟中,系統(tǒng)會提示你使用 (y/n) 選項。
第1步:它將提示你選擇基于時間的身份驗證令牌?;跁r間的身份驗證令牌將每30秒生成一個新代碼。 按“y”繼續(xù)。
運行Google身份驗證器命令
第2步:秘密令牌將與二維碼一起生成。打開Google Authenticator移動應(yīng)用程序,掃描二維碼或手動鍵入密鑰來注冊設(shè)備。完成后,現(xiàn)在應(yīng)用程序?qū)㈤_始每30秒生成一次令牌。
密鑰和驗證碼
第3步:在這一步中,它將提示你更新在主目錄下的google_authenticator文件。所有的密鑰、驗證碼、緊急刮擦碼都保存在這個文件中。按“y”繼續(xù)。
更新google_authenticator文件
第 4 步:若在這一步中選擇“y”,令牌在進(jìn)行身份驗證后將立即過期。在這種情況下,即使一些黑客得到了你的令牌也會過期。
禁止多次使用相同的身份驗證
第 5 步:這一步?jīng)Q定允許使用令牌個數(shù)以及時間范圍。當(dāng)選擇“n”時,它將允許在90秒的窗口內(nèi)使用3個令牌。如果我按“y”,它將在240秒的時間窗口內(nèi)允許17個令牌。
令牌數(shù)量
第 6 步:此步驟將要求你啟用速率限制。速率限制允許攻擊者每30秒僅嘗試3次登錄嘗試。如果令牌錯誤,那么他們必須等待N次重試。
限速
我們已經(jīng)完成了第一步。打開文件~/.google_authenticator,你可以找到這些步驟做的所有設(shè)置和密碼。
$ cat ~/.google_authenticator
查看 google_authenticator 設(shè)置
你還可以將參數(shù)傳遞給google-authenticator命令,該命令將創(chuàng)建密鑰和其他設(shè)置,而無需執(zhí)行這一系列步驟。
$ google-authenticator -q -t -d -f -r 3 -R 30 -w 3
請參閱 google-authenticator help部分,了解這些參數(shù)的作用。
$ google-authenticator --help
顯示 google-authenticator help部分
為多因素身份驗證配置 SSH
在使用MFA前,我們必須對 openSSH 進(jìn)行一些配置更改。
注:
最佳實踐總是要求在任何更改之前備份配置文件。如果出現(xiàn)任何問題,還有恢復(fù)更改的余地。
那么在更改SSH配置文件時,請確保單獨打開一個會話,這樣你就不會將自己鎖在外面了。
運行以下命令來備份SSH配置文件。
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
$ sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
首先,通過將 ChallengeResponseAuthentication選項設(shè)置為“yes”來啟用,使SSH 能夠使用MFA。
配置SSH以使用 MFA
接下來,編輯 /etc/pam.d/sshd 文件:
$ sudo vi /etc/pam.d/sshd
同時在文件底部添加以下內(nèi)容:
auth required pam_google_authenticator.so nullok
auth required pam_permit.so
編輯 sshd Pam 配置文件
如果希望所有用戶都必須使用MFA,請刪除“nullok”一詞。
重新啟動 SSH 服務(wù)以使更改生效。
$ sudo systemctl restart sshd
測試雙因素身份驗證
接下來測試所做的更改是否生效:
通過SSH連接到服務(wù)器,系統(tǒng)會要求你輸入密碼作為第一因素,然后輸入驗證碼作為第二因素身份驗證,如下圖所示。
$ ssh username@hostname/IPaddress
測試雙因素身份驗證
輸入SSH密碼和驗證碼后,就可以登錄了。
由于我們沒有為所有用戶強(qiáng)制啟用MFA,現(xiàn)在我們測試一下,看看是否能夠連接到另一個沒有生成和設(shè)置令牌的用戶。
我有一個testuser ,能夠在不需提示,輸入驗證碼的情況下連接成功。
使用備用用戶連接
看來, 也可以不用驗證碼登錄。
基于密鑰認(rèn)證的多因素身份驗證
如果你設(shè)置了基于密鑰的身份驗證,那么密碼或驗證碼將不會提供。
因為默認(rèn)情況下,SSH首先使用公鑰身份驗證,如果找到了密鑰,則使用該密鑰進(jìn)行身份驗證。如果找不到密鑰,它將使用基于密碼的身份驗證。
你可以使用詳細(xì)模式來檢查這一點。
$ ssh -v username@hostname/IPaddress ## With verbose
帶有詳細(xì)模式的 SSH
在/etc/ssh/sshd_config文件的底部添加以下內(nèi)容:
AuthenticationMethods publickey,password publickey,keyboard-interactive
接下來打開/etc/pam.d/sshd 并注釋掉以下行。
通用認(rèn)證
如果你沒有注釋掉"@include common-auth",那么它將啟用兩個以上的因素進(jìn)行身份驗證。首先它使用密鑰進(jìn)行身份驗證,然后是密碼和令牌。由于我只需要一個密鑰和令牌來進(jìn)行身份驗證,所以要將它禁用。
三因素身份驗證
重新啟動sshd服務(wù)并測試更改是否正常。
$ sudo systemctl restart sshd
現(xiàn)在,如果我嘗試連接,它使用公鑰作為第一因素,驗證碼作為第二因素進(jìn)行身份驗證。
密鑰和驗證碼
恢復(fù)步驟
在某些情況下,你可能會丟失或更換移動設(shè)備,這時你必須重新安裝 google-authenticator應(yīng)用程序并注冊密鑰才能開始生成令牌。
如果你被鎖定在系統(tǒng)之外,那么就必須要聯(lián)系系統(tǒng)管理員,為你提供注冊和使用的新密鑰。但是,你也可以通過另一種方法登錄并自行生成密鑰。
還記得在初始步驟中生成的代碼嗎?你可以使用緊急刮擦碼作為登錄的令牌。每個刮擦碼只能使用一次,它可以保存在安全的地方,以便在最需要的時候使用。
代碼保存在 ~/.google_authenticator 文件中。
$ cat ~/.google_authenticator
刮碼
現(xiàn)在可以運行以下命令重新生成自己的密鑰。
$ google-authenticator
結(jié)論
本文展示了如何安裝谷歌身份驗證器,以及使用不同配置為SSH啟用多因素身份驗證的方式。
作為管理員,你還可以編寫bash腳本來自動生成密鑰并與用戶共享。在設(shè)置 MFA 之前,還應(yīng)加強(qiáng)SSH讓系統(tǒng)更安全。
作者介紹
卡爾???Karthick)是一位充滿熱情的軟件工程師,喜歡探索新技術(shù)。他是一位公眾講師,喜歡撰寫Linux和開源等方面的技術(shù)文章。
譯者介紹
康少京,51CTO社區(qū)編輯,目前從事通訊類行業(yè),底層驅(qū)動開發(fā)崗位,研究過數(shù)據(jù)結(jié)構(gòu),Python,現(xiàn)對操作系統(tǒng)和數(shù)據(jù)庫等相關(guān)領(lǐng)域感興趣。
原文標(biāo)題:??How To Setup Multi-Factor Authentication For SSH In Linux??,作者:Karthick