采用 OTP + 密碼作為 SSH 的認證方案以保證安全性,這里就簡單描述一下實現(xiàn)方案。我們采用的軟件是 Google Authenticator,其客戶端實現(xiàn)支持 Android,iOS,BlackBerry 系統(tǒng)。
在服務器上執(zhí)行下面的操作:
# wget
http://www.linuxcto.com/dev/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
然后分別拷貝 pam_google_authenticator.so 和 google-authenticator 到 /lib/security/ 和 /usr/bin/ 目錄。之后編輯 /etc/pam.d/sshd 文件,在該文件的最前面插入一行:
1 | auth required pam_google_authenticator.so |
至此服務端的配置完成。需要注意的是在這個操作之后如果用戶沒有做公鑰認證的配置會導致用戶無法登陸系統(tǒng)。解決辦法有多種:基于安全起見可以強制用戶在管理員的協(xié)助下配置公鑰認證方式登錄系統(tǒng);或者在上面的配置項后設置 pam_google_authenticator.so 的選項為 nullok,這樣用戶在沒有做 OTP 相關的設置時可以先用密碼登錄系統(tǒng)來進行相應的操作。
如果 SSH 服務配置了只允許公鑰認證,則需要修改 /etc/ssh/sshd_config 文件的配置項為:
1 2 | ChallengeResponseAuthentication yes UsePAM yes |
并重啟 SSH 服務以支持 OTP 和密碼認證。
客戶端需要每個用戶登錄到系統(tǒng)之后進行相關的配置。用戶可以直接輸入 google-authenticator 后按提示操作即可,或者直接用下面的命令:
1 | $ google-authenticator -l test@knownsec.com -t -d -r 3 -R 30 -w 3 |
google-authenticator -h 能看到可用的參數(shù)。上面命令用到的參數(shù)解釋如下:
-l 設置移動設備上的程序?qū)?OTP 碼的標簽,便于區(qū)分不同的應用。
-t 設置采用基于時間的驗證。相應的也可以 -c 參數(shù)采用基于計數(shù)的驗證。
-d 禁止重用基于時間的驗證碼
-r 限制登錄頻率
-R 設置登錄頻率限制的時間間隔
-w 設置時間窗的大小,主要在移動設備的時間不是準確同步的情況下比較有用
如果系統(tǒng)安裝了 qrencode 軟件,google-authenticator 可以直接輸出一個二維碼供移動設備掃描錄入(見下圖),否則用戶需要根據(jù)其輸出來手工進行相應的設置。
剩下的就是驗證測試,祝順利!
P.S. 由于系統(tǒng)配置以及軟件版本等的不同,本文中提到的配置并不能覆蓋所有的環(huán)境。準確的配置需要參考官方文檔并結(jié)合實際的系統(tǒng)進行調(diào)整。
P.P.S. 顯然,本文中提到的 OTP 認證并不局限于 SSH,其他任何支持 PAM 認證方式的軟件也都可以使用。
歡迎光臨 WDlinux官方論壇 (http://fudaan.com/bbs/) | Powered by Discuz! 7.2 |