我正在运行 debian 10、xfce、gnome-keyring、ssh-agent、LUKS 分区。
我使用 gnome-keyring 的原因是因为我不想在重新启动时输入 ssh 密钥密码。这是因为周围有很多闭路电视摄像机。恐怕是某种秘密的闭路电视摄像机记录了我输入的内容。我总是避免输入密码并尝试输入尽可能少的时间。
使用当前设置,我至少需要输入两个密码。一个用于 LUKS 分区,一个用于 lightdm 中的系统登录。
今天,我想减少一个密码要求,让系统自动登录,所以不再需要输入系统用户登录密码了。我认为这仍然是和以前一样的安全级别,因为 LUKS 分区加密仍然存在。(或者不太安全,但使用 LUKS 仍然安全)
启用自动登录后,我发现 gnome 密钥环不再自动解锁。如果我想用我当前的设置解锁它,我必须再次输入解锁密码,这是我想要避免的第二个密码。
通过 goolging,我发现我可以简单地从 seahorse 中的 gnome 钥匙圈中删除解锁密码,以便使用自动登录解锁。
以上是我目前情况的详细故事。所以这就是问题所在。如果我从 gnome 密钥环中删除解锁密码,我不知道在后台会发生什么。
我之所以使用 gnome keyring 是因为我不希望我的系统中任何正在运行的程序可以直接从文件系统访问 ssh 私钥~/.ssh/id_rsa
。有些人可能会争辩说,程序可能仍然从记忆中获取密钥。只要这能提高某种安全性,我真的不在乎它是如何工作的。只要未加密的 ssh-key 没有存储在某个文件系统中,我就可以了。恐怕从 gnome-keyring 中删除密码会使未经加密的文件以纯文本格式存储在文件系统中。从 gnome 密钥环中删除密码会对存储(文件系统)的观点产生任何影响吗?
我真的不在乎没有密码来解锁密钥环,因为我有 LUKS 分区加密,除非他们知道我的 LUKS 密码,否则人们不能使用密钥环。但是如果我删除密钥环密码,我确实关心是否任何正在运行的程序可以直接从文件系统访问一些纯文本密钥。
我希望我已经在这个问题上说清楚了,非常感谢你的帮助。
密钥环的密码不直接用作您的 SSH 密钥的密码。它仅用于加密单个文件——位于
~/.local/share/keyrings/login.keyring
.您的所有 SSH 密钥和其他文件都将使用其原始密码进行加密。
(旧系统可能有两个单独的密钥环“login”和“default”。在这种情况下,您只需解密“login”密钥环,因为它还存储所有其他密钥环的密码。)
我对此有两个不同的答案,这两个都是坏消息:
第一个问题是您的密码是GNOME Keyring 可用的唯一加密密钥源。如果您删除了密码,那么 GNOME Keyring 将被迫完全不加密地存储其密码数据库。(它甚至会
keyrings/login.keyring
从二进制数据库转换为文本格式,以使这一点非常清楚。)这不会直接改变与您的 SSH 密钥文件有关的任何内容:如果它们之前被加密,那么之后它们仍然会被加密。但他们的加密密码短语,以及所有其他密码和密码短语(甚至可能是您的 GnuPG 密钥密码短语)将以纯文本形式存储在 GNOME Keyring 的数据库中。
因此,如果您最关心的是直接访问文件系统,那么是的,您的密钥可能会被盗——攻击者现在只需要盗取一个额外的文件。
第二个问题是……第一个问题甚至无关紧要,因为常规应用程序不仅限于访问它们自己的密钥环条目。只要您的 GNOME 密钥环被解锁,任何非 Flatpak 程序都可以使用官方 API 查询存储在密钥环中的任何条目并获取它想要的任何存储密码,而无需窥探内存或其他诡计。从 CLI 尝试一下:
因此,密钥环密码仅对防止离线攻击有用(并且在使用 LUKS 时是多余的)——它从来没有用于防止正在运行的系统上的恶意软件。
以下是提高安全性的一些想法(主要是假设您要防范通用漏洞利用/病毒/蠕虫,而不是防范针对性攻击):
如果可能,通过 Flatpak 安装应用程序。默认情况下,它们被限制在一个容器中,该容器无法访问您的文件,也无法访问您的密钥环。
不包含在 Flatpak 中的应用程序可以在不同的 UID 下运行(例如,通过 Xvnc 或 Xephyr 使它们显示在您的主屏幕上)。有些人用这种方式运行 Firefox,所以有很多教程。
SSH 密钥只能加载到ssh-agent 中,但不能从中提取。再加上这一事实,可以配置 AppArmor 或 SELinux,以防止除 'ssh-add' 之外的任何进程访问
~/.ssh/id_*
文件。您可以将 RSA 或 ECDSA 密钥存储在专用的硬件令牌中——例如,如果您的笔记本电脑的 TPM 芯片有的话。(如果没有,那么支持 PIV/OpenPGP 的 Yubikey 可以以不同的方式完成相同的工作。)就像 ssh-agent 本身一样,令牌不允许您取回原始密钥 - 它只会提供签名操作。
(理论上 FIDO/U2F 令牌的工作方式相同,但它们只允许以非常特定的格式对数据进行签名,因此它们不能作为普通 SSH 密钥重复使用。最新的 OpenSSH 版本可以使用新
sk-*
密钥类型的 FIDO 令牌,但是您的所有服务器也必须先升级以支持它们。)在缺乏硬件支持的情况下,您可以将 ssh-agent 与 SoftHSM 虚拟智能卡结合使用,它仍然是软件,但很容易使其在专用 UID 下运行。这样,您的主 UID 将无法访问 SoftHSM 的数据库,并且只能执行其 PKCS#11 模块允许的操作。
我猜是 Qubes 操作系统?