KDE Wallet
KDE Wallet Manager 是一個用於管理 KDE Plasma 系統上密碼的工具。使用 KWallet 子系統,用戶既可以保存自己的機密信息,也可以訪問所有與 KWallet 集成的應用所保存的密碼。
錢包(wallet,在 KDE 的術語中有時也稱 vault 或 keyring)是一個由用戶自定義密碼保護的加密卷,用戶和/或軟體可以在其中保存機密信息(通常是用戶在應用中勾選 「記住帳戶」 後的憑據)。這些加密卷既可以由用戶手動創建和使用,也可以由某些集成了錢包子系統的軟體(例如郵件應用或遊戲)在後台自動創建和使用。加密卷通常會在用戶登錄時通過 PAM 模塊自動解密(見下文)。
提示:
- 如果你只是想讓使用錢包的應用能有一個可用的錢包,建議使用默認名稱(即
kdewallet),並讓錢包密碼與用戶密碼相同(方便 PAM 使用)。 - 錢包默認以
.kwl擴展名的加密文件形式存放在~/.local/share/kwalletd目錄中。
安裝
KDE Wallet 通常隨 KDE Plasma 桌面環境一起提供。錢包子系統也可以通過 kwallet包 軟體包手動安裝。
可選安裝 kwalletmanager包 軟體包以獲得錢包管理工具。該工具可用於以圖形化方式創建和管理 KDE 錢包。
配置
在 Plasma 6(KF6)上配置 PAM
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文件夾。
使用 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 加密
當系統使用 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
其他替代方案和更多細節見 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
自動 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