如何gpg-agent --no-allow-external-cache --default-cache-ttl 10 --max-cache-ttl 20
在shell脚本中设置?在我发出命令后,它给出了gpg-agent[4869]: gpg-agent running and available
但缓存 ttl 值没有更改。我通过gpgconf --list-options gpg-agent | grep cache
并实际执行了 --decrypt 来验证它,密钥在 30 秒后仍然被缓存。
我知道网络资源建议更改文件中的这些配置~/.gnupg/gpg-agent.conf
。我不确定为什么我没有该文件。即使我是 root,我也无法打开vi /root/S.gpg-agent
文件。无论如何,我不喜欢更改配置文件中的这些设置。我更喜欢为不同的 --decrypt 设置不同的缓存 TTL。所以它必须从 shell 脚本发出。
# ls -al /root/.gnupg/
total 36
drwx------ 3 root root 4096 Jun 2 05:51 .
drwx------ 14 root root 4096 Jun 2 14:18 ..
-rw-r--r-- 1 root root 24 Jun 2 03:28 .#lk0x00005558d8861f30.gentoo_bazic.26472
-rw-r--r-- 1 root root 24 Jun 2 04:16 .#lk0x0000556c15e3ef30.gentoo_bazic.7432
-rw-r--r-- 1 root root 24 Jun 1 20:45 .#lk0x00005576e9d54f30.gentoo_bazic.29752
drwx------ 2 root root 4096 Jun 1 02:43 private-keys-v1.d
-rw------- 1 root root 32 Jun 1 02:43 pubring.kbx
-rw------- 1 root root 600 Jun 2 05:20 random_seed
srwx------ 1 root root 0 Jun 2 05:51 S.gpg-agent
srwx------ 1 root root 0 Jun 2 05:51 S.gpg-agent.browser
srwx------ 1 root root 0 Jun 2 05:51 S.gpg-agent.extra
srwx------ 1 root root 0 Jun 2 05:51 S.gpg-agent.ssh
-rw------- 1 root root 1200 Jun 2 03:19 trustdb.gpg
PS我知道可以通过 清除缓存echo RELOADAGENT | gpg-connect-agent
。但这是不太理想的。
参考
https://www.gnupg.org/documentation/manuals/gnupg/Agent-Options.html
https://www.gnu.org/software/emacs/manual/html_node/pgg/Caching-passphrase.html
答案1
代理启动参数
gpg-agent[4869]: gpg-agent running and available
我假设代理在启动后立即退出,进程 4869 的生命周期约为 1 秒。您的测试gpgconf --list-options gpg-agent
可能确实连接到已经以其默认配置运行的代理。
一般而言,gpg-agent 似乎并未设计为在运行时更改其配置,至少在不清除缓存的情况下(这不是一个选项)。
配置文件
您没有该文件,~/.gnupg/gpg-agent.conf
因为默认情况下不会创建它。
这vi /root/S.gpg-agent
可能是一个错字,本来应该是vi /root/.gnupg/S.gpg-agent
。您无法编辑,S.gpg-agent
因为它是套接字,而不是常规文件。
管理多个配置文件
您不想更改配置文件中的这些设置,因为您希望每个--decrypt
.根据密钥的数量或用例的复杂性,您可能可以选择使用不同的 GPG 主目录。
如果您管理/root/gnupg-home-1/
和/root/gnupg-home-2/
,每个目录都可以有自己的gpg-agent.conf
目录,每个目录都有不同的缓存 TTL 值。命令
gpg --homedir /root/gnupg-home-1/ --decrypt ...
gpg --homedir /root/gnupg-home-2/ --decrypt ...
将触发不同代理实例的启动,每个代理实例都有自己的配置。
测试/验证
您可以使用 验证结果(就像之前一样)gpgconf
,您只需要添加--homedir
参数:
gpgconf --homedir /root/gnupg-home-1/ --list-options gpg-agent |grep cache
gpgconf --homedir /root/gnupg-home-2/ --list-options gpg-agent |grep cache
访问限制
如果 root 的 umask 已不阻止访问组和其他目录,则应使用mkdir --mode=700 <directoryname>
.
清理
使用后需要杀死药剂吗?
从安全角度来看,如果缓存实现正确并且配置的 TTL 相当短,则没有必要这样做。
从系统维护的角度来看,在正常运行时间可能较长的服务器上,最好在不再需要代理进程时终止它们。否则,未使用的代理进程数量可能会增加太多。
从软件状态的角度来看,删除目录并保留代理进程是不一致的。在我的测试中(gpg-agent版本2.2.35),代理进程在删除目录后自动消失。但我在手册页中找不到任何有关此内容的信息,所以我不知道为什么会发生这种情况以及这有多可靠。
根据用例以及脚本的实现方式,如果代理进程在目录被删除后仍然存在,则可能存在意外重用旧配置的风险。可以通过使用唯一的目录名称(例如使用uuidgen
)来避免此类错误。