Centos SSH雙因子認證

一、簡介

雙因子認證 – Two-factor authenticator(即 2FA),是一種通過組合兩種不同的驗證方式進行用戶驗證的機制。
OpenSSH雙因子認證是信息安全等級保護中較爲重要的安全檢測項之一,要求遠程登陸核心服務器時必須進行二次認證(指紋、虹膜、動態碼等)。
配置免費開源的Google Authenticator動態碼認證便是一個不錯的雙因子認證方案,輕鬆實現遠程登陸核心服務器時,必須正確輸入谷歌驗證碼和系統用戶密碼後才能正常遠程登陸,Google Authenticator是基於TOTP實現的。
TOTP的全稱是"基於時間的一次性密碼"(Time-based One-time Password)。它是公認的可靠解決方案,已經寫入國際標準RFC6238。

認證過程大體如下:
①用戶開啓雙因子認證後,服務器生產一個密鑰
②服務器提示用戶掃描二維碼生成密鑰,並保存到用戶的手機
③用戶登錄時輸入驗證碼,服務器會將用戶輸入的驗證碼和本地的進行比對,驗證通過後則可以登錄。驗證碼週期爲30s

二、安裝

1、安裝依賴包

#安裝最新epel源
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

#依賴
yum install -y gcc autoconf automake libtool pam-devel 

2、源碼編譯安裝

##下載源代碼
cd /usr/local/src/
wget --no-check-certificate https://github.com/google/google-authenticator-libpam/archive/1.07.tar.gz
tar xzf 1.07.tar.gz
cd google-authenticator-libpam-1.07/

##編譯
./bootstrap.sh
./configure --prefix=/usr/local/google-authenticator
make  
make install

##創建軟鏈接
ln -s /usr/local/google-authenticator/lib/security/pam_google_authenticator.so /lib64/security/pam_google_authenticator.so

##將可執行文件加到環境變量
echo "export PATH=\$PATH:/usr/local/google-authenticator/bin" >> /etc/profile
source /etc/profile

3、rpm包安裝

yum -y install google-authenticator

備註:源碼編譯安裝和rpm包安裝只需要一種即可,這裏我採用的是rpm包安裝方式。
在這裏插入圖片描述

三、配置谷歌密鑰

# google-authenticator
Do you want authentication tokens to be time-based (y/n)  y   #是否啓用基於時間的認證
Do you want me to update your "/home/proot/.google_authenticator" file? (y/n)  y   #將認證信息寫入到這個文件內
your chances to notice or even prevent man-in-the-middle attacks (y/n)  y        #每次生成的驗證碼經過30s自動失效
Do you want to do so? (y/n)  n  #如果輸入y,可以在4分鐘查看8個有效的驗證碼,如果輸入n,可以在一分半中查看三個有效驗證碼
Do you want to enable rate-limiting? (y/n)  y     #是否啓用速率限制,主要是爲了防止攻擊

在這裏插入圖片描述

四、下載app創建動態碼

首次創建動態碼時需要輸入secret key進行驗證,手機不在身邊需要緊急登陸時,則可以使用emergency scratch codes,使用後自動失效。

IOS:https://apps.apple.com/cn/app/google-authenticator/id388497605
Android:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=zh_CN

五、配置OpenSSH PAM

# sudo sed -i '1a\auth       required     pam_google_authenticator.so' /etc/pam.d/sshd 

六、配置OpenSSH並重啓

# sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config  
# sudo systemctl restart sshd

七、登陸測試

目前僅proot用戶實現了雙因子認證,其他用戶不論輸入任何動態碼都一律視爲驗證失敗而導致無法正常登陸。其他用戶配置雙因子認證只需拷貝/home/proot/.google_authenticator到對應用戶的家目錄再賦權即可。

# ssh [email protected]  
Verification code:  
Password:  

擴展:

##開啓密鑰,密碼和驗證碼驗證
# /etc/ssh/sshd_config添加
AuthenticationMethods  publickey,password publickey,keyboard-interactive
# /etc/pam.d/sshd 將 auth       substack     password-auth  註釋掉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章