KDE 钱包

来自 ArchWiki

KDE 钱包管理器是一个在 KDE Plasma 系统上管理密码的工具。使用 KWallet 子系统允许用户保管自己的密钥,也允许用户访问所有与 KWallet 集成的应用程序存储的密码。

钱包(在 KDE 的术语中,有时称为 vault 或 keyring)是一个加密卷,受用户定义的密码保护,用户和/或软件可以在其中存储密钥(通常是用户在应用程序中选中“记住账户”时的凭据)。这些 vault 可以由用户手动创建和使用,也可以由一些与钱包子系统集成的软件(例如,邮件应用程序或游戏)在后台自动创建和使用。 Vault 通常在使用 PAM 模块的用户登录时自动解密(见下文)。

提示

  • 如果您只需要为使用它的应用程序提供钱包,建议使用默认名称( kdewallet)和与用户相同的密码(用于 PAM)。
  • 钱包默认存储为加密文件,使用 .kwl 扩展名,位于 ~/.local/share/kwalletd 目录中。
注意: 自 KDE Frameworks 5.97.0 起,KDE 钱包支持 org.freedesktop.secrets DBus API,现在可以被 libsecret 用于使用 Secret Service API 存储和检索密码以及其他密钥。

安装

KDE 钱包通常与 KDE Plasma 桌面环境一起发布。钱包子系统可以使用 kwallet 软件包手动安装

可选安装 kwalletmanager 软件包以获得钱包管理工具。此工具可用于图形化创建和管理 KDE 钱包。

配置

登录时自动解锁 KDE 钱包

要在登录时自动解锁 KDE 钱包,安装 kwallet-pam 以获得 PAM 兼容模块。选择的 KWallet 密码必须与当前用户密码相同。

注意
  • kwallet-pamGnuPG 密钥不兼容,KDE 钱包必须使用标准的 blowfish 加密。
  • 当使用自动登录时,只有当自动登录方法保存密码时,钱包才能被解锁。例如,pam_autologin 就可以。
  • 当使用指纹读取器登录时,钱包无法解锁
  • 钱包必须命名为 kdewallet(默认名称)。它不会解锁任何其他钱包。
  • 如果使用 KDE,您可能需要禁用 KDE 钱包设置中的当最后一个应用程序停止使用时关闭,以防止钱包在每次使用后关闭(Wi-Fi-密码解锁等)。
  • 可能需要先删除默认创建的钱包,从而删除所有存储的条目。
  • 如果 kwallet Migration Assistant 在每次登录后都要求输入密码,请重命名或删除 ~/.kde4/share/apps/kwallet 文件夹。
提示: 另一种方法是使用 KWalletManager 并设置一个空的 Kwallet 密码,从而避免需要输入密码来解锁钱包。只需在更改密码..的两个字段中都不输入密码。但这可能会导致对用户钱包的意外(读/写)访问。强烈建议启用当应用程序访问钱包时提示下的访问控制,以防止对钱包的不必要访问。

配置 PAM

以下行必须存在于其对应的部分下

auth            optional        pam_kwallet5.so
session         optional        pam_kwallet5.so auto_start

编辑与您的情况相对应的 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
/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

技巧和提示

使用 KDE 钱包存储 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 密钥时,系统会要求您输入其密码。请务必选中记住密码复选框。下次,密码将从 KDE 钱包中读取。

使用 KDE 钱包存储 Git 凭据

Git 可以将凭据处理委托给凭据助手。通过使用 ksshaskpass 作为凭据助手,HTTP/HTTPS 和 SMTP 密码可以安全地存储在 KDE 钱包中。

安装 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 钱包中。

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

启用 Secret Service 接口。有两种方法可以做到这一点

  • 转到系统设置 > KDE 钱包并启用使用 KWallet 作为 Secret Service 接口
  • 编辑 KDE 钱包配置文件
~/.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

Chrome 和 Chromium 的 KDE 钱包

Chrome/Chromium/Opera 具有内置的钱包集成。要启用它,请使用 --password-store=kwallet5--password-store=detect 参数运行 Chromium。要使更改持久生效,请参阅 Chromium#Making flags persistent。(设置 CHROMIUM_USER_FLAGS 将不起作用。)

从终端查询密码

您可以手动在钱包中添加新条目,并使用 kwallet-query 检索它们,而不用将密码存储在纯文本文件中。

例如,如果您想使用 Podman 登录 Docker Hub 注册表,Podman 支持使用 --password-stdin 标志从 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

参见