![我如何告诉 gpg 我不希望特定程序的密码缓存?](https://linux22.com/image/62212/%E6%88%91%E5%A6%82%E4%BD%95%E5%91%8A%E8%AF%89%20gpg%20%E6%88%91%E4%B8%8D%E5%B8%8C%E6%9C%9B%E7%89%B9%E5%AE%9A%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%AF%86%E7%A0%81%E7%BC%93%E5%AD%98%EF%BC%9F.png)
我在用着gnupg 2.1.2
。通常在gnupg
缓存我的密码时它非常方便。但对于一些敏感程序,我希望gnupg
不使用gpg-agent
.我在互联网上搜索了很长时间,但没有找到很多有用的信息。如何知道gnupg
我不希望缓存特定程序的密码?
以下是示例。我将Mutt
其用作 MUA,并将我所有帐户的密码加密在 下的单独文件中~/.mutt/.passwd.gpg
。在我的~/.muttrc
设置中
source "/usr/bin/gpg -d --quiet ~/.mutt/.passwd.gpg |"
当我Mutt
第一次启动时,我会被要求输入我的私钥密码gpg
。当我输入该密码后,该密码将被缓存一段时间gpg
。因此,当我Mutt
在此间隔内再次开始时,系统不会再提示我输入私钥密码。这意味着在此期间访问我的计算机的任何人都可以阅读我的邮件甚至发送邮件。我怎样才能告诉gpg
(例如,通过传递一个选项,gpg
尽管man
-page 不显示任何相关标志)每次启动Mutt
(或任何其他特定程序)时提示输入我的私钥密码?我意识到这甚至可能不可能,因为gpg
可能不知道哪个程序试图访问加密文件。但我希望我们伟大的社区能够证实这一点。
答案1
这可能不太优雅,但对我来说,它是有效的。使用后立即终止守护进程即可gpg
:
killall gpg-agent
(是的,去他妈的!)
下次它被gpg
或任何其他程序调用时,它将自动重新启动。通过这种方式使用它,缓存密码的默认时间将不会改变(您可能不希望其他程序有相同的行为)。
答案2
gpg-agent 的文档说“gpg-agent 使用环境变量来通知客户端有关通信参数的信息”。它没有给出实际的环境变量名称,但一些测试表明相关变量是GPG_AGENT_INFO
.我建议将你的 mutt 配置更改为以下内容:
source "unset GPG_AGENT_INFO; /usr/bin/gpg -d --quiet ~/.mutt/.passwd.gpg |"
一个也许更简单的解决方案是传递--no-use-agent
给 gpg。
gpg
请注意,如果您的凭据已被缓存(可能是因为您让 gpg-agent 从 Mutt 外部缓存它们),这并不能阻止攻击者在启用代理的情况下进行调用。因此,即使 gpg-agent 知道mutt
具体的歧视,它也不会是一个非常强大的安全措施。
答案3
例如,以 1 秒缓存间隔重新启动代理,几乎就像没有缓存一样
pkill gpg-agent && gpg-agent --default-cache-ttl 1 --use-standard-socket --daemon