為集中管理的用戶(hù)提供 FIDO2 認(rèn)證
FIDO2
FIDO2 是以 公鑰加密 為基礎(chǔ)的開(kāi)放式認(rèn)證標(biāo)準(zhǔn),比起密碼和一次性密碼(OTP),它的安全性更高且易用性更強(qiáng)。它通常以類(lèi)似小型 USB 和基于 NFC 的硬件安全令牌的方式提供。有幾種符合 FIDO 認(rèn)可的密鑰品牌,例如:YubiKey、NitroKey、SoloKey v2 等等。
此協(xié)議的優(yōu)勢(shì)包括:
- 通過(guò)使用公鑰加密來(lái)消除密碼,從而實(shí)現(xiàn)無(wú)密碼認(rèn)證。
- 采用 多因素認(rèn)證(MFA)以實(shí)現(xiàn)強(qiáng)力認(rèn)證。
- 減少了應(yīng)用程序之間密碼或公鑰的重復(fù)使用,降低數(shù)據(jù)泄露的風(fēng)險(xiǎn)。
- 私鑰位于安全令牌中并且永不離開(kāi),這大大減少了被網(wǎng)絡(luò)釣魚(yú)的威脅。
前面的文章
在 Fedora 雜志中,有多篇文章闡述了如 FIDO2 的應(yīng)用場(chǎng)景:《如何使用 FIDO2 驗(yàn)證本地用戶(hù)》 和 《如何解鎖硬盤(pán)》。而此篇文章介紹了如何使用 FIDO2 驗(yàn)證遠(yuǎn)程用戶(hù)。請(qǐng)注意,上述所說(shuō)的設(shè)備,主要是指那些來(lái)自 Yubico 采用了其他協(xié)議的設(shè)備,而此篇指南的目的并非討論這些協(xié)議。
集中管理的用戶(hù)
SSSD 和 FreeIPA 最近新增了一個(gè)名為 通行密鑰passkey 的特性,以便對(duì)集中管理的用戶(hù)執(zhí)行 FIDO2 認(rèn)證。此功能目前只在 SSSD 2.9.0 和 FreeIPA 4.11.0 等版本中支持。
Fedora 39 已經(jīng)包含了這些版本,因此,它是第一個(gè)為集中管理的用戶(hù)啟用 FIDO2 認(rèn)證的發(fā)行版。此外,用戶(hù)在認(rèn)證成功后,也會(huì)一并獲取一個(gè) Kerberos 票據(jù),實(shí)現(xiàn)對(duì)其他服務(wù)的身份證明。
請(qǐng)注意,從這里開(kāi)始,我將交替使用 FIDO2 和通行密鑰這兩個(gè)術(shù)語(yǔ)。
FIDO2 認(rèn)證
FIDO2 配置
作為額外的安全措施,應(yīng)在設(shè)備中啟用 MFA 以防你丟失了密鑰,惡意行為者無(wú)法使用它進(jìn)行認(rèn)證。
列出連接的通行密鑰設(shè)備:
$ fido2-token -L
為你的通行密鑰設(shè)備設(shè)置 PIN(將大寫(xiě)字母替換為所需的):
$ fido2-token -C /dev/hidrawX
如果你有一個(gè)兼容的設(shè)備,你還可以啟用其他認(rèn)證因素,例如指紋。
集中用戶(hù)配置
首先,我們來(lái)創(chuàng)建一個(gè)用戶(hù),并將通行密鑰(passkey
)設(shè)置為其認(rèn)證方式(請(qǐng)根據(jù)需要將大寫(xiě)字母替換為相應(yīng)的):
$ ipa user-add USERNAME --first NAME --last SURNAME --user-auth-type=passkey
或者,如果你已有一個(gè)用戶(hù),并只需要將 passkey
設(shè)置為其認(rèn)證方式:
$ ipa user-mod USERNAME --user-auth-type=passkey
集中管理用戶(hù)的 FIDO2 注冊(cè)
接下來(lái),我們?yōu)樵撚脩?hù)注冊(cè)這個(gè)通行密鑰。這個(gè)步驟會(huì)提示你輸入 PIN 碼,隨后觸摸設(shè)備:
$ ipa user-add-passkey USERNAME --register
Enter PIN:
Please touch the device.
------------------------------------
Added passkey mappings to user "USERNAME"
------------------------------------
User login: USERNAME
Passkey mapping: passkey:XR/MXigmgiBz1z7/RlWoWZkXKIEf1x9Ux5uPNxtzzSTdTiF407u2nRYMPkK8pWjwUR8Aa2urCcC9cnpLbkKgFg==,MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZqgERsFFv4Yev1dyo2Ap4PvLirg3P3Uhig5mNA4qf061C9q5rg0nMDz9AOYxZmBrwvQEXHCasMNO9VAIVnBIVg==
此刻,用戶(hù)的認(rèn)證已準(zhǔn)備就緒。
注意,如果你想在生產(chǎn)環(huán)境中使用此用戶(hù),我建議你至少注冊(cè)兩個(gè)不同的設(shè)備。這樣,即使你丟失了其中一個(gè)設(shè)備,你也可以用另一個(gè)進(jìn)行認(rèn)證。
集中管理的用戶(hù)的 FIDO2 認(rèn)證
在初次嘗試中,只有在物理連接令牌的系統(tǒng)中才能進(jìn)行認(rèn)證。這意味著你可以使用 su
或圖形界面,但不能遠(yuǎn)程使用 ssh。
我們來(lái)試試使用 su
,記得將大寫(xiě)字母替換為所需的。當(dāng)要求你輸入 PIN,然后觸摸設(shè)備時(shí),當(dāng)設(shè)備燈閃爍時(shí)觸摸它:
$ su - USERNAME@DOMAIN
Insert your passkey device, then press ENTER.
Enter PIN:
如果一切進(jìn)行順利,Kerberos 票據(jù)也應(yīng)已被授予,然后你就可以向其他服務(wù)進(jìn)行遠(yuǎn)程認(rèn)證:
$ klist
Ticket cache: KCM:879400005:34862
Default principal: USERNAME@DOMAIN
Valid starting Expires Service principal
10/20/23 09:46:04 10/21/23 09:32:37 krbtgt/DOMAIN@DOMAIN
結(jié)論
此認(rèn)證機(jī)制的目標(biāo)是提升安全性。通過(guò)使用一種眾所周知、開(kāi)放式的標(biāo)準(zhǔn)實(shí)現(xiàn)無(wú)密碼和多因素認(rèn)證,從而降低數(shù)據(jù)泄露和網(wǎng)絡(luò)釣魚(yú)威脅的風(fēng)險(xiǎn)。用戶(hù)只需要一個(gè)硬件令牌及另外一個(gè)如 PIN 或者指紋的認(rèn)證方式,從而消除對(duì)密碼的需求,同時(shí)提供了方便的多因素認(rèn)證方法。更進(jìn)一步,每個(gè)應(yīng)用或服務(wù)都使用一個(gè)唯一的密鑰,這樣任何一個(gè)應(yīng)用或服務(wù)的數(shù)據(jù)泄露都不會(huì)影響其他的。最后,用戶(hù)并不需要知道他們的憑據(jù)的具體細(xì)節(jié),只需了解他們使用了一個(gè)實(shí)體令牌,這極大地降低了社交工程攻擊的可能性。