首頁 項(xiàng)目 > 正文

在 Fedora Linux 上使用 FIDO U2F 安全密鑰

FIDO U2F 安全密鑰是一種小型的基于 USB/NFC 的設(shè)備。它是一種硬件安全令牌,具有多個(gè)安全相關(guān)的用途模塊。FIDO U2F 標(biāo)準(zhǔn)兼容的密鑰品牌有多種,包括 NitroKey、SoloKey v2 和 YubiKey。與類似 Yubico OTP 的專有協(xié)議相比,F(xiàn)IDO 協(xié)議是不依賴特定硬件令牌的,并且使用的工具也不依賴特定制造商。

本文介紹了 FIDO 協(xié)議,并展示了如何安裝和啟用 FIDO U2F 安全密鑰作為替代身份驗(yàn)證因素,以用于登錄終端、GDM 或進(jìn)行 sudo 認(rèn)證。


(資料圖片)

對于 YubiKey,特別是其不支持 FIDO2/U2F 的舊版設(shè)備,請參閱之前的文章:

如何在 Fedora Linux 上使用 YubiKey

本文不涵蓋存儲 OpenPGP 密鑰或 X.509 證書的操作,因?yàn)檫@些功能與硬件相關(guān),不屬于 FIDO U2F 標(biāo)準(zhǔn)的一部分。

保留備用安全密鑰

一旦你開始使用安全令牌,就必須考慮到自己可能會被鎖定在與這些令牌相關(guān)聯(lián)的賬戶之外的情況。由于硬件安全令牌是獨(dú)特的,并且被設(shè)計(jì)為非常難以復(fù)制,你不能像在使用 KeePass 或 AndOTP 等軟件保險(xiǎn)庫時(shí)那樣制作備份。因此,你使用主要密鑰進(jìn)行的所有注冊都應(yīng)立即使用第二個(gè)備份密鑰重復(fù)進(jìn)行,并將其存儲在安全的位置,甚至可能是保險(xiǎn)箱中。

在實(shí)踐中,這意味著你需要將兩個(gè)硬件令牌注冊到你的 Linux 和 Web 賬戶中,并生成兩份 OpenSSH 私鑰,并將這兩份 OpenSSH 公鑰上傳到你使用的服務(wù)器和服務(wù)(例如 GitHub)中。

如果你丟失了一個(gè)密鑰,你將需要使用第二個(gè)密鑰登錄與密鑰注冊的每個(gè)服務(wù),刪除丟失的密鑰,并注冊一個(gè)新密鑰。對于使用 FIDO2 協(xié)議的無密碼登錄尤其如此。

FIDO2、U2F 和 FIDO 聯(lián)盟

FIDO2 是由FIDO 聯(lián)盟維護(hù)的一系列標(biāo)準(zhǔn)。FIDO 聯(lián)盟希望最終完全摒棄密碼,并提供通過多個(gè)因素安全驗(yàn)證用戶身份的過程,而無需使用密碼。

該標(biāo)準(zhǔn)包括萬維網(wǎng)聯(lián)盟(W3C)的網(wǎng)頁認(rèn)證Web Authentication(WebAuthn)和 FIDO 聯(lián)盟的客戶端到認(rèn)證器協(xié)議Client-to-Authenticator Protocol(CTAP)。WebAuthn 是一種用于請求和處理公鑰挑戰(zhàn)進(jìn)行認(rèn)證的標(biāo)準(zhǔn) API。通過這個(gè)標(biāo)準(zhǔn),瀏覽器會向客戶端發(fā)送一個(gè)挑戰(zhàn)challenge,然后客戶端使用私鑰生成一個(gè)響應(yīng)response,挑戰(zhàn)者再使用之前交換的公鑰進(jìn)行驗(yàn)證。如何生成挑戰(zhàn)答案對于服務(wù)來說是不可知的,而是由 CTAP 控制。用戶可能會被要求使用多種驗(yàn)證方法,如生物識別、PIN 或存在性檢查(或這些方法的組合)。這些驗(yàn)證方式在認(rèn)證時(shí)與注冊密鑰時(shí)的方式相同。

為了保護(hù)與硬件令牌的任何交互,可以選擇設(shè)置一個(gè)訪問 PIN,并且默認(rèn)情況下未設(shè)置。大多數(shù)密鑰在連續(xù)八次輸入訪問 PIN 失敗后將自動失效?;謴?fù)失效的密鑰并設(shè)置新 PIN 的唯一方法是重置密鑰。然而,當(dāng)密鑰重置時(shí),所有其服務(wù)注冊將丟失!

FIDO2 密鑰還支持 FIDO U2F 協(xié)議(現(xiàn)已更名為 CTAP1)。該協(xié)議旨在提供第二或多因素(但非無密碼)認(rèn)證。Linux 的 PAM 認(rèn)證系統(tǒng)也可以配置為使用 U2F 協(xié)議。雖然 FIDO U2F 不是為無密碼認(rèn)證設(shè)計(jì)的,但 U2F PAM 模塊允許無密碼認(rèn)證。

