使用 Google Authenticator 加強SSH登入安全性

摘要:使用Google Authenticator 加強SSH登入安全性

前言

Google Authenticator是一個一次性密碼產生器,

支持HOTP(HMAC-based one time password,由RFC 4226定義)和TOTP(Time-based one time password)。

Google Authenticator在Android、iOS和Blackberry上面都有原生的Client端,

同时還有人開發了j2me版本的Client端,

因而基本上市面上的所有智慧型手機、手持裝置(移動設備)都可以使用。

Google Authenticator同時還提供了PAM模組,所以也可用於Unix/Linux的驗證工作。

我們就是用Google Authenticator的PAM模組對SSH進行驗證。

 

Linux Server配置

CentOS release 6.2 x86_64 Final

 

1. SSH驗證配置

 a. vim /etc/pam.d/sshd

     第一行加入

     auth       required     pam_google_authenticator.so

 b. vim /etc/ssh/sshd_config

     找到『ChallengeResponseAuthentication』和『UsePAM

     確認設定都為『yes』

     ChallengeResponseAuthentication yes

     UsePAM yes (註:預設為yes)

     儲存後再重新啟動服務

     service sshd restart

2. 安裝相關模組

 a. yum -y install gcc pam-devel libpng-devel

 

3. 安裝qrencode

此工具可以產生QRCodeGoogle Authenticator命令行產生QRCode就是調用它。

wget http://fukuchi.org/works/qrencode/qrencode-3.3.1.tar.gz

tar zxvf qrencode-3.3.1.tar.gz

cd qrencode-3.3.1

./configure --prefix=/usr

make && make install

註:按說明是可以產出,不過我測試時沒產出,所以還是使用Google Chart API產出的QRCode來用,

      因此此工具可有可無。

 

4. 安裝Google Authenticator PAM

wget  http://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2

tar jxvf libpam-google-authenticator-1.0-source.tar.bz2

cd libpam-google-authenticator-1.0

make && make install

 

5. Google Authenticator配置

首先需要切換到對應的User(因為我目前是測試用,所以先以root來進行操作),如果只有一個User的話,

可以省略這一步。

 a. google-authenticator

     輸入『google-authenticator』後,會詢問『Do you want authentication tokens to be time-based (y/n)』,

     基本上就是以時間為基礎產生的驗證碼,選擇『y』。

     結果類似下圖(我的qrencode沒執行成功,所以沒有QRCode):

     qrencode有執行成功的話,如下圖:

     第一張圖反白的密鑰URL複製到瀏覽器上,其為使用Google Chare API產出的QRCode,可進行掃描(如下圖)。

     也可以按照密鑰URL下面的文字密鑰手工輸入。

     當Google Authenticator識別了這個帳號後,驗證器就配置好了。而在文字密鑰下提供了幾個緊急驗證碼,

     此為當手機丟了或是不在身邊時所用的,請妥善保管。

 b. 儲存設定

     此時Google Authenticator雖然已在執行了,但剛剛產出的文字密鑰及緊急驗證碼等相關設定尚未儲存,

     所以會問『Do you want me to update your “/root/.google_authenticator” file (y/n)』 ,選擇『y』。

 c. 多人使用

     是否限制多人使用相同的驗證金鑰,以安全性來說,當然選『y』。

 d. 時間差

     是否開啟設定防止Client與Server因時間差距太大而導致驗證失敗,可根據實際情況來設定。我是選擇『n』 ,

     除非Server常時間不準(那應該要換主機板了)

     或未設定ntp,或者是手機等移動設備不常上網,那就要選『y』了。

 e. 次數限制

     不用說,一定選『y』。

 

以上設定完畢後,目錄中會多一個檔案『.google_authenticator』(默認為400),此時系統已經完整運作了,

之後除非為新User產生或是需要重新產生,否則不需再執行google-authenticator

 

Server登入測試圖

 

 

Client端設置

Android:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2

或到Google Play 搜尋並安裝 Google Authenticator

iOS:http://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8

其他:請自行搜尋下載安裝或參考http://support.google.com/accounts/bin/answer.py?hl=en&answer=1066447

 

我是使用Android手機,掃完QRCode後,每30秒產生一組新驗證碼,如下圖:

 

注意事項

1. Selinux:需設定為disabled

2. 可與rsa公私鑰認證一起使用,但只差別在與電腦裡有沒有rsa key而已,如果沒有的話才會用到。

3. 同一個『.google_authenticator』可用在別台Server上,所以在安全性上仍須注意。

4. 商用OTP系統一般是C/S網路版方式,有一個統一的Authentication Server,為了保證高可用性,

    一般會有一主一備兩台伺服器。

5. Google Authenticator是一個基於時間的產生驗證碼的程式,因此不管是伺服器端還是手機用戶端,

    對時間的要求都是非常嚴格的,要時刻保持與NTP伺服器同步。

6. Google Authenticator和條型碼掃瞄器默認是不會產生任何GPRS和WIFI流量的。

7. 如果不需要使用者登入時輸入OTP密碼,而是在使用者su到root時要求輸入,

    可以把PAM認證語句加入到『/etc/pam.d/su』中。

8. 當伺服器啟用PAM認證之後,所有使用者都是要求輸入TOTP密碼,

    所以需要每個使用者在自己的目錄下產生一個『.google_authenticator』檔案。

 

參考資料來源

https://app.shopback.com/RBANl9P3Ysb

http://code.google.com/p/google-authenticator/

http://m114.org/system/google-authenticator-strengthen-ssh-login-security.html

https://wzyboy.im/post/765.html

http://www.ipcpu.com/2012/07/google-auth-sshd/

http://blog.onovps.com/archives/centos-ssh-google-authenticator.html

http://heikezhi.com/2011/09/26/simple-two-factor-ssh-authentication-with-google-authenticator/