Pam oath - Arch Linux 中文维基

跳至內容

# Pam oath

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Pam oath，最近一次同步於 2022-11-20，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- OATH
- Google Authenticator
- YubiKey

OATH Toolkit 為認證系統提供一次性密碼（OTP）組件。它包含一個 PAM 認證模塊，支持的技術包括基於消息的 HOTP 算法 (RFC 4226）和基於時間的 TOTP 算法 (RFC 6328）。OTP 生成器應用程式可用於 Android、iOS、Blackberry 和其他設備。與 Google Authenticator 類似，該認證機制整合在 Linux PAM 系統中。本指南展示該機制的安裝和配置。

## 安裝

安裝 oath-toolkit包。

## 設置OATH

OATH 種子是一個十六進制數字，每個用戶應該唯一。為了給一個用戶生成一個新的種子，可以使用下面的命令：

    $ openssl rand -hex 10

    12345678909876543210

注意：本文中上述輸出種子是作為例子使用，不要直接使用。

每個用戶需要有一個 OATH，並在配置文件 `/etc/users.oath` 中連結到它。使用根用戶創建該文件並插入用戶種子：

提示：在一個終端登錄到具有root用戶權限的會話中，並在另一個終端中修改 PAM 配置。這樣，如果 PAM 設置出現問題，你仍然有一個帳戶登錄並修復，這在遠程連接時特別有用。

    /etc/users.oath

    # Option User Prefix Seed
    HOTP/T30/6 user - 12345678909876543210

警告：不要設置 T 大於60，否則會有報錯：（OATH_UNKNOWN_USER: 無法找到用戶的信息）。

如果需要 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

警告：當 TOTP 模式設置為 `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 密碼，這樣十分方便。

注意：你的用戶密匙是這個系統中最重要的信息。一旦設置手機來提供 OTP，它就會有這個密鑰，`user.png` 文件中的 QR 碼也有這個密鑰。需要特別注意這個文件，它應該只存儲在加密的媒介上（你的手機需要使用加密，以達到任何合理的安全水平）。如果沒有，可以限制在像三星 Knox 這樣的沙盒中，以防止第三方應用程式潛在地訪問它們。

## 參見

- 使用 pam_oath 和 Google Authenticator 的雙因素時間（TOTP）SSH 認證
- pam_oath 手冊

分類：​

- SSH
- 身份驗證

Pam oath
新增話題