在 Fedora Linux 上使用 FIDO U2F 安全密鑰
FIDO U2F 安全密鑰是一種小型的基於 USB/NFC 的設備。它是一種硬體安全令牌,具有多個安全相關的用途模塊。FIDO U2F 標準兼容的密鑰品牌有多種,包括 NitroKey、SoloKey v2 和 YubiKey。與類似 Yubico OTP 的專有協議相比,FIDO 協議是不依賴特定硬體令牌的,並且使用的工具也不依賴特定製造商。
本文介紹了 FIDO 協議,並展示了如何安裝和啟用 FIDO U2F 安全密鑰作為替代身份驗證因素,以用於登錄終端、GDM 或進行 sudo 認證。
對於 YubiKey,特別是其不支持 FIDO2/U2F 的舊版設備,請參閱之前的文章:
本文不涵蓋存儲 OpenPGP 密鑰或 X.509 證書的操作,因為這些功能與硬體相關,不屬於 FIDO U2F 標準的一部分。
保留備用安全密鑰
一旦你開始使用安全令牌,就必須考慮到自己可能會被鎖定在與這些令牌相關聯的賬戶之外的情況。由於硬體安全令牌是獨特的,並且被設計為非常難以複製,你不能像在使用 KeePass 或 AndOTP 等軟體保險庫時那樣製作備份。因此,你使用主要密鑰進行的所有註冊都應立即使用第二個備份密鑰重複進行,並將其存儲在安全的位置,甚至可能是保險箱中。
在實踐中,這意味著你需要將兩個硬體令牌註冊到你的 Linux 和 Web 賬戶中,並生成兩份 OpenSSH 私鑰,並將這兩份 OpenSSH 公鑰上傳到你使用的伺服器和服務(例如 GitHub)中。
如果你丟失了一個密鑰,你將需要使用第二個密鑰登錄與密鑰註冊的每個服務,刪除丟失的密鑰,並註冊一個新密鑰。對於使用 FIDO2 協議的無密碼登錄尤其如此。
FIDO2、U2F 和 FIDO 聯盟
FIDO2 是由 FIDO 聯盟 維護的一系列標準。FIDO 聯盟希望最終完全摒棄密碼,並提供通過多個因素安全驗證用戶身份的過程,而無需使用密碼。
該標準包括萬維網聯盟(W3C)的 網頁認證 (WebAuthn)和 FIDO 聯盟的 客戶端到認證器協議 (CTAP)。WebAuthn 是一種用於請求和處理公鑰挑戰進行認證的標準 API。通過這個標準,瀏覽器會向客戶端發送一個 挑戰 ,然後客戶端使用私鑰生成一個 響應 ,挑戰者再使用之前交換的公鑰進行驗證。如何生成挑戰答案對於服務來說是不可知的,而是由 CTAP 控制。用戶可能會被要求使用多種驗證方法,如生物識別、PIN 或存在性檢查(或這些方法的組合)。這些驗證方式在認證時與註冊密鑰時的方式相同。
為了保護與硬體令牌的任何交互,可以選擇設置一個訪問 PIN,並且默認情況下未設置。大多數密鑰在連續八次輸入訪問 PIN 失敗後將自動失效。恢復失效的密鑰並設置新 PIN 的唯一方法是重置密鑰。然而,當密鑰重置時,所有其服務註冊將丟失!
FIDO2 密鑰還支持 FIDO U2F 協議(現已更名為 CTAP1)。該協議旨在提供第二或多因素(但非無密碼)認證。Linux 的 PAM 認證系統也可以配置為使用 U2F 協議。雖然 FIDO U2F 不是為無密碼認證設計的,但 U2F PAM 模塊允許無密碼認證。
安全影響
FIDO2 / U2F 通過將安全密鑰與用戶賬戶綁定來工作。大多數密鑰默認啟用/使用基本的存在性檢查。它們通常通過點亮並提示你觸摸密鑰來進行存在性檢查。FIDO2 PIN 是可選的,默認情況下未設置。當密鑰用於登錄 Linux 帳戶或用於使用 sudo 時,只需確保設備和密鑰物理上存在即可。FIDO2 PIN 是一個重要的附加驗證步驟,用於確保只有你才能使用密鑰進行身份驗證。
等一下!現在我還要記住額外的 PIN 嗎?這不就是一個更短的密碼嗎?
—— 擔心的讀者
FIDO2 PIN 不是密碼,它是一個簡短、容易記住的短語。這並不是一個問題,因為:
- 你需要物理訪問密鑰 且 需要知道 PIN。
- 輸入 PIN 錯誤達到八次會使密鑰失效,這使得暴力破解變得困難。
相反地,現在你可以使用存儲在密碼管理器中的安全密碼,而無需記住它。
谷歌在 2016 年進行的一項案例研究,題為 《安全密鑰:現代網路的實用密碼學第二因素》,顯示了安全密鑰有效地保護用戶免受密碼重用、釣魚和中間人攻擊的影響。
使用 PAM 進行用戶認證
本地系統認證使用 可插拔認證模塊(PAM)。U2F 設備的 PAM 模塊(因此進行認證)是 pam_u2f
。你的密鑰是否支持 FIDO2 或 FIDO U2F 取決於其固件版本和硬體型號。
設置如下:
- 安裝 PAM 模塊。
- 將密鑰註冊到你的用戶賬戶上。
- 使用
authselect
在 PAM 中激活智能卡支持。
authselect 是一個用於配置帶有可重現配置文件的 PAM 的工具。使用 authselect
的配置文件可以避免手動修改 /etc/pam.d
目錄下的配置文件。
依賴項
所需的軟體包可在官方倉庫中獲取。
[…]$ sudo dnf install pam-u2f pamu2fcfg fido2-tools
在密鑰上設置 FIDO2 PIN
FIDO2 標準定義了一種用於訪問保護的可選 PIN。如果 PIN 丟失或失效,沒有 PUK 或其他恢復方式,請確保你有一種備用的身份驗證方法。如果通過連續輸入無效的 PIN 使 PIN 失效,恢復的唯一方法是重置密鑰。然而,重置密鑰會刪除其所有憑據,並將其與以前註冊的所有服務斷開連接。
fido2-tools
包含一個用於設置密鑰的 FIDO2 PIN 的工具: fido2-token
。使用 fido2-token -L
獲取當前連接的 FIDO2 設備列表,並使用 fido2-token -C </path/to/device>
設置一個新的 PIN:
[…]$ fido2-token -L
/dev/hidraw1: vendor=0x1050, product=0x0407 (Yubico YubiKey OTP+FIDO+CCID)
[…]$ fido2-token -C /dev/hidraw1
Enter current PIN for /dev/hidraw1:
Enter new PIN for /dev/hidraw1:
將安全密鑰註冊到本地賬戶
使用工具 pamu2fcfg
檢索一個配置行,該行將放入 ~/.config/Yubico/u2f_keys
中。pam_u2f
是由 Yubico 提供的通用 U2F 密鑰模塊,因此使用 Yubico 特定的默認配置路徑。該文件中的每個配置行由用戶名和密鑰特定的憑據/配置部分以冒號分隔。確保每個用戶僅使用一行。
fedora-user:owBYtPIH2yzjlSQaRrVcxB...Pg==,es256,+presence+pin[:該用戶另外的密鑰]
如果密鑰受 PIN 保護,你將被要求輸入 PIN 來進行此操作。對於第一個密鑰的初始註冊,請使用以下命令:
[…]$ mkdir -p ~/.config/Yubico
[…]$ pamu2fcfg --pin-verification > ~/.config/Yubico/u2f_keys
要將另一個密鑰(例如備份密鑰)添加到此單用戶配置中,請使用以下命令:
[…]$ pamu2fcfg --nouser --pin-verification >> ~/.config/Yubico/u2f_keys
pam_u2f
還支持使用一個中心身份驗證文件。在這種情況下,請確保每個用戶使用一行,並將給定用戶的所有密鑰保持在同一行上。如果兩行引用相同的用戶名,那麼只有最後一行將被使用!請參閱 pam_u2f 手冊頁 獲取所有可用選項的詳細信息。
使用 authselect 配置 PAM
authselect 是一個用於控制系統 PAM 配置的工具。它引入了配置文件作為額外的抽象層。一個 authselect
配置文件可以更改多個 PAM 配置文件。配置文件具有控制附加功能和行為的參數,例如啟用 FIDO U2F 安全密鑰。有關 authselect
的詳細介紹計劃在未來的文章中進行。
顯示當前活動的 authselect
配置文件。如果選擇了 SSSD(系統安全服務守護程序)配置文件並啟用了 U2F 支持,則輸出可能類似於以下內容:
[…]$ authselect current
Profile ID: sssd
Enabled features:
- with-pam-u2f
使用 authselect
和 with-pam-u2f
標誌,在 PAM 中激活 FIDO U2F 支持:
[…]$ sudo authselect select sssd with-pam-u2f
如果你還想使用指紋讀取器,必須同時啟用這兩個功能:
[…]$ sudo authselect select sssd with-pam-u2f with-fingerprint
這會在 PAM 中激活具有 pam_u2f
和指紋讀取器支持的 SSSD 配置文件。例如,當使用上述 authselect
配置文件在終端上使用 sudo 時,首先會要求你提供指紋,如果指紋識別失敗,則使用 U2F 密鑰。然而,GDM 將首先使用 U2F 密鑰。
解鎖 GNOME 鑰匙環守護程序
當使用生物識別、U2F 密鑰或任何其他不需要密碼短語登錄 GNOME 的方法時,無法自動解鎖「登錄」鑰匙環。這是因為,默認情況下,鑰匙環的密碼短語設置為與你的登錄密碼短語相同。通常,PAM 將你的登錄密碼短語傳遞給鑰匙環守護程序。由於你在通過生物識別或 U2F 密鑰進行身份驗證時不需要輸入密碼短語,因此 PAM 沒有密碼短語可以傳遞給鑰匙環守護程序。這個問題沒有簡單直接的解決方法。
如果你為家目錄使用 LUKS 加密並且操作的是單用戶系統,你可以從鑰匙環中移除密碼短語。這將使你的 GNOME 鑰匙環在文件級別上保持未加密。但它仍然在塊級別上由 LUKS 加密,因為 LUKS 加密與單用戶系統上的默認基於文件的鑰匙環加密等效。由於鑰匙環的加密僅旨在保護其內容免受離線訪問,鑰匙環在登錄後將被解密/解鎖,任何運行時應用程序或惡意軟體在解鎖後都有可能訪問鑰匙環的內容。由於 LUKS 也是一種離線保護機制,因此可以認為它是鑰匙環正常基於文件的加密的替代選擇。
如果你的系統被多個用戶使用,則 LUKS 加密和鑰匙環的正常基於文件的加密不是等效的。在具有隻由 LUKS 保護的鑰匙環的多用戶系統中,具有解密磁碟和引導系統授權的任何用戶都能夠訪問同一系統上的任何其他用戶的鑰匙環。
移除 GNOME 「登錄」鑰匙環密碼短語非常簡單。只需設置一個新的空密碼,鑰匙環將被解鎖,並且其內容將以未加密的方式存儲在文件級別上。可以使用圖形實用程序 Seahorse(也稱為「密碼和密鑰」)來在 GNOME 「登錄」鑰匙環上設置一個空密碼。
警惕和其他用例
即將發布的文章將探討如何使用 U2F Dracut 插件使用 FIDO2/U2F 密鑰解鎖 LUKS 加密的磁碟。
OpenSSH 8.2+ 支持使用 ed25519-sk
安全密鑰。這個主題已經在之前的文章《如何在 Fedora Linux 上使用 YubiKey》中涉及到。
需要注意的是,FIDO2/U2F 是一種認證標準。還有其他用於安全令牌的用例(主要由 Yubico 建立),例如 (T)OTP、PIV(用於 x509 密鑰管理)或 OpenPGP,這些用例不是一般性的,而是具體硬體上的用例。
(題圖:MJ/4bd195dc-130b-4ef2-af6c-9a6ef5d54223)
via: https://fedoramagazine.org/use-fido-u2f-security-keys-with-fedora-linux/
作者:Alexander Wellbrock 選題:lujun9972 譯者:ChatGPT 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive