通過google身份驗證器加強linux帳戶安全

junsansi發表於2014-05-14

近期接連爆出的多起重大且具深遠影響的安全門事件,使得資訊保安越來越受重視,個人隱私保護是一方面,考慮到國情,個人隱私不是丟失多少的問題,而是還能保留多少,很多情況下無法左右,所以多數人都是抱著無所謂的心態。不過做為系統管理員,就不能也這樣想嘍,自己所管理的伺服器的安全可是不容小視,若有丟失,那影響可就大了。

 

同樣是基於國情,我們知道國內金融等領域推出的硬體驗證碼頗具實效,每次使用網銀時,必須要插入一個小裝置,並且需要將這個裝置中生成的隨機驗證碼,做為登入的重要條件輸入成功之後,才能正常使用系統功能。

對於屌絲管理員,我們不太可能為我們管理的伺服器申請這類裝置,不過,通過一些技術應用,我們可以將手機也變成一個類似隨機驗證碼生成器(感謝Google),每次登入系統時,除了常規的使用者/密碼驗證外,還需要繫結了指定金鑰的手機上生成的驗證碼,才能順利登入系統。若有此機制的話,那麼即使金鑰洩露,除非獲取到密碼的那個人,同時也拿到你的手機,否則因為它沒有驗證碼,仍然無法登入執行破壞,系統就是安全的。同學們,動心了沒有,如果好奇心沒有完全泯滅的話,就繼續往下看吧。

以我手邊的某臺Linux伺服器為例。下載Google的身份驗證模組:

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

解壓縮並編譯安裝,操作步驟如下:

# tar xvf libpam-google-authenticator-1.0-source.tar.bz2 

# cd libpam-google-authenticator-1.0

# make

# make install

而後,google的驗證模組就會被複制到/lib64/security目錄下,而用來生成金鑰的可執行程式:google-authenticator,則複製到/usr/local/bin目錄下,方便呼叫。

提示:編譯安裝google-authenticator需要pam-devel依賴包,如果沒有的話,請首先安裝該依賴包喲。

比如,我們想為jss使用者增加一層額外的驗證機制,則先通過google-authenticator生成金鑰:

[jss@localhost ~]$ google-authenticator 

 

Do you want authentication tokens to be time-based (y/n) y

首先會提示你,是否要基於時間生成令牌,選擇Y,然後它會生成金鑰,以及緊急狀態使用的驗證碼(5個,謹當無法獲取驗證碼時使用,注意這些緊急驗證碼用一次就少一個的喲,所以這幾個緊急驗證碼一定要儲存好,關鍵時刻要派上大用場的),詳細資訊如下:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/jss@localhost.localdomain%3Fsecret%3D3V7K2ONO55DE56SD

Your new secret key is: 3V7K2ONO55DE56SD

Your verification code is 424380

Your emergency scratch codes are:

  96307775

  87311306

  56915688

  84694809

  27875014

然後會提示你是否要更新驗證檔案,必須更新啊:

Do you want me to update your "/home/jss/.google_authenticator" file (y/n) y

提示是否禁止多次使用相同的令牌登入:

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

預設情況下,令牌只在30秒內有效,由於客戶端和伺服器時間不完全一致的因素,可以將時間視窗加大到最長4分鐘,是否要這麼做:

By default, tokens are good for 30 seconds and 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 1:30min to about 4min. Do you want to do so (y/n) y

是否限制嘗試次數,每30秒只能嘗試最多3次:

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

金鑰生成好之後,下面修改PAM中關於ssh的配置,編輯/etc/pam.d/sshd檔案:

# vim /etc/pam.d/sshd 

增加一行:

auth    required        pam_google_authenticator.so

接下來再修改ssh的配置檔案,編輯/etc/ssh/sshd_config檔案:

# vim /etc/ssh/sshd_config 

ChallengeResponseAuthentication no修改為ChallengeResponseAuthentication yes

然後重新啟動ssh服務:

 

當再次使用jss使用者以SSH方式登入時,就會提示輸出驗證碼:

[root@mysqldb02 ~]# ssh jss@192.168.30.249

Verification code: 

那麼,驗證碼從哪裡來呢,朋友,您這算是問到點兒上了。拿出你的手機,安裝一款名叫:Google身份驗證器的應用。在開啟的應用介面中新增帳戶,然後會出現兩個選擇:掃描條形碼(二維碼),或者選擇輸出提供的金鑰,任選其一即可。

有同學可能會問,這兩項資訊從哪裡來呢,同學,請你再仔細看下,執行google-authenticator命令後首先輸出的資訊,那個HTTP的網址,開啟你就會發現,原來它是個圖片二維碼,掃描即可。若網址打不開也沒關係,選擇金鑰就是了嘛。

帳戶新增完成後,您應該就能在手機上看到它生成的驗證碼了,先輸入驗證碼,然後再輸入密碼,只有驗證碼和密碼都輸入正確,才能正常登入。

Password: 

Last login: Tue Jan 14 10:14:33 2014 from 192.168.30.246

注意喲,輸入驗證碼的時間最長只有30秒鐘,超時之後該驗證碼就失效,需要到手機端獲取新的驗證碼才行。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-1161112/,如需轉載,請註明出處,否則將追究法律責任。

相關文章