每天似乎都有一個(gè)安全漏洞的新聞報(bào)道,說(shuō)我們的數(shù)據(jù)會(huì)因此而存在風(fēng)險(xiǎn)。盡管 ssh 是一種遠(yuǎn)程連接系統(tǒng)的安全方式,但你仍然可以使它更安全。本文將向你展示如何做到這一點(diǎn)。
此時(shí)雙因子驗(yàn)證two-factor authentication(2fa)就有用武之地了。即使你禁用密碼并只允許使用公鑰和私鑰進(jìn)行 ssh 連接,但如果未經(jīng)授權(quán)的用戶偷竊了你的密鑰,他仍然可以借此訪問(wèn)系統(tǒng)。
使用雙因子驗(yàn)證,你不能僅僅使用 ssh 密鑰連接到服務(wù)器,你還需要提供手機(jī)上的驗(yàn)證器應(yīng)用程序隨機(jī)生成的數(shù)字。
本文展示的方法是基于時(shí)間的一次性密碼time-based one-time password(totp)算法。google authenticator 用作服務(wù)器應(yīng)用程序。默認(rèn)情況下,google authenticator 在 fedora 中是可用的。
至于手機(jī),你可以使用與 totp 兼容的任何可以雙路驗(yàn)證的應(yīng)用程序。andorid 或 ios 有許多可以與 totp 和 google authenticator 配合使用的免費(fèi)應(yīng)用程序。本文與 freeotp 為例。
安裝并設(shè)置 google authenticator
首先,在你的服務(wù)器上安裝 google authenticator。 $ sudo dnf install -y google-authenticator
運(yùn)行應(yīng)用程序:
$ google-authenticator
該應(yīng)用程序提供了一系列問(wèn)題。下面的片段展示了如何進(jìn)行合理的安全設(shè)置:
do you want authentication tokens to be time-based (y/n) y
do you want me to update your /home/user/.google_authenticator file (y/n)? y這個(gè)應(yīng)用程序?yàn)槟闾峁┮粋€(gè)密鑰、驗(yàn)證碼和恢復(fù)碼。把它們放在安全的地方。如果你丟失了手機(jī),恢復(fù)碼是訪問(wèn)服務(wù)器的唯一方式。
設(shè)置手機(jī)驗(yàn)證
在你的手機(jī)上安裝驗(yàn)證器應(yīng)用程序(freeotp)。如果你有一臺(tái)安卓手機(jī),那么你可以在 google play 中找到它,也可以在蘋果 iphone 的 itunes 商店中找到它。
google authenticator 會(huì)在屏幕上顯示一個(gè)二維碼。打開(kāi)手機(jī)上的 freeotp 應(yīng)用程序,選擇添加新賬戶,在應(yīng)用程序頂部選擇二維碼形狀工具,然后掃描二維碼即可。設(shè)置完成后,在每次遠(yuǎn)程連接服務(wù)器時(shí),你必須提供驗(yàn)證器應(yīng)用程序生成的隨機(jī)數(shù)。
完成配置
應(yīng)用程序會(huì)向你詢問(wèn)更多的問(wèn)題。下面示例展示了如何設(shè)置合理的安全配置。
do you want to disallow multiple uses of the same authentication token? this restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y
by default, tokens are good for 30 seconds. in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. if you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens).
do you want to do so? (y/n) n
if the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. by default, this limits attackers to no more than 3 login attempts every 30s.
do you want to enable rate-limiting (y/n) y現(xiàn)在,你必須設(shè)置 ssh 來(lái)利用新的雙路驗(yàn)證。
配置 ssh
在完成此步驟之前,確保你已使用公鑰建立了一個(gè)可用的 ssh 連接,因?yàn)槲覀儗⒔妹艽a連接。如果出現(xiàn)問(wèn)題或錯(cuò)誤,一個(gè)已經(jīng)建立的連接將允許你修復(fù)問(wèn)題。
在你的服務(wù)器上,使用 sudo 編輯 /etc/pam.d/sshd 文件。
$ sudo vi /etc/pam.d/ssh
注釋掉 auth substack password-auth 這一行:
#auth substack password-auth
將以下行添加到文件底部:
auth sufficient pam_google_authenticator.so
保存并關(guān)閉文件。然后編輯 /etc/ssh/sshd_config 文件:
$ sudo vi /etc/ssh/sshd_config
找到 challengeresponseauthentication 這一行并將其更改為 yes:
challengeresponseauthentication yes
找到 passwordauthentication 這一行并將其更改為 no:
passwordauthentication no
將以下行添加到文件底部:
authenticationmethods publickey,password publickey,keyboard-interactive
保存并關(guān)閉文件,然后重新啟動(dòng) ssh:
$ sudo systemctl restart sshd
測(cè)試雙因子驗(yàn)證
當(dāng)你嘗試連接到服務(wù)器時(shí),系統(tǒng)會(huì)提示你輸入驗(yàn)證碼:
[user@client ~]$ ssh user@example.com
verification code:驗(yàn)證碼由你手機(jī)上的驗(yàn)證器應(yīng)用程序隨機(jī)生成。由于這個(gè)數(shù)字每隔幾秒就會(huì)發(fā)生變化,因此你需要在它變化之前輸入它。
如果你不輸入驗(yàn)證碼,你將無(wú)法訪問(wèn)系統(tǒng),你會(huì)收到一個(gè)權(quán)限被拒絕的錯(cuò)誤:
[user@client ~]$ ssh user@example.com
verification code:
verification code:
verification code:
permission denied (keyboard-interactive).
[user@client ~]$結(jié)論
通過(guò)添加這種簡(jiǎn)單的雙路驗(yàn)證,現(xiàn)在未經(jīng)授權(quán)的用戶訪問(wèn)你的服務(wù)器將變得更加困難。
via: https://fedoramagazine.org/two-factor-authentication-ssh-fedora/
作者:curt warfield 選題:lujun9972 譯者:mjseven 校對(duì):wxy