跳转至内容

KDE Wallet

来自 ArchWiki

KDE Wallet Manager 是一个用于管理 KDE Plasma 系统上密码的工具。使用 KWallet 子系统允许用户保存自己的秘密信息,同时也允许用户访问由所有与 KWallet 集成的应用程序存储的密码。

钱包(在 KDE 的术语中,有时也称为 vault 或 keyring)是一个由用户定义的密码保护的加密卷,用户和/或软件可以在其中存储秘密信息(通常是在用户在应用程序中勾选了“记住账户”时存储的凭据)。这些 vault 可以由用户手动创建和使用,也可以由一些与钱包子系统集成的软件(例如邮件应用程序或游戏)在后台自动创建和使用。Vault 通常在用户登录时使用 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 钱包。

配置

登录时自动解锁 KDE Wallet

要实现登录时自动解锁 KDE Wallet,请为 PAM 兼容模块 安装 kwallet-pam。选择的 KWallet 密码必须与当前 用户密码相同。

  • kwallet-pamGnuPG 密钥不兼容,KDE 钱包必须使用标准的 blowfish 加密。
  • 当使用自动登录时,只有当自动登录方法保存了密码,钱包才能被解锁。例如,pam_autologin 可以做到这一点。
  • 使用指纹读取器登录时,钱包将无法解锁
  • 钱包必须命名为 kdewallet(默认名称)。它不会解锁任何其他钱包。
  • 如果使用 KDE,可能会想在 KDE Wallet 设置中禁用“当最后一个应用程序停止使用时关闭”,以防止钱包在每次使用后被关闭(例如,Wi-Fi 密码解锁等)。
  • 可能需要先删除默认创建的钱包,从而删除所有存储的条目。
  • 如果 kwallet 迁移助手在每次登录后都要求输入密码,请重命名或删除 ~/.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

使用 SDDM 自动登录和 LUKS 加密

当系统使用 dm-crypt 加密时,可以通过解密磁盘的密码短语自动解锁 KDE Wallet。当配置了 SDDM#Autologin 时,钱包仍然可以被自动解锁。编辑 /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

然后 编辑 sddm.service,并添加

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

技巧与提示

使用 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 钱包并启用对 Secret Service 接口使用 KWallet
  • 编辑 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

KDE 钱包用于 Chrome 和 Chromium

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

从终端查询密码

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

例如,如果您想使用 Podman 登录 Docker Hub 注册表,它支持通过 --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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.