安全影響

FIDO2 / U2F 通過將安全密鑰與用戶賬戶綁定來工作。大多數(shù)密鑰默認(rèn)啟用/使用基本的存在性檢查。它們通常通過點(diǎn)亮并提示你觸摸密鑰來進(jìn)行存在性檢查。FIDO2 PIN 是可選的,默認(rèn)情況下未設(shè)置。當(dāng)密鑰用于登錄 Linux 帳戶或用于使用 sudo 時(shí),只需確保設(shè)備和密鑰物理上存在即可。FIDO2 PIN 是一個(gè)重要的附加驗(yàn)證步驟,用于確保只有你才能使用密鑰進(jìn)行身份驗(yàn)證。

等一下!現(xiàn)在我還要記住額外的 PIN 嗎?這不就是一個(gè)更短的密碼嗎?

—— 擔(dān)心的讀者

FIDO2 PIN 不是密碼,它是一個(gè)簡短、容易記住的短語。這并不是一個(gè)問題,因?yàn)椋?/p>你需要物理訪問密鑰且輸入 PIN 錯(cuò)誤達(dá)到八次會使密鑰失效,這使得暴力破解變得困難。

相反地,現(xiàn)在你可以使用存儲在密碼管理器中的安全密碼,而無需記住它。

谷歌在 2016 年進(jìn)行的一項(xiàng)案例研究,題為 《安全密鑰:現(xiàn)代網(wǎng)絡(luò)的實(shí)用密碼學(xué)第二因素》,顯示了安全密鑰有效地保護(hù)用戶免受密碼重用、釣魚和中間人攻擊的影響。

使用 PAM 進(jìn)行用戶認(rèn)證

本地系統(tǒng)認(rèn)證使用可插拔認(rèn)證模塊(PAM)。U2F 設(shè)備的 PAM 模塊(因此進(jìn)行認(rèn)證)是pam_u2f。你的密鑰是否支持 FIDO2 或 FIDO U2F 取決于其固件版本和硬件型號。

設(shè)置如下:

安裝 PAM 模塊。將密鑰注冊到你的用戶賬戶上。使用authselect在 PAM 中激活智能卡支持。

authselect是一個(gè)用于配置帶有可重現(xiàn)配置文件的 PAM 的工具。使用authselect的配置文件可以避免手動修改/etc/pam.d目錄下的配置文件。

依賴項(xiàng)

所需的軟件包可在官方倉庫中獲取。

[…]$ sudo dnf install pam-u2f pamu2fcfg fido2-tools
在密鑰上設(shè)置 FIDO2 PIN

FIDO2 標(biāo)準(zhǔn)定義了一種用于訪問保護(hù)的可選 PIN。如果 PIN 丟失或失效,沒有 PUK 或其他恢復(fù)方式,請確保你有一種備用的身份驗(yàn)證方法。如果通過連續(xù)輸入無效的 PIN 使 PIN 失效,恢復(fù)的唯一方法是重置密鑰。然而,重置密鑰會刪除其所有憑據(jù),并將其與以前注冊的所有服務(wù)斷開連接。

fido2-tools包含一個(gè)用于設(shè)置密鑰的 FIDO2 PIN 的工具:fido2-token。使用fido2-token -L獲取當(dāng)前連接的 FIDO2 設(shè)備列表,并使用fido2-token -C 設(shè)置一個(gè)新的 PIN:

[…]$ fido2-token -L/dev/hidraw1: vendor=0x1050, product=0x0407 (Yubico YubiKey OTP+FIDO+CCID)[…]$ fido2-token -C /dev/hidraw1Enter current PIN for /dev/hidraw1:Enter new PIN for /dev/hidraw1:
將安全密鑰注冊到本地賬戶

使用工具pamu2fcfg檢索一個(gè)配置行,該行將放入~/.config/Yubico/u2f_keys中。pam_u2f是由 Yubico 提供的通用 U2F 密鑰模塊,因此使用 Yubico 特定的默認(rèn)配置路徑。該文件中的每個(gè)配置行由用戶名和密鑰特定的憑據(jù)/配置部分以冒號分隔。確保每個(gè)用戶僅使用一行。

fedora-user:owBYtPIH2yzjlSQaRrVcxB...Pg==,es256,+presence+pin[:該用戶另外的密鑰]

如果密鑰受 PIN 保護(hù),你將被要求輸入 PIN 來進(jìn)行此操作。對于第一個(gè)密鑰的初始注冊,請使用以下命令:

[…]$ mkdir -p ~/.config/Yubico[…]$ pamu2fcfg --pin-verification > ~/.config/Yubico/u2f_keys

要將另一個(gè)密鑰(例如備份密鑰)添加到此單用戶配置中,請使用以下命令:

[…]$ pamu2fcfg --nouser --pin-verification >> ~/.config/Yubico/u2f_keys

pam_u2f還支持使用一個(gè)中心身份驗(yàn)證文件。在這種情況下,請確保每個(gè)用戶使用一行,并將給定用戶的所有密鑰保持在同一行上。如果兩行引用相同的用戶名,那么只有最后一行將被使用!請參閱pam_u2f 手冊頁獲取所有可用選項(xiàng)的詳細(xì)信息。

