KDE 钱包
KDE 钱包管理器是一个在 KDE Plasma 系统上管理密码的工具。使用 KWallet 子系统允许用户保管自己的密钥,也允许用户访问所有与 KWallet 集成的应用程序存储的密码。
钱包(在 KDE 的术语中,有时称为 vault 或 keyring)是一个加密卷,受用户定义的密码保护,用户和/或软件可以在其中存储密钥(通常是用户在应用程序中选中“记住账户”时的凭据)。这些 vault 可以由用户手动创建和使用,也可以由一些与钱包子系统集成的软件(例如,邮件应用程序或游戏)在后台自动创建和使用。 Vault 通常在使用 PAM 模块的用户登录时自动解密(见下文)。
提示
- 如果您只需要为使用它的应用程序提供钱包,建议使用默认名称(即
kdewallet
)和与用户相同的密码(用于 PAM)。 - 钱包默认存储为加密文件,使用
.kwl
扩展名,位于~/.local/share/kwalletd
目录中。
安装
KDE 钱包通常与 KDE Plasma 桌面环境一起发布。钱包子系统可以使用 kwallet 软件包手动安装。
可选安装 kwalletmanager 软件包以获得钱包管理工具。此工具可用于图形化创建和管理 KDE 钱包。
配置
登录时自动解锁 KDE 钱包
要在登录时自动解锁 KDE 钱包,安装 kwallet-pam 以获得 PAM 兼容模块。选择的 KWallet 密码必须与当前用户密码相同。
- kwallet-pam 与 GnuPG 密钥不兼容,KDE 钱包必须使用标准的
blowfish
加密。 - 当使用自动登录时,只有当自动登录方法保存密码时,钱包才能被解锁。例如,pam_autologin 就可以。
- 当使用指纹读取器登录时,钱包无法解锁
- 钱包必须命名为
kdewallet
(默认名称)。它不会解锁任何其他钱包。 - 如果使用 KDE,您可能需要禁用 KDE 钱包设置中的当最后一个应用程序停止使用时关闭,以防止钱包在每次使用后关闭(Wi-Fi-密码解锁等)。
- 可能需要先删除默认创建的钱包,从而删除所有存储的条目。
- 如果 kwallet Migration Assistant 在每次登录后都要求输入密码,请重命名或删除
~/.kde4/share/apps/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
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