如何為 Linux 系統中的 SSH 新增雙重認證
近來很多知名企業都出現了密碼洩露,業內對多重認證的呼聲也越來越高。在這種多重認證的系統中,使用者需要透過兩種不同的認證程式:提供他們知道的資訊(如 使用者名稱/密碼),再借助其他工具提供使用者所不知道的資訊(如用手機生成的一次性密碼)。這種組合方式常叫做雙因子認證或者兩階段驗證。
為了鼓勵廣泛採用雙因子認證的方式,Google 公司釋出了 Google 身份驗證器,一款開源的,可基於開放規則(如 HMAP/ 基於時間)生成一次性密碼的軟體。這是一款跨平臺軟體,可執行在 Linux、 Android、 iOS。Google 公司同時也支援外掛式鑑別模組PAM (pluggable authentication module),使其能和其他也適用 PAM 進行驗證的工具(如 OpenSSH)協同工作。
在本教程中,我們將敘述整合 OpenSSH 和 Google 提供的身份驗證器實現如何為 SSH 服務設定雙因子認證。我將使用一款 Android 裝置來生成一次性密碼,本教程中需要兩樣武器:
(1) 一臺執行著 OpenSSH 服務的 Linux 終端,
(2) 一臺安卓裝置。
在 Linux 系統中安裝 Google 身份驗證器
第一步需要在執行著 OpenSSH 服務的 Linux 主機上安裝 Google 身份驗證器。按照如下步驟安裝 Google 身份驗證器及其PAM模組。
用安裝包安裝 Google 身份驗證器
如果你不想自己構建 Google 身份驗證器,在幾個 Linux 發行版上有已經編譯好的安裝包。安裝包裡面包含 Google 身份驗證器 二進位制程式和 PAM 模組。
在 Ubuntu 上安裝 Google 身份驗證器:
$ sudo apt-get install libpam-google-authenticator
在 Fedora 上安裝 Google 身份驗證器:
$ sudo yum install google-authenticator
在 CentOS 上安裝 Google 身份驗證器 ,需要首先啟用 EPEL 軟體庫,然後執行如下命令(LCTT 譯註:EPEL 庫中可能已經刪除了該軟體包,請使用原始碼編譯方式安裝):
$ sudo yum install google-authenticator
如果不想使用已經編譯好的安裝包,或者你的 Linux 發行版不在此列,可以自行編譯:
在 Linux 上編譯 Google 身份驗證器
首先,安裝構建 Google 身份驗證器所需的軟體包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install wget make gcc libpam0g-dev
在 CentOS、 Fedora 或 RHEL上:
$ sudo yum install wget make gcc pam-devel
然後下載 Google 身份驗證器的原始碼,並按如下命令編譯(已經從 Google Code 遷移到了 Github)。
$ wget https://github.com/google/google-authenticator/archive/master.zip
$ unzip master.zip
$ cd google-authenticator-master/libpam
$ ./bootstrap.sh
$ ./configure
$ make
如果構建成功,你會在目錄中看到 pam_google_authenticator.so
和 google-authenticator
兩個檔案。
最後,將 Google 身份驗證器安裝到合適位置。預設會安裝到 /usr/local/lib/security
下,根據你的系統不同,你可能需要將其符號連結到 pam 庫的位置(比如 CentOS 7 會在 /usr/lib64/security
)。
$ sudo make install
排錯
當編譯 Google 身份驗證器時出現如下錯誤:
fatal error: security/pam_appl.h: No such file or directory
要修復這個問題,請安裝如下依賴包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:
$ sudo yum install pam-devel
當 Google 身份驗證器安裝好後,你需要在 Linux 主機上建立驗證金鑰,並且在安卓裝置上註冊,注意這項配置操作是一次性的。我們將詳細敘述如何完成這些操作:
生成驗證金鑰
在 Linux 主機上執行 Google 身份驗證器:
$ google-authenticator
你將看到一個二維碼,它使用如下圖形表示我們數字形態的金鑰。一會我們要用到它在安卓裝置上完成配置。
Google 身份驗證器會問一些問題,如果你不確定,就回答 Y
。這個應急備用驗證碼(圖中 emergency scratch codes
)可以在你由於丟失了繫結的安卓裝置的情況下(所以不能得到生成的一次性密碼)恢復訪問。最好將應急備用驗證碼妥善儲存。
在安卓裝置上執行 Google 身份驗證器
我們需要在安卓裝置上安裝 Google 身份驗證器應用才能完成雙因子認證,到 Google Play 下載並安裝一個。在安卓裝置上執行 Google 身份驗證器,找到下圖所示中的配置選單。
你可以選擇“Scan a barcode” 或者“Enter provided key”選項。“Scan a barcode”允許你掃描二維碼來完成金鑰的輸入,在此可能需要先安裝掃描軟體 Barcode Scanner 應用。如果選擇“Enter provided key”選項,你可以使用鍵盤輸入驗證金鑰,如下圖所示:
無論採用上述兩種選項的任何方式,一旦成功,你將看到註冊成功提示和一次性密碼,如下圖所示:
為 SSH 伺服器用 Google 身份驗證器
最終我們需要修改兩個檔案來完成整合 Google 身份驗證器和 OpenSSH 服務這臨門一腳。
首先,修改 PAM 配置檔案,命令和需新增的內容如下:
$ sudo vi /etc/pam.d/sshd
auth required pam_google_authenticator.so
然後開啟 SSH 配置檔案,找到引數 ChallengeResponseAuthentication
,並啟用它。
$ sudo vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
最後,重啟 SSH 服務。
在 Ubuntu、 Debian 和 Linux Mint 上:
$ sudo service ssh restart
在 Fedora (或 CentOS/RHEL 7)上:
$ sudo systemctl restart sshd
在 CentOS 6.x或 RHEL 6.x 上:
$ sudo service sshd restart
不要退出當前的 ssh 連結,大多數 Linux 發行版重啟 ssh 服務並不會中斷當前已經建立的 ssh 連線。另外開個視窗去重新連線 ssh 服務,如果遇到問題,還可以在原來的 ssh 連線下修改和恢復。
驗證雙因子認證
在繫結的安卓裝置上執行 Google 身份驗證器,獲得一個一次性驗證碼,該驗證碼 30 秒內有效,一旦過期,將重新生成一個新的驗證碼。
現在和往常一樣,使用 SSH 登入終端
$ ssh user@ssh_server
當提示你輸入驗證碼的時候,輸入我們剛獲得的驗證碼。驗證成功後,再輸入 SSH 的登入密碼。
雙因子認證透過在使用者密碼前新增一層來有效的保護我們脆弱的使用者密碼。你可以使用 Google 身份驗證器來保護我們其他的密碼,如 Google 賬戶、GitHub、WordPress.com、Dropbox.com、Outlook.com等等。是否使用這項技術,取決於我們自己,但採用雙因子認證已經是行業的大趨勢了。
via: http://xmodulo.com/2014/07/two-factor-authentication-ssh-login-linux.html
相關文章
- Linux中為SSH啟用雙因素身份驗證Linux
- 如何在 Linux 中配置基於金鑰認證的 SSHLinux
- 為 Eureka 新增 Http Basic 認證HTTP
- ASO之關閉Apple ID的雙重認證APP
- xenomai核心解析--雙核系統呼叫(三)--如何為xenomai新增一個系統呼叫AI
- 為ssh伺服器新增2fa認證,一個python指令碼全搞定伺服器Python指令碼
- 認證系統之登入認證系統的進階使用 (二)
- 在 Fedora 上為 SSH 設定雙因子驗證
- SpringBoot專案新增2FA雙因素身份認證Spring Boot
- 作業系統(AIX)雙因素身份認證解決方案作業系統AI
- 如何將 SSH Key 新增到 GitLab 中?Gitlab
- Linux系統修改ssh埠教程。Linux
- 為什麼無線認證系統能被人們認可
- linux下兩臺機器之間實現SSH認證Linux
- 為Kubernetes叢集新增使用者認證
- 在Linux系統中建立SSH伺服器別名Linux伺服器
- 如何在Flutter中整合華為認證服務Flutter
- https雙向認證HTTP
- 雙重認證 也不安全:Gmail、Yahoo mail 已被攻破!AI
- 【等保】等保測評中雙因素認證是什麼意思?等於雙因子認證嗎?
- DRF內建認證元件之自定義認證系統元件
- 如何在 Linux 中建立 SSH 別名Linux
- Nginx 新增 Auth Basic 認證Nginx
- Linux系統中如何新增刪除使用者及使用者組?Linux
- 為何以及如何學Linux系統?Linux
- Linux系統中grep如何使用?Linux
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- linux系統怎麼新增每天定時任務? linux系統新增定時任務的教程Linux
- 如何通過 SSH 在遠端 Linux 系統上執行命令Linux
- 如何快速檢視Linux系統重啟情況Linux
- 寬頻認證計費系統的認證技術主要有哪些
- 在Linux中,什麼是SSH?它是如何工作的?Linux
- 蘋果開發者賬號開啟雙重認證步驟蘋果
- 統一身份認證系統的簡單看法
- Keytool配置 Tomcat的HTTPS雙向認證TomcatHTTP
- 在Linux中,如何監控系統的效能?Linux
- Openssl 設定 雙向認證證書的過程
- phpStorm 如何用 FTP,SSH 連線到虛擬機器 Linux 系統?PHPORMFTP虛擬機Linux
- 雙因素認證解決方案