【发布时间】:2020-03-27 12:26:42
【问题描述】:
我正在尝试使用 gpg 代理设置 gpg 预设密码短语缓存,以便我可以自动化我的文件加密过程。为了让 gpg-agent 运行并正确缓存密码,似乎需要有一个位于 ~/.gnupg/ 目录中的 S.gpg-agent 套接字,该套接字在根目录中生成设置 gpg 和 gpg-agent 时的目录。
我所做的(过去似乎可行)是我将以 root 身份启动所有内容,并将 /.gnupg 目录的内容复制给我的特权较低的用户,并授予对该套接字和目录的权限用户。我为启动 gpg-agent 守护进程和缓存密码而运行的命令:
gpg-agent --homedir /home/<user>/.gnupg --daemon
/usr/libexec/gpg-preset-passphrase --preset --passphrase <passphrase> <keygrip>
gpg-agent 进程似乎运行良好,但我从第二行收到以下错误:
gpg-preset-passphrase: can't connect to `/home/<user>/.gnupg/S.gpg-agent': Connection refused
gpg-preset-passphrase: caching passphrase failed: Input/output error
我已确保套接字存在于具有适当权限的目录中,并且此进程以 root 身份运行。即使我复制和修改权限,这个套接字似乎仍然与 root 绑定。所以我的问题是
- 这个套接字究竟是如何初始化的?
- 有没有办法以其他用户的身份手动执行此操作?
补充一点,代理进程似乎对两个用户都运行得很好,但我有点模糊的是 gpg-preset-passphrase 是如何使用套接字的,如果是它,或者代理拒绝连接到 @ 987654325@ 我还假设我不需要显式启动代理,但我想我会这样做,以便我可以设置任何值,例如 homedir(如果需要)。
【问题讨论】:
-
gpg-agent 通常应该作为守护进程运行,而不是手动调用。请参阅 gnupg.org/documentation/manuals/gnupg/… 和 linux.die.net/man/1/gpg-agent。提示:你的 gpg.conf 文件中有指令
use-agent吗?另一个提示:GNOME Keyring 可能正在您的系统上运行并产生干扰。 -
谢谢,我相信默认情况下它会使用代理。我看了看,找不到任何运行的密钥环实例,此外,当我以 root 身份运行时,gpg-agent 似乎能够使用该套接字。这似乎仍然是权限问题吗?
-
我会说它适用于 root,因为它在自己的 shell 和自己的上下文中运行。但我会检查 /home/
/.gnupg/ 中所有文件的权限。确保在您的主目录中以 root 身份运行 gpg-agent 时没有添加具有 root 权限的文件。你可以擦 S.gpg-agent。 -
尝试了一些删除套接字并重新创建它的方法,以及 .gnupg 目录。我以 root 身份安装了 gpg 包,也许这可能与它有关,其中 root 对我的用户尝试访问的某些二进制文件拥有所有权?
-
您使用的是 GnuPG v1 还是 v2 ?
gpg-agent --version和gpg --version的输出是什么?