解讀 Ubuntu 裡的金鑰環概念

2020-04-09 23:04:00

如果你用過 Ubuntu 或者其他的 Linux 發行版裡的自動登入功能, 你可能遇到過這種彈出訊息:

請輸入密碼以解鎖你的登入金鑰環

登入金鑰環在你登入系統時未解鎖。

Enter Password To Unlock Your Login Keyring Ubuntu

如果你一直點選取消,它會不斷彈出幾次才會消失。你可能想知道,為什麼你會一直看到這個金鑰環資訊呢?

讓我來告訴你吧。它其實不是錯誤,而是一個安全特性。

奇怪嗎?下面就讓我來解釋下 Linux 裡的金鑰環概念。

Linux 裡的金鑰環是什麼。為什麼需要它?

在現實生活中你為什麼要用鑰匙環(也叫鑰匙鏈)?你用它把一把或多把鑰匙串到一起, 以便於攜帶和查詢。

Linux 裡也是類似的。金鑰環特性使你的系統可以將各種密碼放在一起,並將其儲存在一個地方。

大多數 Linux 桌面環境,如 GNOME、KDE、Xfce 等採用 GNOME 金鑰環來提供這個功能。

該金鑰環儲存了 ssh 金鑰、GPG 金鑰以及使用此功能的應用程式(例如 Chromium 瀏覽器)的金鑰。預設情況下,“金鑰環”通過主密碼來保護,該密碼通常是帳戶的登入密碼。

系統上的每個使用者都有自己的金鑰環,(通常)密碼與使用者帳戶本身的密碼相同。當你使用密碼登入系統時,你的密匙環將使用你帳戶的密碼自動解鎖。

當你啟用 Ubuntu 中的自動登入功能時時,就有問題了。這意味著你無需輸入密碼即可登入系統。在這種情況下,你的金鑰環不會自動解鎖。

金鑰環是一個安全特性

記得我說過金鑰環是一個安全特性嗎?現在想象一下你在 Linux 電腦上開啟了自動登入功能。有權存取你電腦的任何人無需密碼就能進入你的系統。但是你可能不會在意,因為你只是用它來存取網際網路。

但是,如果你在 Ubuntu 中使用 Chromium 或 Google Chrome 之類的瀏覽器,並使用它來儲存各種網站的登入密碼,那麼你將遇到麻煩。任何人都可以使用瀏覽器並利用你在瀏覽器中儲存的密碼登入網站。這不很危險嗎?

這就是為什麼當你使用 Chrome 時,它將反復地提示你先解鎖金鑰環。這確保了只有知道金鑰環密碼(即賬戶密碼)的人才能使用在瀏覽器中儲存的密碼來登入它們相關的網站。

如果你反復取消解鎖金鑰環的提示,它最終將消失,並允許你使用瀏覽器。但是,儲存的密碼將不會被解鎖,你在 Chromium/Chome 瀏覽器上將會看到“同步暫停”的提示。

Sync paused in Google Chrome

如果金鑰環一直存在,為什麼你從來沒有見過它呢?

如果你在你的 Linux 系統上從沒見過它的話,這個問題就很有道理。

如果你從沒有用過自動登入功能(或者修改你的賬戶密碼),你可能都沒有意識到這個特性的存在。

這是因為當你通過你的密碼登入系統時,你的金鑰環被你的賬戶密碼自動解鎖了。

Ubuntu(和其他發行版)在執行普通的管理任務如修改使用者、安裝新軟體等需要輸入密碼,無論你是否是自動登入的。但是對於日常任務像使用瀏覽器,它不需要輸入密碼因為金鑰環已經被解鎖了。

當你切換到自動登入時,你不再需要輸入登入密碼。這意味著金鑰環沒有被自動解鎖,因此當你使用利用了金鑰環特性的瀏覽器時,它將提示你來解鎖金鑰環。

你可以輕鬆地管理金鑰環和密碼

這個金鑰環放在哪裡?它的核心是一個守護任務(一個後台自動執行的程式)。

別擔心。你不必通過終端來操作守護任務。大多數桌面環境都自帶一個可以和這個守護行程進行互動的圖形化應用程式。KDE 上有 KDE 錢包,GNOME 和其他桌面上叫做“密碼和金鑰”(之前叫 Seahorse)。

Password And Keys App in Ubuntu

