Pam oath
OATH Toolkit 為認證系統提供一次性密碼(OTP)組件。它包含一個 PAM 認證模塊,支持的技術包括基於消息的 HOTP 算法 (RFC 4226)和基於時間的 TOTP 算法 (RFC 6328)。OTP 生成器應用程式可用於 Android、iOS、Blackberry 和其他設備。與 Google Authenticator 類似,該認證機制整合在 Linux PAM 系統中。本指南展示該機制的安裝和配置。
安裝[編輯 | 編輯原始碼]
設置OATH[編輯 | 編輯原始碼]
OATH 種子是一個十六進位數字,每個用戶應該唯一。為了給一個用戶生成一個新的種子,可以使用下面的命令:
$ openssl rand -hex 10
12345678909876543210
每個用戶需要有一個 OATH,並在配置文件 /etc/users.oath
中連結到它。使用根用戶創建該文件並插入用戶種子:
/etc/users.oath
# Option User Prefix Seed HOTP/T30/6 user - 12345678909876543210
如果需要 HOTP,請使用此配置:
/etc/users.oath
# Option User Prefix Seed HOTP user - 12345678909876543210
確保該文件只能由 Root 用戶訪問:
# chmod 600 /etc/users.oath # chown root /etc/users.oath
設置 PAM[編輯 | 編輯原始碼]
要想只為某個特定的服務啟用 OATH,比如 OpenSSH,可以編輯 /etc/pam.d/sshd
文件,並在文件開頭添加以下一行:
auth sufficient pam_oath.so usersfile=/etc/users.oath window=30 digits=6
如果只輸入正確的 OATH 代碼即可認證通過。如果使用下面這行,可以把 OATH 作為一個要求,並讓 PAM 堆棧的其他部分得到處理:
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6
為了讓 SSH 登錄工作,確保這些選項在文件中啟用 /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes UsePAM yes
重啟 sshd.service
來啟用這些更改。
如果想強制 OATH 請求-響應,即使有一個有效的公鑰認證和密碼認證,把以下內容加入到 /etc/ssh/sshd_config
:
AuthenticationMethods publickey,keyboard-interactive:pam KbdInteractiveAuthentication yes PasswordAuthentication yes
/etc/pam.d/login
即可。使用 OATH 密碼登錄[編輯 | 編輯原始碼]
對於用 TOTP 登錄的情況:
$ oathtool -v --totp -d 6 12345678909876543210
SHA512
會有一處程序錯誤,但開發者沒有修復。參見 Gitlab 的公開問題。對於用 HOTP 登錄的情況:
$ oathtool -v -d 6 12345678909876543210
將12345678909876543210
替換為用戶對應的種子。將輸出類似如下內容:
Hex secret: 1ab4321412aebc Base32 secret: DK2DEFASV26A==== Digits: 6 Window size: 0 Start counter: 0x0 (0) 820170
最後一串數字即可現在用於登錄的代碼,但 Base32 密鑰更加有趣,因為可轉換成 QR 碼方便轉移密鑰。安裝 qrencode包 並運行以下命令轉換:
$ qrencode -o user.png 'otpauth://totp/user@machine?secret=DK2DEFASV26A====
相應改變用戶、機器和DK2DEFASV26A====
。一旦完成,可以用你喜歡的圖像顯示程序來顯示 QR 碼。另外,也可以用以下方法在終端上直接生成 QR 碼:
$ qrencode -t UTF8 'otpauth://totp/user@machine?secret=DK2DEFASV26A===='
使用 Aegis Authenticator 或 FreeOTP+,然後對該 user.png
(或類似 ASCII-art 的圖像)截圖,並在需要時讓它顯示 OTP 密碼,這樣十分方便。
user.png
文件中的 QR 碼也有這個密鑰。需要特別注意這個文件,它應該只存儲在加密的媒介上(你的手機需要使用加密,以達到任何合理的安全水平)。如果沒有,可以限制在像三星 Knox 這樣的沙盒中,以防止第三方應用程式潛在地訪問它們。