今天,Fedora 提供了多種方式來提高我們賬戶的身份認證的安全性。當然,它有我們熟悉的使用者名稱密碼登入方式,它也同樣提供了其他的身份認證選項,比如生物識別、指紋、智慧卡、一次性密碼,甚至是詢問-響應身份認證。
每種認證方式都有明確的優缺點。這點本身就可以成為一篇相當冗長的文章的主題。Fedora 雜誌之前就已經介紹過了這其中的一些選項:
在現在的 Fedora 版本中,最安全的方法之一就是離線硬體詢問-響應。它也同樣是最容易部署的方法之一。下面是具體方法。
從技術上來講,當你輸入密碼的時候,你就正在響應使用者名稱詢問。離線的詢問、響應包含了這些部分:首先是需要你的使用者名稱,接下來,Fedora 會要你提供一個加密的物理硬體的令牌。令牌會把另一個其儲存的加密金鑰通過可插入式身份認證模組(PAM)框架來響應詢問。最後,Fedora 才會提示你輸入密碼。這可以防止其他人僅僅使用了找到的硬體令牌,或是只使用了賬戶名密碼而沒有正確的加密金鑰。
這意味著除了你的賬戶名密碼之外,你必須事先在你的作業系統中註冊了一個或多個加密硬體令牌。你必須保證你的物理硬體令牌能夠匹配你的使用者名稱。
一些詢問-響應的方法,比如一次性密碼(OTP),在硬體令牌上獲取加密的程式碼金鑰,然後將這個金鑰通過網路傳輸到遠端身份認證伺服器。然後這個伺服器會告訴 Fedora 的 PAM 框架,這是否是該使用者的一個有效令牌。如果身份認證伺服器在本地網路上,這個方法非常好。但它的缺點是如果網路連線斷開或是你在沒有網的遠端端工作。你會被鎖在系統之外,直到你能通過網路連線到身份認證伺服器。
有時候,生產環境會採用通過 Yubikey 使用一次性密碼(OTP)的設定,然而,在家庭或個人的系統上,你可能更喜歡詢問-響應設定。一切都是原生的,這種方法不需要通過遠端網路呼叫。下面這些過程適用於 Fedora 27、28 和 29.
首先,你需要一個安全的硬體令牌金鑰。具體來說,這個過程需要一個 Yubikey 4、Yubikey NEO,或者是最近發布的、同樣支援 FIDO2 的 Yubikey 5 系列裝置。你應該購買它們中的兩個,一個做備份,以避免其中一個丟失或遭到損壞。你可以在不同的工作地點使用這些金鑰。較為簡單的 FIDO 和 FIDO U2F 版本不適用於這個過程,但是非常適合使用 FIDO 的線上服務。
接下來,為你所有的重要資料製作備份,你可能想在克隆在 VM 裡的 Fedora 27/28/29 裡測試設定,來確保你在設定你自己的個人工作環境之前理解這個過程。
現在,確定你的 Fedora 是最新的,然後通過 dnf
命令安裝所需要的 Fedora Yubikey 包。
$ sudo dnf upgrade$ sudo dnf install ykclient* ykpers* pam_yubico*
如果你使用的是 VM 環境,例如 Virtual Box,確保 Yubikey 裝置已經插進了 USB 口,然後允許 VM 控制的 USB 存取 Yubikey。
確認你的賬戶存取到了 USB Yubikey:
$ ykinfo -vversion: 3.5.0
如果 Yubikey 沒有被檢測到,會出現下面這些錯誤資訊:
Yubikey core error: no yubikey present
接下來,通過下面這些 ykpersonalize
命令初始化你每個新的 Yubikey。這將設定 Yubikey 設定插槽 2 使用 HMAC-SHA1 演算法(即使少於 64 個字元)進行詢問響應。如果你已經為詢問響應設定好了你的 Yubikey。你就不需要再次執行 ykpersonalize
了。
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible
一些使用者在使用的時候將 YubiKey 留在了他們的工作站上,甚至用於對虛擬機器進行詢問-響應。然而,為了更好的安全性,你可能會更願意使用手動觸發 YubiKey 來響應詢問。
要新增手動詢問按鈕觸發器,請新增 -ochal-btn-trig
選項,這個選項可以使得 Yubikey 在請求中閃爍其 LED。等待你在 15 秒內按下硬體金鑰區域上的按鈕來生成響應金鑰。
$ ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -ochal-btn-trig -oserial-api-visible
為你的每個新的硬體金鑰執行此操作。每個金鑰執行一次。完成程式設計之後,使用下面的命令將 Yubikey 設定儲存到 ~/.yubico
:
$ ykpamcfg -2 -vdebug: util.c:222 (check_firmware_version): YubiKey Firmware version: 4.3.4Sending 63 bytes HMAC challenge to slot 2Sending 63 bytes HMAC challenge to slot 2Stored initial challenge and expected response in '/home/chuckfinley/.yubico/challenge-9992567'.
如果你要設定多個金鑰用於備份,請將所有的金鑰設定為相同,然後使用 ykpamcfg
工具儲存每個金鑰的詢問-響應。如果你在一個已經存在的註冊金鑰上執行 ykpersonalize
命令,你就必須再次儲存設定資訊。
現在要去驗證設定是否有效,在同一個終端視窗中,你需要設定 sudo
來要求使用 Yubikey 的詢問-響應。將下面這幾行插入到 /etc/pam.d/sudo
檔案中。
auth required pam_yubico.so mode=challenge-response
將上面的 auth
行插入到檔案中的 auth include system-auth
行的上面,然後儲存並退出編輯器。在預設的 Fedora 29 設定中,/etc/pam.d/sudo
應該像下面這樣:
#%PAM-1.0auth required pam_yubico.so mode=challenge-responseauth include system-authaccount include system-authpassword include system-authsession optional pam_keyinit.so revokesession required pam_limits.sosession include system-auth
保持這個初始的終端視窗開啟,然後開啟一個新的終端視窗進行測試,在新的終端視窗中輸入:
$ sudo echo testing
你應該注意到了 Yubikey 上的 LED 在閃爍。點選 Yubikey 按鈕,你應該會看見一個輸入 sudo
密碼的提示。在你輸入你的密碼之後,你應該會在終端螢幕上看見 “testing” 的字樣。
現在去測試確保失敗也正常,啟動另一個終端視窗,並從 USB 插口中拔掉 Yubikey。使用下面這條命令驗證,在沒有 Yubikey 的情況下,sudo
是否會不再正常工作。
$ sudo echo testing fail
你應該立刻被提示輸入 sudo
密碼,但即使你輸入了正確密碼,登入也應該失敗。
一旦你的測試完成後,你就可以為圖形登入新增詢問-響應支援了。將你的 Yubikey 再次插入進 USB 插口中。然後將下面這幾行新增到 /etc/pam.d/gdm-password
檔案中:
auth required pam_yubico.so mode=challenge-response
開啟一個終端視窗,然後執行下面這些命令。如果需要,你可以使用其他的編輯器:
$ sudo vi /etc/pam.d/gdm-password
你應該看到 Yubikey 上的 LED 在閃爍,按下 Yubikey 按鈕,然後在提示符處輸入密碼。
修改 /etc/pam.d/gdm-password
檔案,在已有的 auth substack password-auth
行上新增新的行。這個檔案的頂部應該像下面這樣:
auth [success=done ignore=ignore default=bad] pam_selinux_permit.soauth required pam_yubico.so mode=challenge-responseauth substack password-authauth optional pam_gnome_keyring.soauth include postloginaccount required pam_nologin.so
儲存更改並退出編輯器,如果你使用的是 vi,輸入鍵是按 Esc
鍵,然後在提示符處輸入 wq!
來儲存並退出。
現在登出 GNOME。將 Yubikey 插入到 USB 口,在圖形登入介面上點選你的使用者名稱。Yubikey LED 會開始閃爍。觸控那個按鈕,你會被提示輸入你的密碼。
如果你丟失了 Yubikey,除了重置密碼之外,你還可以使用備份的 Yubikey。你還可以給你的賬戶增加額外的 Yubikey 設定。
如果有其他人獲得了你的密碼,他們在沒有你的物理硬體 Yubikey 的情況下,仍然不能登入。恭喜!你已經顯著提高了你的工作環境登入的安全性了。