我有一个应用程序,由系统用户作为服务运行,它使用 GPG(在 C 中使用 libgpgme)。该用户没有主目录,我想消除密码缓存。
因此我想gpg-agent
从--homedir=/opt/myapp/.gnupg --default-cache-ttl 0
.
gpg-agent(1)
说:
该代理由 gpg、gpgsm、gpgconf 或 gpg-connect-agent 根据需要自动启动。因此没有理由手动启动它。
这让我想到几个问题:
- 应该如何
gpg-agent
使用特定的命令行选项启动特定的主目录? - 如果
gpg-agent
已经在运行,是否可以更改homedir
/default-cache-ttl
或者我应该终止现有代理? - 杀死现有用户会
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
时自动启动。通过设置,/调用将连接到现有的,或者如果尚不存在合适的,则生成一个新的。gpg
libgpgme
$GNUPGHOME
gpg
gpgme
gpg-agent
--homedir=/opt/myapp/.gnupg
gpg-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-agent
s 都与服务的 cgroup 隔离。当服务停止时,spawned gpg-agent
s将被systemd杀死。
注意:我对上面的段落只是相当确定。我注意到当我gpg-connect-agent
在ExecStartPre=
systemd中测试时发出了一个警告,该警告gpg-agent
仍然存在于 cgroup 中并被杀死。