GPG 无法连接到 S.gpg-代理:连接被拒绝

GPG Can't connect to S.gpg-agent: Connection Refused

我正在尝试使用 gpg 代理设置 gpg 预设密码缓存,以便我可以自动执行文件加密过程。为了让 gpg-agent 运行 并正确缓存密码,似乎需要在 ~/.当我设置 gpg 和 gpg-agent 时,在根目录中生成的 gnupg/ 目录。

我所做的(这在过去似乎是有效的)是我将以 root 身份启动所有内容并将 /.gnupg 目录的内容复制给我的特权较低的用户并授予对该套接字的权限和目录给用户。我 运行 启动 gpg-agent 守护进程和缓存密码的命令:

gpg-agent --homedir /home/<user>/.gnupg --daemon
/usr/libexec/gpg-preset-passphrase --preset --passphrase <passphrase> <keygrip>

gpg-agent 进程似乎 运行ning 很好,但我从第二行收到以下错误:

gpg-preset-passphrase: can't connect to `/home/<user>/.gnupg/S.gpg-agent': Connection refused
gpg-preset-passphrase: caching passphrase failed: Input/output error

我已确保套接字存在于具有适当权限的目录中,并且此进程 运行s 是根用户。即使我复制和修改权限,这个套接字似乎仍然固有地绑定到 root。所以我的问题是

  1. 这个套接字究竟是如何初始化的?
  2. 有没有办法以其他用户的身份手动执行此操作?

要补充一点,代理进程似乎 运行 对两个用户都很好,但我有点模糊的地方是 gpg-preset-passphrase 如何使用套接字,如果它是那个或那个代理拒绝连接 S.gpg-agent 我还假设我不需要显式启动代理,但我想我会这样做,以便我可以根据需要设置任何值,例如 homedir。

原来这个问题与 gpg-agentgpg-preset-passprhase 无关。

注意:这不是永久解决方案,但它确实让我克服了我面临的问题。

修改/etc/selinux/config并禁用SELinux后,我不再遇到上述权限问题。 SE Linux 是 Red Hat 开发的 Linux 内核安全模块(我目前在 RHEL7 上 运行 这个)。看来下一步可能是确保允许我的用户使用 audit2allow 访问这些二进制文件和包。这里有更多信息:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-allowing_access_audit2allow