跳至內容

KDE Wallet

出自 Arch Linux 中文维基

KDE Wallet Manager 是一個用於管理 KDE Plasma 系統上密碼的工具。使用 KWallet 子系統,用戶既可以保存自己的機密信息,也可以訪問所有與 KWallet 集成的應用所保存的密碼。

錢包(wallet,在 KDE 的術語中有時也稱 vault 或 keyring)是一個由用戶自定義密碼保護的加密卷,用戶和/或軟體可以在其中保存機密信息(通常是用戶在應用中勾選 「記住帳戶」 後的憑據)。這些加密卷既可以由用戶手動創建和使用,也可以由某些集成了錢包子系統的軟體(例如郵件應用或遊戲)在後台自動創建和使用。加密卷通常會在用戶登錄時通過 PAM 模塊自動解密(見下文)。

提示:

  • 如果你只是想讓使用錢包的應用能有一個可用的錢包,建議使用默認名稱(即 kdewallet),並讓錢包密碼與用戶密碼相同(方便 PAM 使用)。
  • 錢包默認以 .kwl 擴展名的加密文件形式存放在 ~/.local/share/kwalletd 目錄中。
注意:自 KDE Frameworks 5.97.0 起,KDE Wallet 支持 org.freedesktop.secrets DBus API,libsecret 現在可以通過 Secret Service API 使用它來存儲和獲取密碼及其他機密信息。

安裝

KDE Wallet 通常隨 KDE Plasma 桌面環境一起提供。錢包子系統也可以通過 kwallet包 軟體包手動安裝。

可選安裝 kwalletmanager包 軟體包以獲得錢包管理工具。該工具可用於以圖形化方式創建和管理 KDE 錢包。

配置

在 Plasma 6(KF6)上配置 PAM

本文或本章節的事實準確性存在爭議。

原因: 配置 PAM 似乎並非使 KWallet 正常工作所必需。此外也未提及 Plasma Login Manager(SDDM 已不再是首選的顯示管理器)。(在 英文討論頁 中討論)


Plasma 6 使用 ksecretd 作為 kwallet 的 secret service API。因此 PAM 必須顯式指向該守護進程。

在相關的 PAM 文件中添加以下內容(例如視具體配置選擇 system-login、sddm 或 login):

auth            optional        pam_kwallet5.so
session         optional        pam_kwallet5.so auto_start kwalletd=/usr/bin/ksecretd

如果不指定 kwalletd= 參數,pam_kwallet5.so 會回退到默認值,嘗試使用 kwallet5。

根據你的情況編輯 PAM 配置:

  • 對於 SDDM:無需進一步修改,因為 /etc/pam.d/sddm 中已經包含這些行。
  • 對於 LightDM:無需進一步修改,因為 /etc/pam.d/lightdm 和 /etc/pam.d/lightdm-autologin 中已經包含這些行。
  • 對於 GDM:相應地編輯 /etc/pam.d/gdm-password。
  • 對於 greetd:相應地編輯 /etc/pam.d/greetd。
  • 若要在 tty 登錄時解鎖(沒有顯示管理器,或使用 greetd-tuigreet包 之類),請相應地編輯 /etc/pam.d/login。此時需要指定 force_run 參數。
/etc/pam.d/login
auth            optional        pam_kwallet5.so
session         optional        pam_kwallet5.so auto_start force_run kwalletd=/usr/bin/ksecretd
/etc/pam.d/greetd
#%PAM-1.0

auth       required     pam_securetty.so
auth       requisite    pam_nologin.so
auth       include      system-local-login
auth       optional     pam_kwallet5.so
account    include      system-local-login
session    include      system-local-login
session    optional     pam_kwallet5.so auto_start force_run kwalletd=/usr/bin/ksecretd

Plasma 5(KF5)——舊版

較舊的 Plasma 版本使用 kwalletd5,不需要指定守護進程。

/etc/pam.d/login
auth     optional  pam_kwallet5.so
session  optional  pam_kwallet5.so auto_start

