使用特定選項啟動 gpg-agent
我有一個應用程序,由系統使用者作為服務執行,它使用 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:使用該主目錄
gpg-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
應該如何使用特定的命令行選項為特定的主目錄啟動 gpg-agent?
在服務文件中使用
Environment=GNUPGHOME=/opt/myapp/.gnupg
.gpg-agent
在呼叫gpg
(或使用 中的必要功能libgpgme
)時自動啟動。通過設置$GNUPGHOME
,gpg
/gpgme
呼叫將連接到現有的gpg-agent
with或在合適的不存在時--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 隔離。當服務停止時,生成gpg-agent
的 s 將被 systemd 殺死。注意:我只是合理地確定上面的段落。我注意到,當我
gpg-connect-agent
在ExecStartPre=
systemd 中進行測試時,發出了一個警告,該警告gpg-agent
仍然存在於 cgroup 中並被殺死。