Linux中國

在 Fedora 上為 SSH 設置雙因子驗證

每天似乎都有一個安全漏洞的新聞報道,說我們的數據會因此而存在風險。儘管 SSH 是一種遠程連接系統的安全方式,但你仍然可以使它更安全。本文將向你展示如何做到這一點。

此時 雙因子驗證 two-factor authentication (2FA)就有用武之地了。即使你禁用密碼並只允許使用公鑰和私鑰進行 SSH 連接,但如果未經授權的用戶偷竊了你的密鑰,他仍然可以藉此訪問系統。

使用雙因子驗證,你不能僅僅使用 SSH 密鑰連接到伺服器,你還需要提供手機上的驗證器應用程序隨機生成的數字。

本文展示的方法是 基於時間的一次性密碼 Time-based One-time Password (TOTP)演算法。Google Authenticator 用作伺服器應用程序。默認情況下,Google Authenticator 在 Fedora 中是可用的。

至於手機,你可以使用與 TOTP 兼容的任何可以雙路驗證的應用程序。Andorid 或 iOS 有許多可以與 TOTP 和 Google Authenticator 配合使用的免費應用程序。本文與 FreeOTP 為例。

安裝並設置 Google Authenticator

首先,在你的伺服器上安裝 Google Authenticator。 $ sudo dnf install -y google-authenticator

運行應用程序:

$ google-authenticator

該應用程序提供了一系列問題。下面的片段展示了如何進行合理的安全設置:

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

這個應用程序為你提供一個密鑰、驗證碼和恢復碼。把它們放在安全的地方。如果你丟失了手機,恢復碼是訪問伺服器的唯一方式。

設置手機驗證

在你的手機上安裝驗證器應用程序(FreeOTP)。如果你有一台安卓手機,那麼你可以在 Google Play 中找到它,也可以在蘋果 iPhone 的 iTunes 商店中找到它。

Google Authenticator 會在屏幕上顯示一個二維碼。打開手機上的 FreeOTP 應用程序,選擇添加新賬戶,在應用程序頂部選擇二維碼形狀工具,然後掃描二維碼即可。設置完成後,在每次遠程連接伺服器時,你必須提供驗證器應用程序生成的隨機數。

完成配置

應用程序會向你詢問更多的問題。下面示例展示了如何設置合理的安全配置。

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

現在,你必須設置 SSH 來利用新的雙路驗證。

配置 SSH

在完成此步驟之前,確保你已使用公鑰建立了一個可用的 SSH 連接,因為我們將禁用密碼連接。如果出現問題或錯誤,一個已經建立的連接將允許你修復問題。

在你的伺服器上,使用 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

保存並關閉文件。然後編輯 /etc/ssh/sshd_config 文件:

$ sudo vi /etc/ssh/sshd_config

找到 ChallengeResponseAuthentication 這一行並將其更改為 yes

ChallengeResponseAuthentication yes

找到 PasswordAuthentication 這一行並將其更改為 no

PasswordAuthentication no

將以下行添加到文件底部:

AuthenticationMethods publickey,password publickey,keyboard-interactive

保存並關閉文件,然後重新啟動 SSH:

$ sudo systemctl restart sshd

測試雙因子驗證

當你嘗試連接到伺服器時,系統會提示你輸入驗證碼:

[user@client ~]$ ssh user@example.com
Verification code:

驗證碼由你手機上的驗證器應用程序隨機生成。由於這個數字每隔幾秒就會發生變化,因此你需要在它變化之前輸入它。

如果你不輸入驗證碼,你將無法訪問系統,你會收到一個許可權被拒絕的錯誤:

[user@client ~]$ ssh user@example.com
Verification code:
Verification code:
Verification code:
Permission denied (keyboard-interactive).
[user@client ~]$

結論

通過添加這種簡單的雙路驗證,現在未經授權的用戶訪問你的伺服器將變得更加困難。

via: https://fedoramagazine.org/two-factor-authentication-ssh-fedora/

作者:Curt Warfield 選題:lujun9972 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國