登錄時自動解鎖 KDE Wallet

要隨登錄自動解鎖 KDE Wallet,請安裝 kwallet-pam包 以獲得兼容 PAM 的模塊。所選 KWallet 密碼必須與當前用戶密碼相同。

注意:
  • kwallet-pam包 不兼容 GnuPG 密鑰,KDE Wallet 必須使用標準的 blowfish 加密方式。
  • 使用自動登錄時,只有自動登錄方式保存了密碼,錢包才能被解鎖。例如 pam_autologin 就會保存。
  • 使用指紋閱讀器登錄時無法解鎖錢包。
  • 錢包必須命名為 kdewallet(默認名稱)。它不會解鎖任何其他錢包。
  • 如果使用 KDE,建議在 KDE Wallet 設置中關閉 Close when last application stops using it,以防錢包在每次使用後(如解鎖 Wi-Fi 密碼等)被關閉。
  • 可能需要先刪除默認創建的錢包,這樣會一併刪除所有已保存的條目。
  • 如果 kwallet Migration Assistant 在每次登錄後都要求輸入密碼,請重命名或刪除 ~/.kde4/share/apps/kwallet 文件夾。
提示:另一種做法是使用 KWalletManager 並把 KWallet 密碼設為空,這樣解鎖錢包時就無需輸入密碼。只需在 Change Password.. 中兩個欄位都留空即可。不過這可能導致他人對用戶錢包的非預期(讀/寫)訪問。強烈建議在 Access Control 中啟用 Prompt when an application accesses a wallet,以防止對錢包的非預期訪問。

使用 Plasma Login Manager 自動登錄與 LUKS 加密

把 /usr/lib/pam.d/plasmalogin-autologin 複製為 /etc/pam.d/plasmalogin-autologin,然後在 pam_kwallet5.so 之前添加 pam_systemd_loadkey(8):

/etc/pam.d/plasmalogin-autologin
-auth       optional    pam_systemd_loadkey.so
-auth       optional    pam_gnome_keyring.so
-auth       optional    pam_kwallet5.so

然後向 plasmalogin.service 添加以下內容:

/etc/systemd/system/plasmalogin.service.d/keyringmode.conf
[Service]
KeyringMode=inherit

使用 SDDM 自動登錄與 LUKS 加密

本文或本章節可能需要合併到#使用 Plasma Login Manager 自動登錄與 LUKS 加密。

附註: 前提條件和配置相同,具體取決於桌面環境使用哪個登錄管理器。(在 Talk:KDE Wallet 中討論)

當系統使用 dm-crypt 加密時,可以使用解密磁碟的口令來自動解鎖 KDE Wallet。配置 SDDM#自動登錄 後,錢包依然可以自動解鎖。編輯 /etc/pam.d/sddm-autologin,加入 pam_systemd_loadkey(8):

/etc/pam.d/sddm-autologin
-auth       optional    pam_systemd_loadkey.so
-auth       optional    pam_gnome_keyring.so
-auth       optional    pam_kwallet5.so
-session    optional    pam_gnome_keyring.so auto_start
-session    optional    pam_kwallet5.so auto_start kwalletd=/usr/bin/ksecretd

然後編輯 sddm.service,添加:

/etc/systemd/system/sddm.service.d/keyringmode.conf
[Service]
KeyringMode=inherit

提示與技巧

使用 KDE Wallet 存儲 SSH 密鑰口令

安裝 ksshaskpass包 軟體包。

將 SSH_ASKPASS 環境變量設為 ksshaskpass,並將 SSH_ASKPASS_REQUIRE 設為 prefer(優先使用 askpass 程序而不是 TTY)。要在每次登錄時自動設置,請創建以下 environment.d(5) 文件:

~/.config/environment.d/ssh_askpass.conf
SSH_ASKPASS=/usr/bin/ksshaskpass
SSH_ASKPASS_REQUIRE=prefer

重啟會話(即重新登錄)以使環境變量生效。

