2019年2月11日 星期一

[經驗分享]為 Proxmox VE 啟用雙因素驗證登入



Proxmox VE 提供了相當多種的帳號密碼驗證方式,也俱備齊全的權限設定作法,若是想要更加提高管理者帳號的安全性,除了加強密碼的複雜度以外,有沒有其它作法?

可以的,您可以為 Proxmox VE 啟用雙因素驗證 (2FA,Two-Factor authentication) 機制。








驗證設定

這次將以 pve 驗證帳號為例,若使用 pam 帳號請自行替換。

首先,我們先登入 PVE 的 WebUI,來到 [Datacenter 資料中心] > [Authentication 驗證] > [pve] > [Edit 編輯]。


進入驗證設定畫面


進入設定畫面以後,請點選 [TFA] > [OATH]。

啟用 TFA 為 OATH 模式


至此,已經完成 pve 這個驗證模式的雙因素驗證準備。






金鑰準備

接下來,我們要進入產出金鑰的程序,以供要使用雙因素驗證的帳號帶入。

在過程中我們會需要產出 QRCode,所以請安裝 qrencode 這個套件。
安裝 qrencode
apt install qrencode

安裝完成後,我們要準備一支 shell script,用來產生金鑰以及 QRCode,前者要給 PVE WebUI 使用,後者要給手機上使用 OTP App 掃描。

這支 shell script 是參考官方的版本稍作修改,以便應用不同的帳號資訊。請將以下內容存成 /opt/make-oathqrcode.sh
產生金鑰與 QRCode 用 shell script
#!/bin/bash
clear
USERNAME=$1
HOSTNAME=$(hostname --fqdn) OATHKEY=$(oathkeygen)
echo -e "OATH
key ID for user $USERNAME@$HOSTNAME: $OATHKEY\r\r"
qrencode -t ANSIUTF8 -o - $(echo otpauth://totp/PVE:$USERNAME@$HOSTNAME?secret=$OATHKEY)

存檔離開之後,請再給予執行權限。
給予執行權限
chmod +x /opt/make-oathqrcode.sh

完成上述步驟,即可產出金鑰與 QRCode,請在這支 shell script 後加上要產生給目標使用的帳號名稱,本例為 testotp 這個帳號。
產生金鑰與 QRCode
/opt/make-oathqrcode.sh testotp

執行以後,畫面上就會出現我們需要的資訊。執行時若是使用 WebUI 的命令列,請使用 noVNC 比較不會因為字型問題導致 QRCode 無法讀取。

產出金鑰與 QRCode


這個畫面可以先放著,我們進行下一步。

題外話,用純文字模式拼出 QRCode 這招真的讚。






帳號設定


請到 WebUI 的 [Datacenter 資料中心] > [Users 帳號] > [testotp] > [Edit 編輯]。

進入帳號編輯畫面


進入以後,請將剛剛的金鑰字串貼在最下方的 Key IDs 欄位裡,若有多組金鑰,可以用空格分隔填入。

在帳號資料裡填入金鑰


存檔離開後,即可完成此帳號做雙因素的所有準備。






手機配對

我們使用手機 App 做為 OTP 對應產生器,請安裝 FreeOTP 這支由 Red Hat 所開發的免費 App,在 iOS、Android 均有提供,在此以 Android 版為例。

FreeOTP Authenticator App


請於安裝完成以後,按下主畫面上方的 Scan 按鈕。


點選掃描工具



接著將鏡頭對準剛剛在命令列產生的 QRCode,完成後會自動產生這筆 OTP 相關資訊。



掃描後自動建立資訊


至此,手機 OTP 驗證器已經設定完成,可以開始使用了。






OTP登入

請來到 PVE WebUI 的登入頁面,會發現多了一個 OTP 欄位。

登入畫面增加 OTP 欄位


接著請到手機上開啟 FreeOTP App,並點選剛剛建立的那一筆 OTP 資訊,畫面就會產出一個具有時效性的 OTP 密碼,請用此 OTP 密碼填入,並搭配原有的帳號密碼即可登入。



產生 OTP 密碼


到此,整個流程已經全部完成,除了前置作業第一次做比較繁雜以外,往後的其它帳號就會比較快速完成了。






結論

儘管我們會把 PVE 主機放在較為隱密安全的環境,但若在安全強度要求較高的單位,可以利用 PVE 已經提供的 2FA 雙因素驗證機制,強化管理帳號的安全性。

若是 PVE 平台有開放給其它使用者使用,更可以利用這道機制,防止使用者因帳密外洩而導致 PVE 主機連帶受害。






參考資料