KDE Wallet
KDE Wallet Manager 是一个在 KDE Plasma 系统上管理密码的工具。使用 KWallet 子系统允许用户保管自己的秘密,同时也允许用户访问每个与 KWallet 集成的应用程序存储的密码。
钱包(在 KDE 的术语中,有时称为 vault 或 keyring)是一个加密卷,受用户定义的密码保护,用户和/或软件可以在其中存储秘密(通常是用户在应用程序中选中“记住账户”时的凭据)。这些 vault 可以由用户手动创建和使用,也可以由与钱包子系统集成的某些软件(例如邮件应用程序或游戏)在后台自动创建和使用。Vault 通常在使用 PAM 模块的用户登录时自动解密(见下文)。
提示
- 如果你只需要为使用它的应用程序提供钱包,建议使用默认名称(即
kdewallet
)和与用户相同的密码(对于 PAM)。 - 默认情况下,钱包以
.kwl
扩展名的加密文件形式存储在~/.local/share/kwalletd
目录中。
安装
KDE Wallet 通常与 KDE Plasma 桌面环境一起提供。钱包子系统可以通过 kwallet 软件包手动安装。
可选安装 kwalletmanager 软件包以获得钱包管理工具。此工具可用于图形化地创建和管理 KDE Wallet。
配置
登录时自动解锁 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
文件夹。
配置 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 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
KDE Wallet 对 Chrome 和 Chromium 的支持
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