使用 authselect 配置 PAM

authselect是一個(gè)用于控制系統(tǒng) PAM 配置的工具。它引入了配置文件作為額外的抽象層。一個(gè)authselect配置文件可以更改多個(gè) PAM 配置文件。配置文件具有控制附加功能和行為的參數(shù),例如啟用 FIDO U2F 安全密鑰。有關(guān)authselect的詳細(xì)介紹計(jì)劃在未來的文章中進(jìn)行。

顯示當(dāng)前活動的authselect配置文件。如果選擇了 SSSD(系統(tǒng)安全服務(wù)守護(hù)程序)配置文件并啟用了 U2F 支持,則輸出可能類似于以下內(nèi)容:

[…]$ authselect currentProfile ID: sssdEnabled features:- with-pam-u2f

使用authselectwith-pam-u2f標(biāo)志,在 PAM 中激活 FIDO U2F 支持:

[…]$ sudo authselect select sssd with-pam-u2f

如果你還想使用指紋讀取器,必須同時(shí)啟用這兩個(gè)功能:

[…]$ sudo authselect select sssd with-pam-u2f with-fingerprint

這會在 PAM 中激活具有pam_u2f和指紋讀取器支持的 SSSD 配置文件。例如,當(dāng)使用上述authselect配置文件在終端上使用 sudo 時(shí),首先會要求你提供指紋,如果指紋識別失敗,則使用 U2F 密鑰。然而,GDM 將首先使用 U2F 密鑰。

解鎖 GNOME 鑰匙環(huán)守護(hù)程序

當(dāng)使用生物識別、U2F 密鑰或任何其他不需要密碼短語登錄 GNOME 的方法時(shí),無法自動解鎖“登錄”鑰匙環(huán)。這是因?yàn)?,默認(rèn)情況下,鑰匙環(huán)的密碼短語設(shè)置為與你的登錄密碼短語相同。通常,PAM 將你的登錄密碼短語傳遞給鑰匙環(huán)守護(hù)程序。由于你在通過生物識別或 U2F 密鑰進(jìn)行身份驗(yàn)證時(shí)不需要輸入密碼短語,因此 PAM 沒有密碼短語可以傳遞給鑰匙環(huán)守護(hù)程序。這個(gè)問題沒有簡單直接的解決方法。

如果你為家目錄使用 LUKS 加密并且操作的是單用戶系統(tǒng),你可以從鑰匙環(huán)中移除密碼短語。這將使你的 GNOME 鑰匙環(huán)在文件級別上保持未加密。但它仍然在塊級別上由 LUKS 加密,因?yàn)?LUKS 加密與單用戶系統(tǒng)上的默認(rèn)基于文件的鑰匙環(huán)加密等效。由于鑰匙環(huán)的加密僅旨在保護(hù)其內(nèi)容免受離線訪問,鑰匙環(huán)在登錄后將被解密/解鎖,任何運(yùn)行時(shí)應(yīng)用程序或惡意軟件在解鎖后都有可能訪問鑰匙環(huán)的內(nèi)容。由于 LUKS 也是一種離線保護(hù)機(jī)制,因此可以認(rèn)為它是鑰匙環(huán)正?;谖募募用艿奶娲x擇。

如果你的系統(tǒng)被多個(gè)用戶使用,則 LUKS 加密和鑰匙環(huán)的正常基于文件的加密不是等效的。在具有只由 LUKS 保護(hù)的鑰匙環(huán)的多用戶系統(tǒng)中,具有解密磁盤和引導(dǎo)系統(tǒng)授權(quán)的任何用戶都能夠訪問同一系統(tǒng)上的任何其他用戶的鑰匙環(huán)。

移除 GNOME “登錄”鑰匙環(huán)密碼短語非常簡單。只需設(shè)置一個(gè)新的空密碼,鑰匙環(huán)將被解鎖,并且其內(nèi)容將以未加密的方式存儲在文件級別上??梢允褂脠D形實(shí)用程序 Seahorse(也稱為“密碼和密鑰”)來在 GNOME “登錄”鑰匙環(huán)上設(shè)置一個(gè)空密碼。

警惕和其他用例

即將發(fā)布的文章將探討如何使用 U2F Dracut 插件使用 FIDO2/U2F 密鑰解鎖 LUKS 加密的磁盤。

OpenSSH 8.2+ 支持使用ed25519-sk安全密鑰。這個(gè)主題已經(jīng)在之前的文章《如何在 Fedora Linux 上使用 YubiKey》中涉及到。

需要注意的是,F(xiàn)IDO2/U2F 是一種認(rèn)證標(biāo)準(zhǔn)。還有其他用于安全令牌的用例(主要由 Yubico 建立),例如 (T)OTP、PIV(用于 x509 密鑰管理)或 OpenPGP,這些用例不是一般性的,而是具體硬件上的用例。

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - www.mallikadua.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號-3