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