你可以用這個 GUI 程式來檢視哪些應用程式在用金鑰環來管理/保護密碼。

你可以看到,我的系統有自動建立的登入金鑰環。也有一個儲存 GPG 和 SSH 金鑰的金鑰環。那個證書用來儲存證書機構頒發的證書(如 HTTPS 證書)。

Password and Keys application in Ubuntu

你也可以使用這個應用程式來手動儲存網站的密碼。例如,我建立了一個新的叫做“Test”的被密碼保護的金鑰環,並手動儲存了一個密碼。

這比在一個文字檔案中儲存一批密碼要好一些。至少在這種情況下,你的密碼只有在你通過密碼解鎖了金鑰環時才允許被看到。

Saving New Password Seahorse

這裡有一個潛在的問題,如果你格式化你的系統,手動儲存的密碼必然會丟失。通常,你會備份你的個人檔案,但並不是所有的使用者特定資料,如金鑰環檔案。

有一種辦法能解決它。金鑰環資料通常儲存在 ~/.local/share/keyrings 目錄。在這裡你可以看到所有的金鑰環,但是你不能直接看到它們的內容。如果你移除金鑰環的密碼(我會在這篇文章的後面描述操作步驟),你可以像一個普通的文字檔案一樣讀取金鑰環的內容。你可以將這個解鎖後的金鑰環檔案完整地複製下來,並在其他的 Linux 機器上執行“密碼和金鑰”應用程式匯入到其中。

總結一下目前為止所學的內容:

  • 大多數 Linux 系統預設已經安裝並啟用了金鑰環特性
  • 系統上的每個使用者都擁有他自己的金鑰環
  • 金鑰環通常是用賬戶密碼鎖定的(保護)
  • 當你通過密碼登入時金鑰環會被自動解鎖
  • 對於自動登入,金鑰環不會自動解鎖,因此當你試圖使用依賴金鑰環的應用程式時會被提示先解鎖它
  • 並不是所有的瀏覽器或應用程式利用了金鑰環特性
  • (Linux 上)安裝一個 GUI 程式可以和金鑰環互動
  • 你可以用金鑰環來手動儲存加密格式的密碼
  • 你可以自己修改金鑰環密碼
  • 你可以通過匯出(需要先解鎖金鑰環)並匯入到其他計算機上的方式來獲取手工儲存的密碼。

修改金鑰環密碼

假設你修改了你的賬戶密碼。當你登入時,你的系統試圖通過新的登入密碼來自動解鎖金鑰環。但是金鑰環還在使用老的登入密碼。

這種情況下,你可以修改金鑰環密碼為新的登入密碼,這樣密碼環才能在你登入系統時自動解鎖。

從選單中開啟“密碼和金鑰”應用程式:

Look for Password and Keys app in the menu

在“Login”金鑰環上右擊並點選“修改密碼”:

Change Keyring Password

如果你不記得老的登入密碼怎麼辦?

你可能知道在 Ubuntu 上重置忘記的密碼很容易。但是金鑰環在這種場景下還是有問題。你修改了賬戶密碼,但是你不記得仍然被金鑰環使用的老的賬戶密碼。

你不能修改它因為你不知道老的密碼。怎麼辦?

這種情況下,你將不得不移除整個金鑰環。你可以通過“密碼和金鑰”應用程式來操作:

Delete Keyring Ubuntu

它會提示你進行確認:

Delete Keyring

另外,你也可以手動刪除 ~/.local/share/keyrings 目錄下的金鑰環檔案。

老的金鑰環檔案被移除後,你再開啟 Chrome/Chromium 時,它會提示你建立一個新的金鑰環。

New Keyring Password

你可以用新的登入密碼,金鑰環就會被自動解鎖了。

禁用金鑰環密碼

在你想用自動登入但又不想手動解鎖金鑰環時,你可以把禁用金鑰環密碼作為一個規避方法。記住你正在禁用一個安全特性,因此請三思。

操作步驟和修改金鑰環相似。開啟“密碼和金鑰”應用程式,然後修改金鑰環密碼。

技巧在於當它提示修改密碼時,不要輸入新密碼,而是點選“繼續”按鈕。這將移除金鑰環的密碼。

Disable Keyring password by not setting any password at all

這種方法,金鑰環沒有密碼保護,並將一直處於解鎖狀態。