為了鼓勵廣泛采用雙因子認(rèn)證的方式,Google公司發(fā)布了Google Authenticator,一款開源的,可基于開放規(guī)則(如 HMAP/基于時間)生成一次性密碼的軟件。這是一款跨平臺軟件,可運行在Linux, Android, iOS。Google公司同時也支持插件式鑒別模塊PAM(pluggable authentication module),使其能和其他也適用PAM進(jìn)行驗證的工具(如OpenSSH)協(xié)同工作。
在本教程中,我們將敘述集成OpenSSH和Google提供的認(rèn)證器實現(xiàn)如何為SSH服務(wù)設(shè)置雙因子認(rèn)證。我將使用一款A(yù)ndroid設(shè)備來生成一次性密碼,本教程中需要兩樣武器:(1)一臺運行著OpenSSH服務(wù)的Linux終端,(2)一臺安卓設(shè)備。
在Linux系統(tǒng)中安裝Google Authenticator
第一步需要在運行著OpenSSH服務(wù)的Linux主機(jī)上安裝Google認(rèn)證器。按照如下步驟安裝Google認(rèn)證器及其PAM模塊。
用安裝包安裝 Google Authenticator
如果你不想自己構(gòu)建 Google Authenticator,在幾個 Linux 發(fā)行版上有已經(jīng)編譯好的安裝包。安裝包里面包含 Google Authenticator 二進(jìn)制程序和 PAM 模塊。
在 Ubuntu 上安裝 Google Authenticator:
- $ sudo apt-get install libpam-google-authenticator
在 Fedora 上安裝 Google Authenticator:
- $ sudo yum install google-authenticator
在 CentOS 上安裝 Google Authenticator ,需要首先啟用 EPEL 軟件庫,然后運行如下命令:
- $ sudo yum install google-authenticator
如果不想使用已經(jīng)編譯好的安裝包,或者你的 Linux 發(fā)行版不在此列,可以自行編譯:
在 Linux 上 Google Authenticator
首先,安裝構(gòu)建 Google Authenticator 所需的軟件包。
在 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 Authenticator 的源代碼,并按如下命令編譯。
- $ wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
- $ tar xvfvj libpam-google-authenticator-1.0-source.tar.bz2
- $ cd libpam-google-authenticator-1.0
- $ make
如果構(gòu)建成功,你會在目錄中看到 pamgoogleauthenticator.so 和 google-authenticator 兩個文件。
最后,將 Google Authenticator 安裝到合適位置
- $ sudo make install
排錯
當(dāng)編譯 Google Authenticator 時出現(xiàn)如下錯誤:
- fatal error: security/pam_appl.h: No such file or directory
要修復(fù)這個問題,請安裝如下依賴包。
在 Debian、 Ubuntu 或 Linux Mint 上:
- $ sudo apt-get install libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:
- $ sudo yum install pam-devel
當(dāng)Google認(rèn)證器安裝好后,你需要在Linux主機(jī)上創(chuàng)建驗證密鑰,并且在安卓設(shè)備上注冊,注意這項配置操作是一次性的。我們將詳細(xì)敘述如何完成這些操作:
生成驗證密鑰
在Linux主機(jī)上運行Google認(rèn)證器
- $ google-authenticator
你將看到一個QR碼,它使用如下圖形表示我們數(shù)字形態(tài)的密鑰。一會我們要用到它在安卓設(shè)備上完成配置。
Google認(rèn)證器會問一些問題,如果你不確定,就回答"Yes"。這個應(yīng)急備用驗證碼(圖中 emergency scratch codes)可以在你由于丟失了綁定的安卓設(shè)備的情況下(所以不能得到生成的一次性密碼)恢復(fù)訪問。最好將應(yīng)急備用驗證碼妥善保存。
在安卓設(shè)備上運行Google認(rèn)證器
我們需要在安卓設(shè)備上安裝Google Authenticator app才能完成雙因子認(rèn)證,到Google Play下載并安裝一個。在安卓設(shè)備上運行Google認(rèn)證器,找到下圖所示中的配置菜單。
你可以選擇"Scan a barcode" 或者"Enter provided key"選項。"Scan a barcode"允許你掃描QR碼來完成密鑰的輸入,在此可能需要先安裝掃描軟件Barcode Scanner app。如果選擇"Enter provided key"選項,你可以使用鍵盤輸入驗證密鑰,如下圖所示:
無論采用上述兩種選項的任何方式,一旦成功,你將看到注冊成功提示和一次性密碼,如下圖所示:
為SSH服務(wù)器用Google認(rèn)證器
最終我們需要修改兩個文件來完成集成Google認(rèn)證器和OpenSSH服務(wù)這臨門一腳。
首先,修改PAM配置文件,命令和需添加的內(nèi)容如下:
- $ sudo vi /etc/pam.d/sshd
- auth required pam_google_authenticator.so
然后打開SSH配置文件,找到參數(shù)ChallengeResponseAuthentication,并啟用它。
- $ sudo vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
最后,重啟SSH服務(wù)。
在 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
驗證雙因子認(rèn)證
在綁定的安卓設(shè)備上運行Google認(rèn)證器,獲得一個一次性驗證碼,該驗證碼30秒內(nèi)有效,一旦過期,將重新生成一個新的驗證碼。
現(xiàn)在和往常一樣,使用SSH登錄終端
- $ ssh user@ssh_server
當(dāng)提示你輸入驗證碼的時候,輸入我們剛獲得的驗證碼。驗證成功后,再輸入SSH的登錄密碼。
雙因子認(rèn)證通過在用戶密碼前新增一層來有效的保護(hù)我們脆弱的用戶密碼。你可以使用Google認(rèn)證器來保護(hù)我們其他的密碼,如Google賬戶, WordPress.com, Dropbox.com, Outlook.com等等。是否使用這項技術(shù),取決于我們自己,但采用雙因子認(rèn)證已經(jīng)是行業(yè)的大趨勢了。謝謝閱讀,希望能幫到大家,請繼續(xù)關(guān)注腳本之家,我們會努力分享更多優(yōu)秀的文章。