1. 程式人生 > >SSH通過“運維密碼”小程式實現 SSH 雙因子認證

SSH通過“運維密碼”小程式實現 SSH 雙因子認證

一、什麼是雙因子認證

GitHub:https://github.com/LCTT/WeApp-Password
雙因子認證(即 2FA),是一種通過組合兩種不同的驗證方式進行使用者身份驗證的機制。
在這種多重認證的系統中,使用者需要通過兩種不同的認證程式:
(1)提供他們知道的資訊(如使用者名稱/密碼)
(2)再借助其他工具提供使用者所不知道的資訊(如用手機生成的一次性密碼)

二、目的

實現登入Linux 伺服器時,除了輸入使用者名稱密碼外,需要輸入一次性的動態口令才能驗證成功。

三、在 Linux 系統中安裝 Google 身份驗證器伺服器端元件

生成動態口令的其中一個因素是時間,需要保持終端裝置和伺服器的系統時間一致,才能生成同一的動態口令
簡單說下chrony:chrony 是網路時間協議的(NTP)的另一種實現,與網路時間協議後臺程式(ntpd)不同,它可以更快地更準確地同步系統始終。

三、安裝前準備

3.1、安裝依賴

yum -y nstall gcc make pam-devel libpng-devel libtool wget git

3.2、新增阿里雲epel源:

RHEL 6/Centos 6
wget O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RHEL 7/Centos 7
wget O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

在 CentOS 上安裝 Google 身份驗證器伺服器端元件,啟用epel 之後,執行:

yum install google-authenticator

3.3、安裝依賴

yum -y install gcc make pam-devel libpng-devel libtool wget git

3.4、安裝Qrencode,谷歌身份驗證器需要呼叫該程式生成二維碼並顯示

yum install -y qrencode

3.5、安裝谷歌身份驗證器

wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz
 #解壓
tar zxvf 1.04.tar.gz
cd google-authenticator-libpam-1.04
 # 進行編譯和安裝
./bootstrap.sh && ./configure && make && make install

如果構建成功,你會在目錄中看到 pam_google_authenticator. 和 和 google-authenticator 兩個二進位制檔案。
在這裡插入圖片描述
3.6、使用以下命令生成驗證金鑰
google-authenticator
在這裡插入圖片描述
生成的二維碼:
在這裡插入圖片描述
**3.7、**在二維碼和金鑰字串後面,接著顯示了一個當前的校驗碼和幾個緊急金鑰。緊急金鑰你可以另行儲存的一個安全的地方,以防你在無法使用 Google 身份驗證器應用或“運維密碼”時使用(緊急金鑰是 8 位的,不同於普通的 6 位金鑰,也是一次性使用的)。
在這裡插入圖片描述
儲存 Google 伺服器端元件的配置檔案,Google 身份驗證器雖然運行了,但是相關設定還沒有儲存,接下來會提示儲存:
在這裡插入圖片描述
意思是:你想將配置檔案更新到 /root/.google_authenticator 儲存嗎?輸入 y 回車。

禁止同一令牌多次登入:
在這裡插入圖片描述
意思是:你是否要禁用同一金鑰多次登入,這將限制你每 30 秒只能使用該金鑰登入一次,但這能夠讓你可以更多地被提醒受到了中間人攻擊,甚至能夠防止這種攻擊。輸入 y 回車。

時間容錯設定:
在這裡插入圖片描述
這個可根據實際情況進行配置,一般一分鐘就足夠了。輸入 y回車。

暴力破解防護:
在這裡插入圖片描述
意思是:為了避免暴力破解,可以啟用速率限制,預設情況下,每 30 秒只能嘗試 3 次。輸入 y回車

配置完成:
配置完成後會在home目錄下生成一個許可權為 400 的隱藏檔案,如下圖所示:
在這裡插入圖片描述
3.8、開啟微信小程式:
開啟微信,依次點選“發現”,“小程式”,輸入“運維密碼”並搜尋。
點選“運維密碼”進入應用,然後點選列表下方的“新增場景”。 這會調起“掃一掃”功能,請掃描配置 google-authenticator 時所生成的二維碼,然後會識別出該場景資訊,你可以根據需要修改場景資訊,點選確定新增場景。
這樣 Google 身份驗證器就和“運維密碼”匹配上了。下面我們要使 SSH 服務可以支援該驗證。
3.9、配置SSH服務
新增認證模組
使用如下命令在 /etc/pam.d/sshd 檔案新增認證模組
在這裡插入圖片描述
在 Centos 6.6 或更低的版本中如果遇到無法進行 google-authenticator 驗證的情況,請將 auth required pam_google_authenticator.so放在 /etc/pam.d/sshd 檔案的最頂端進行測試一下。

配置挑戰式密碼認證:
在這裡插入圖片描述

vim /etc/ssh/sshd_config
passwordAuthentication yes
ChallengeResponseAuthentication yes #配置挑戰式密碼認證 
UsePAM yes
systemctl restart sshd #重啟 sshd 服務

切記:伺服器時間都得一致,因為這個錯誤浪費了一些時間。
本文件在centos7-7.2上都測試成功了,不同的環境可能有些小的誤差。
參考部落格:http://blog.csdn.net/weifangan/article/details/73332029