首次嘗試使用某個 SSH 密鑰時,會提示輸入其口令。請務必勾選 Remember password 複選框。下次口令將從 KDE Wallet 讀取。

使用 KDE Wallet 存儲 Git 憑據

Git 可以把憑據處理委託給憑據助手。通過把 ksshaskpass包 用作憑據助手,HTTP/HTTPS 和 SMTP 密碼可以安全地保存在 KDE Wallet 中。

安裝 ksshaskpass包 軟體包。

通過設置 GIT_ASKPASS 環境變量來配置 Git:

~/.config/environment.d/git_askpass.conf
GIT_ASKPASS=/usr/bin/ksshaskpass
提示:如果 SSH_ASKPASS 環境變量已設為 ksshaskpass,則無需再額外設置 GIT_ASKPASS。

其他替代方案和更多細節見 gitcredentials(7)。

存儲 GPG 密鑰口令

可以使用原生 KDE 窗口提示輸入 GPG 密鑰口令,並將其保存到 KDE Wallet 中。

配置 gpg-agent 使用 /usr/bin/pinentry-qt。

啟用 Secret Service 接口。有兩種方式:

  • 打開 系統設置 > KDE Wallet,啟用 Use KWallet for the Secret Service interface。
  • 編輯 KDE Wallet 配置文件:
~/.config/kwalletrc
[org.freedesktop.secrets]
apiEnabled=true

關閉錢包再重新打開,這些更改才會生效。你可以使用 kwalletmanager包 完成,也可以直接向 Qt D-Bus 發送命令:

$ qdbus org.kde.kwalletd6 /modules/kwalletd6 closeAllWallets
$ qdbus org.kde.kwalletd6 /modules/kwalletd6 open kdewallet 0 $0

在 Chromium 和 VSCode 中使用 KDE Wallet

基於 Chromium 的瀏覽器內置了錢包集成。基於 VSCode 的 IDE 依賴同樣的 Chromium oscrypt 模塊來檢測密鑰環。 [1]

要啟用該功能,請以 --password-store=kwallet5、--password-store=kwallet6 或 --password-store=detect 參數運行程序。 [2]

要永久保留該改動,見 Chromium#使 flag 持久化(設置 CHROMIUM_USER_FLAGS 不會生效)。

從終端查詢密碼

與其把密碼保存在純文本文件中,你可以在錢包中手動添加新條目,然後用 kwallet-query 取回。

例如,你想用 Podman 登錄 Docker Hub 倉庫,而它支持通過 --password-stdin 標誌從標準輸入讀取密碼,那麼可以用下面的命令登錄:

$ kwallet-query -r folder_entry wallet_name -f folder_name | podman login docker.io -u dockerhub_username --password-stdin

這樣,你的密碼既不會保存在任何文本文件中,也不會進入終端歷史記錄文件。

如果要在圖形會話之外運行 kwallet-query(例如作為無人值守備份腳本的一部分),請設置 QT_QPA_PLATFORM=offscreen 環境變量:

$ QT_QPA_PLATFORM=offscreen kwallet-query -r folder_entry wallet_name -f folder_name

在窗口管理器中自動解鎖 KWallet

要解鎖由登錄密碼保護的 KWallet,除了配置 PAM 之外,還必須在窗口管理器配置文件的自啟動部分啟動 /usr/lib/pam_kwallet_init。

禁用 KWallet

如果你希望永久禁用 kwallet:

~/.config/kwalletrc
[Wallet]
Enabled=false
注意:可以把 KWallet 用作其他錢包管理器的代理,這樣 plasma-nm包 之類的應用就不會出問題。參見此討論。

自動 D-Bus 激活

大多數應用使用 org.freedesktop.secrets.service 這個 D-Bus 服務。KWallet 並未開箱即用地提供對應的服務文件。

你可以創建這樣的服務文件來實現自動激活:

~/.local/share/dbus-1/services/org.freedesktop.secrets.service
[D-BUS Service]
Name=org.freedesktop.secrets
Exec=/usr/bin/kwalletd6

另見