[](https://res.cloudinary.com/practicaldev/image/fetch/s--KjyIUIKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://rtfm.co.ua/ wp-content/uploads/2019/12/keepass-logo.png)所以,这似乎是整个系列中关于 Linux 中的密码和 SSH 管理的最后一篇文章。

前面的部分是关于:

  • Linux:Nextcloud 客户端、qtkeychain 和“名称 org.freedesktop.secrets 未由任何 .service 文件提供”错误– 我发现密钥环服务能够存储 SSH 密钥密码 – 并开始了解Chromium 以“未加密方式”存储密码

  • Linux: KeePass, SSH и хранение паролей RSA-ключей(俄语尚未,即将翻译)——如何使用ssh-agent,关于它与 KeePass 集成以存储 SSH 密钥密码

  • 什么是:Linux 密钥环、gnome-keyring、Secret Service 和 D-Bus- 什么是密钥环以及如何使用它 - 回忆,如何使用 D-Bus - 以及关于 KeePass 的几句话整合为特勤局

  • Chromium:Linux,密钥环和秘密服务,密码加密和存储- 最后整理出来 - Chromium 以明文形式存储敏感数据是真的吗?

实际上,了解所有这些后,我们可以将它们全部放在一起,并在使用 Arch Linux 和 Openbox DE 的工作笔记本电脑上配置正常的机密管理。

在这篇文章中,我们将配置 KeePassXC:

  • 一个浏览器集成,用于将密码存储在 KeePass 而不是 Chromium 自己的 SQLite 数据库中

  • 为 MFA 生成 TOTP 代码

  • ssh-agent与 KeePass 集成以存储 RSA 密钥密码

  • 并将启用 Secret Service 集成以使用 KeePass 作为 Linux 的密钥环存储

内容

  • KeePass 与 KeePassXC

  • KeePass 和浏览器的密码 – KeePassXC-Browser

  • KeePassXC MFA TOTP 发生器

  • KeePass 和 ssh-agent 用于 SSH 密钥密码

  • 签名\和\发送\pubkey:签名失败:代理拒绝操作

  • KeePass 和特勤局集成

KeePass 与 KeePassXC

我将使用 KeePassXC 而不是 KeePass。

事实上,从一开始,我就切换到 KeePassXC 只是因为默认情况下它在带有 Openbox 的 Linux 中看起来要好得多。

记事通:

KeePassXC:

此外,KeePass 是用微软的 C# 编写的,在 Linux 下需要mono才能工作,而 KeePassXC 是用 C++ 编写的(参见它的存储库)并且可以在任何平台上轻松工作 - Linux/BSD/macOS/Windows。

查看Reddit上的线程了解更多详情。

作为浏览器,我将使用基于 Chromium 的 Brave,因此配置上不会有任何差异。

KeePass 和浏览器的密码 – KeePassXC-Browser

首先,有一个很好的问题——你真的想为你的浏览器切换密码存储吗?

即,您有 Chromium,它有自己的 SQLite 数据库,密码以的加密方式存储在那里。

此外,Chromium 在网页上创建凭证字段没有问题,但 KeePass 有时会发生这种情况。

另一方面,在使用 KeePass 时,您的所有密码(和 SSH 密钥等)始终在同一个地方。易于备份/恢复,在计算机之间移动/共享,添加到另一个浏览器等等。

所以,每个人都会自己决定,但让我们编写 KeePass 和 Chromium 集成过程。

转到工具>设置,然后到浏览器集成,启用它:

找到 KeePassXC-Browser 插件,安装它:

转到_设置_:

  • 保存新密码的默认组 - 通常,我禁用默认的 KeePassXC-Browser 密码并启用此选项,始终询问我要将新密码保存在哪里,因为在我的数据库中所有内容都划分为组

  • 激活 2FA/OTP 字段图标 - 如果主动使用 MFA 可以启用,但值得这样做吗?请参阅下面的 KeePass MFA TOTP 生成器

  • 自动重新连接到 KeePassXC - 始终保持与数据库的连接很舒服,还没有看到任何滞后/错误

  • 自动填写 HTTP 基本身份验证对话框并提交它们 - 看起来很有用,但我无法使其工作 - 始终显示 HTTP 表单窗口

回到插件,点击_Connect_:

设置连接名称:

检查 KeePass 关于连接的浏览器:

就完成了——图标现在是绿色的:

在某处登录,KeePass 会提示保存密码:

保存它(New),再次登录——我们的凭据现在在这里:

KeePassXC MFA TOTP 发生器

一件更有趣的事情——KeePassXC 中的 TOTP 代码生成器。

不过,还有一个严肃的问题:启用它是否是一个好的解决方案?

MFA 身份验证背后的主要思想正是使用两个独立的服务来对您进行身份验证,即一方面来自 login:password,另一方面来自 MFA 的 一个 TOTP 代码。

将它们放在同一个 KeePass 数据库中是否值得——绝对是关于你的,但请记住,如果有人可以访问你的 KeePass——那么你将没有机会将 MFA 作为保护数据安全的最后希望.

尽管如此,还是存在这样的选项,我正在使用 MFA,所以让我们看看如何配置它。

在 MFA 配置期间 - 根据服务选择“_Show secret key for “Scan'to scan QR”,以查看文本代码而不是 QR 代码。

以下是 AWS 控制台中的示例:

保存代码,然后在您的 KeePassXC 中找到或更新您要为其配置 MFA 的条目,右键单击它 - TOTP > 设置 TOTP:

并从 AWS 设置密钥:

保存,再次右键——Show TOTP:

并在 AWS 中完成 MFA 配置:

尝试登录,但是......填写 TOTP 字段的按钮不起作用[🙁](https://res.cloudinary.com/practicaldev/image/fetch/s--IwZUrXu3--/ c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f641.png)

而且它也不适用于Gmail的Chromium。

好吧——KeePass 中的代码已生成,所以只需通过右键单击或使用 Ctrl+T 手动复制它——我们就完成了。

KeePass 和ssh-agent用于 SSH 密钥密码

这里的想法是将 SSH 密钥密码存储在 KeePass 中,并通过ssh-agent访问它们,而无需输入 SSH 密钥密码。

它已经在Linux: KeePass, SSH и хранение паролей RSA-ключей帖子中进行了更详细的描述,但目前仅在 Russin 中可用(将在接下来的几天内翻译)。

检查ssh-agent是否正在运行:

$ ps aux | grep ssh-agent
setevoy     1505  0.0  0.0   5796   456 ?        Ss   Dec10   0:00 ssh-agent

如果没有 - 启动它:

$ eval $(ssh-agent)
Agent pid 950428

检查$SSH_AUTH_SOCK变量是否可用,因为它将指向用于与代理通信的套接字:

$ env | grep SSH
SSH\_AUTH\_SOCK=SSH\_AUTH\_SOCK=/run/user/1000/ssh-agent.socket
SSH\_AGENT\_PID=950428

转到 KeePass 工具 > 设置,启用 SSH 代理:

重新启动 KeePass 并添加一个新密钥。

生成它,设置密码:

$ ssh-keygen -f /home/setevoy/rtfm-do-prod-setevoy
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/setevoy/rtfm-do-prod-setevoy.
Your public key has been saved in /home/setevoy/rtfm-do-prod-setevoy.pub.
...

注意这里是用来设置密钥文件的-f,它不在.ssh目录中,以便更简单地添加到 KeePass。

检查文件:

$ ll /home/setevoy/rtfm-do-prod-setevoy\*
-rw------- 1 setevoy setevoy 2655 Dec 11 10:53 /home/setevoy/rtfm-do-prod-setevoy
-rw-r--r-- 1 setevoy setevoy  579 Dec 11 10:53 /home/setevoy/rtfm-do-prod-setevoy.pub

返回 KeePass,创建一个新条目,设置任何名称,并在 Password 字段中设置您的密钥密码:

SSH 代理中, 可以将密钥添加为 AttachmentExternal file

我建议使用 Attachment 因为在这种情况下,密钥将直接存储在数据库中,您无需将其复制到工作/家庭/等笔记本电脑上。

在同一窗口中切换到_Advanced_,选项卡并附加密钥文件:

转到 SSH 代理,从 Attachment 添加密钥:

在这里,请注意 _在打开/解锁数据库时将密钥添加到代理_选项 - 值得只为经常使用的密钥启用它,最好将它们保持在 5 以下,因为当 ssh-agent 将尝试连接到主机时– 它将尝试使用ssh-agent中可访问的每个密钥,并且远程主机上的 SSH 服务器可以关闭连接以“防止暴力破解”。

好的,尝试连接到主机:

$ ssh setevoy@rtfm.co.ua
Linux rtfm-do-production 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86\_64
...
setevoy@rtfm-do-production:~$

好的——它有效。

请记住,使用这种方法ssh-agent必须在 KeePass 之前启动,并且必须以这种方式导出其$SSH_AUTH_SOCK变量,以便 KeePass 可以看到它。检查Running ssh-agent with multitype terminal中的选项。

我正在使用带有systemd服务的变体,并且套接字路径将通过~/.config/openbox/environment文件导出(因为我使用的是 Openbox DE)。

我的单位文件/home/setevoy/.config/systemd/user/ssh-agent.service:

[Unit]
Description=SSH key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target

和环境文件 -~/.config/openbox/environment:

export QT_QPA_PLATFORMTHEME="qt5ct"
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

最后一步只是为了安慰一下——为与~/.ssh/config的连接添加一个“短名称”:

Host rtfm
 Hostname rtfm.co.ua
 User setevoy

我们根本没有添加IdentityFile——ssh-client将询问ssh-agent关于尝试登录的可用密钥,因此我们不会绑定到磁盘上的密钥文件。

现在使用这个短名称连接:

$ ssh rtfm
...
setevoy@rtfm-do-production:~$

既没有询问用户密码,也没有询问密钥的密码——一切正常,正如预期的那样。

sign_and_send_pubkey:签名失败:代理拒绝操作

一个简短的旁注:如果您现在启用“使用此密钥时需要用户确认”选项:

然后在SSH登录过程中,有时会看到“_sign\and\send\pubkey:signing failed: agent denied operation”错误:

$ ssh rtfm
sign\_and\_send\_pubkey: signing failed: agent refused operation
Load key "/home/setevoy/.ssh/id\_rsa": Is a directory
setevoy@rtfm.co.ua's password:

发生这种情况是因为ssh-agent试图要求用户确认并使用无法安装在系统中的ssh-askpass实用程序:

$ file /usr/lib/ssh/ssh-askpass
/usr/lib/ssh/ssh-askpass: cannot open `/usr/lib/ssh/ssh-askpass' (No such file or directory)

安装x11-ssh-askpass包:

$ sudo pacman -S x11-ssh-askpass

重新尝试登录——现在您必须看到一个带有确认请求的窗口:

点击 ОК – 现在一切正常。

KeePass 和特勤局集成

为了更好地理解一般的密钥环和特定情况下的 Secret Service——我强烈建议您首先阅读What is: Linux keyring, gnome-keyring, Secret Service, and D-Bus帖子。

首先,让我们确保我们的系统中没有可用的特勤服务——检查 D-Bus:

$ qdbus --session org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.secrets
Error: org.freedesktop.DBus.Error.NameHasNoOwner
Could not get PID of name 'org.freedesktop.secrets': no such name

好的,它是空的。

转到 KeePass,_Tools > Settings,选择 Secret Service Integration,启用它:

现在,转到 KeePass 数据库的设置,并在其 Secret Service Integration 设置中指定将用于存储我们的秘密的集合(团队、文件夹):

此外,现在最好在系统中的所有其他应用程序之前启动 KeePass。

就我而言,这可以通过~/.config/openbox/autostart文件来完成:

xrandr --output HDMI-1 --primary
xrandr --output eDP-1 --right-of DP-1
feh --bg-scale /home/setevoy/Pictures/Wallpaper/seryy-kapli-strela-ten-arch.jpg &
tint2 -c /home/setevoy/.config/tint2/setevoy-tint2-90-pecent-bottom-wrk.tint2rc &
polybar -c /home/setevoy/.config/polybar/setevoy-polybar-wrk-bars.conf bottom &
polybar -c /home/setevoy/.config/polybar/setevoy-polybar-wrk-bars.conf top &
sleep 5
keepassxc &
dropbox &
lxqt-notificationd &
xscreensaver &
qxkb &
skypeforlinux &
sleep 5
slack &
...

运行浏览器:

$ chromium --password-store=gnome

在 KeePass 的 Tools > Settings 中检查现在正在使用 Secret Service 的服务:

当 Chromium 尝试访问其密码以解密其 SQLite 数据库中的某些密码时,来自 KeePass 的通知:

但这是另一个问题:当我通过gmrun启动 Chromium 时,它以--password-store=basic而不是--password-store=gnome启动,尽管它必须检查是否有特勤局可用并运行“gnome”而不是“基本”贮存。

为了拯救它——阅读Arch Wiki并创建一个~/.config/chromium-flags.conf文件:

--password-store=gnome

重启浏览器,进入chrome://version/,勾选选项:

好的,它适用于 Chromium - 但 Brave 仍然使用“basic”选项。

对于 Arch Linux 中的 Brave 浏览器,你可以创建一个~/.config/brave-flags.conf文件,如this>>>评论中提到的,所以我们可以直接复制现有的:

$ cp .config/chromium-flags.conf .config/brave-flags.conf

重新启动 Brave,检查其选项:

而在KeePass的Secret Service中,出现了_brave_记录,所以现在使用Secret Service:

完毕。

类似帖子

  • 11/12/2019KeePass:MFA 设置、浏览器密码存储、SSH 密钥密码和秘密服务集成

  • 12/01/2019SSH:RSA 密钥和用于 SSH 密钥及其密码管理的 ssh-agent

  • 12/07/2019什么是:Linux 密钥环、gnome-keyring、秘密服务和 D-Bus

  • 12/01/2019Linux:Nextcloud 客户端、qtkeychain 和“名称 org.freedesktop.secrets 未由任何 .service 文件提供”错误

Logo

更多推荐