KDE Wallet
KDE Wallet Manager 是一个用于在 KDE Plasma 系统上管理密码的工具。使用 KWallet 子系统允许用户保存自己的秘密,同时也允许用户访问由每个集成 KWallet 的应用程序存储的密码。
钱包(在 KDE 的术语中,有时被称为 vault 或 keyring)是一个由用户定义密码保护的加密卷,用户和/或软件可以在其中存储秘密(通常是用户在应用程序中勾选“记住账户”时的凭据)。这些保险库可以由用户手动创建和使用,也可以由集成钱包子系统的某些软件(例如 邮件客户端或游戏)在后台自动创建和使用。保险库通常在用户登录时通过 PAM 模块自动解密(见下文)。
技巧
- 如果您只需要为使用它的应用程序提供一个钱包,建议使用默认名称(即
kdewallet)以及与用户相同的密码(用于 PAM)。 - 默认情况下,钱包以
.kwl扩展名的加密文件存储在~/.local/share/kwalletd目录中。
安装
KDE Wallet 通常随 KDE Plasma 桌面环境一起分发。钱包子系统可以通过安装 kwallet 软件包来手动安装。
可选安装 kwalletmanager 软件包以获取钱包管理工具。该工具可用于以图形化方式创建和管理 KDE Wallet。
配置
在 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 设置中禁用“在最后一个应用程序停止使用时关闭”,以防止钱包在每次使用后(如 Wi-Fi 密码解锁等)被关闭。
- 可能需要先删除默认创建的钱包,从而删除所有存储的条目。
- 如果 kwallet 迁移助手在每次登录后都要求输入密码,请重命名或删除
~/.kde4/share/apps/kwallet文件夹。
使用 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 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
有关替代方案和更多细节,请参阅 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 的浏览器内置了钱包集成。基于 VSCode 的 IDE 依赖于相同的 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
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