使用特定选项启动 gpg-agent

使用特定选项启动 gpg-agent

我有一个应用程序,由系统用户作为服务运行,它使用 GPG(在 C 中使用 libgpgme)。该用户没有主目录,我想消除密码缓存。

因此我想gpg-agent--homedir=/opt/myapp/.gnupg --default-cache-ttl 0.

gpg-agent(1)说:

该代理由 gpg、gpgsm、gpgconf 或 gpg-connect-agent 根据需要自动启动。因此没有理由手动启动它。

这让我想到几个问题:

  1. 应该如何gpg-agent使用特定的命令行选项启动特定的主目录?
  2. 如果gpg-agent已经在运行,是否可以更改homedir/default-cache-ttl或者我应该终止现有代理?
  3. 杀死现有用户会gpg-agent影响其他(非系统)用户吗?

对于问题 1:使用该 homedirgpg-connect-agent --homedir /opt/myapp/.gnupg /bye创建一个新gpg-agent代理,但任何其他代理继续运行。gpg-agent我们签名时会使用哪个?

对于问题2:我尝试了以下方法。然而,它homedir并没有作为一个选项出现--list-options gpg-agent,虽然我在 期间看到了新值刷新--list-options,但我仍然能够在没有密码的情况下签署文件。

echo "default-cache-ttl::0" | gpgconf --change-options gpg-agent
echo "max-cache-ttl::0" | gpgconf --change-options gpg-agent

答案1

如何使用特定的命令行选项为特定的主目录启动 gpg-agent ?

在服务文件中使用Environment=GNUPGHOME=/opt/myapp/.gnupg. 调用(或使用中的必要功能)gpg-agent时自动启动。通过设置,/调用将连接到现有的,或者如果尚不存在合适的,则生成一个新的。gpglibgpgme$GNUPGHOMEgpggpgmegpg-agent--homedir=/opt/myapp/.gnupggpg-agent

如果 gpg-agent 已经在运行,是否可以更改 [...]default-cache-ttl 或者我应该终止现有代理?

来自gpgconf(1):“gpgconf 是一个实用程序,可以自动、合理、安全地查询和修改‘.gnupg’主目录中的配置文件。它的设计目的是不由用户手动调用......”

设置 时您真正需要做的default-cache-ttl就是确保$GNUPGHOME/gpg-agent.conf存在并包含 default-cache-ttl 0。请注意,它需要在gpg-agent创建新实例之前存在。因此,要么确保此文件与应用程序一起安装,要么因为这是一项服务,用于ExecStartPre=运行设置此文件的内容。

杀死现有的 gpg-agent 会影响其他(非系统)用户吗?

应该没有必要杀人gpg-agent。由于它在服务中运行,因此任何生成的gpg-agents 都与服务的 cgroup 隔离。当服务停止时,spawned gpg-agents将被systemd杀死。

注意:我对上面的段落只是相当确定。我注意到当我gpg-connect-agentExecStartPre=systemd中测试时发出了一个警告,该警告gpg-agent仍然存在于 cgroup 中并被杀死。

相关内容