跳转至内容

KDE Wallet

来自 ArchWiki

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

钱包(在 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 Wallet。

配置

在 Plasma 6 (KF6) 上配置 PAM

本文或本章节的准确性存在争议。

原因: 配置 PAM 似乎对于使 KWallet 运行并非必须。Plasma 登录管理器也未被提及(SDDM 不再是首选的显示管理器)。(讨论见 Talk:KDE Wallet)

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-pamGnuPG 密钥不兼容,KDE Wallet 必须使用标准的 blowfish 加密。
  • 使用自动登录时,只有在自动登录方法保存了密码的情况下,钱包才能被解锁。例如 pam_autologin 就可以。
  • 使用指纹阅读器登录时无法解锁钱包
  • 钱包必须命名为 kdewallet(默认名称)。它不会解锁任何其他钱包。
  • 如果使用 KDE,您可能希望在 KDE Wallet 设置中禁用“在最后一个应用程序停止使用时关闭”,以防止钱包在每次使用后(如 Wi-Fi 密码解锁等)被关闭。
  • 可能需要先删除默认创建的钱包,从而删除所有存储的条目。
  • 如果 kwallet 迁移助手在每次登录后都要求输入密码,请重命名或删除 ~/.kde4/share/apps/kwallet 文件夹。
提示 另一种方法是使用 KWalletManager 并设置一个空的 Kwallet 密码,从而无需输入密码即可解锁钱包。只需在“更改密码..”的两个字段中都不输入密码即可。但这可能会导致用户钱包被未经授权地访问(读/写)。强烈建议在“访问控制”下启用“应用程序访问钱包时提示”,以防止未经授权的访问。

使用 SDDM 自动登录和 LUKS 加密

本文或本章节已过时。

原因: SDDM 不再是首选的显示管理器;它已被 Plasma Login Manager 取代。(讨论见 Talk:KDE Wallet)

当系统使用 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 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 密钥时,系统会要求输入其密码。请务必勾选“记住密码”复选框。下次使用时,密码将从 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 并启用“将 KWallet 用于 Secret Service 接口”
  • 编辑 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 的浏览器内置了钱包集成。基于 VSCodeIDE 依赖于相同的 Chromium oscrypt 模块进行钥匙环检测。[1]

要启用它,请在运行程序时使用 --password-store=kwallet5--password-store=kwallet6--password-store=detect 参数。[2]

要使更改永久生效,请参阅 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
注意 可以将 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

参见

© . 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.