Gpg

使用特定選項啟動 gpg-agent

  • December 18, 2020

我有一個應用程序,由系統使用者作為服務執行,它使用 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:使用該主目錄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)時自動啟動。通過設置$GNUPGHOMEgpg/gpgme呼叫將連接到現有的gpg-agentwith或在合適的不存在時--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-agentExecStartPre=systemd 中進行測試時,發出了一個警告,該警告gpg-agent仍然存在於 cgroup 中並被殺死。

引用自:https://unix.stackexchange.com/questions/624918