标题已经说明了一切,但让我再详细阐述一下:
我想知道密钥环密码是如何保护我的密钥的。当然,它会加密容器文件,所以其他人都无法访问它。但在我提供密钥环密码后,它也会被解密。所以事实上,当我登录时,密钥可能会被一些恶意应用程序窃取(至少具有 root 权限的应用程序应该能够做到)。
当然,我知道,输入密码后密钥文件本身不会被替换为解密版本,但必须在内存中解密。
问题是:恶意应用程序是否可以在解密密钥环时访问其中的数据?如果是这样,当我的磁盘已使用 luks 加密且只有我一人使用我的计算机时,我是否还需要密钥环密码?
而且,如果密码更安全,是否可以在我登录后使用我的帐户密码(或类似密码)自动解锁?
(我没有使用登录管理器,而是通过 TTY 登录后自动启动 i3wm,所以此设置也可以自动解锁吗?)
答案1
恶意应用程序可以在解密我的密钥环时访问其中的数据吗?
实际上(目前),是的,他们可以。Linux 中用户会话的当前设计(或缺乏设计)使得 gnome-keyring-daemon 很难确定哪个程序正在尝试访问它;对于编译程序来说,这在某种程度上是可行的,但是例如,任何用 Python 编写的应用程序都与任何其他用 Python 编写的应用程序没有区别。因此,尽管 gnome-keyring 确实首先有一个应用程序白名单,当前版本不再有。
最终,这一点应该通过诸如 Snap 或 Flatpak 之类的应用程序容器项目来改进。
如果是这样,当我的磁盘已经经过 luks 加密并且只有我一个人使用我的电脑时,我是否还需要为我的密钥环设置密码?
我认为是的。
如上所述,任何程序都可以发送 D-Bus 消息并向 gnome-keyring-daemon 询问任何秘密。(在某些情况下,它甚至可以作为一项功能。)
然而,存在相当多的安全漏洞,可以利用易受攻击的程序(例如网络浏览器)来窃取你的文件,但仍然无法运行命令或发送 D-Bus 消息。众所周知,恶意软件会窃取人们未加密的 SSH 密钥(~/.ssh/id_rsa
)或比特币核心钱包。
同样,如果没有加密,您就有~/.local/share/keyrings/login.keyring
可能通过网络浏览器漏洞等被盗。
(我没有使用登录管理器,而是通过 TTY 登录后自动启动 i3wm,所以此设置也可以自动解锁吗?)
gnome-keyring 的自动解锁在所有情况下都是通过 PAM 完成的。名为 的模块pam_gnome_keyring.so
在登录过程中接收您的密码,并启动初始密钥环守护程序。
应将 PAM 模块添加到/etc/pam.d
您的 Linux 发行版通常添加通用模块的位置,或者仅添加到文件login
(专用于控制台和 telnet 登录)。
在 auth 组中(在 Debian 风格的“附加”块中common-auth
;否则作为最后一个模块)它会将密码存储在内存中:
[...]
auth optional pam_gnome_keyring.so only_if=login
在会话组中(同样,对于 Debian 来说,是“附加”块,否则是最后一个模块),它使用存储的密码来启动gnome-keyring-守护进程:
[...]
session optional pam_gnome_keyring.so only_if=login auto_start