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の場合:そのhomedirを使用して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
答え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は、ホームディレクトリの..nupgの設定ファイルを自動的に合理的かつ安全に照会および変更できるユーティリティです。ユーザーが手動で呼び出さないように設計されています..."
実際に設定する必要があるのは、その項目が存在し含まれていることを 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によって終了します。
注:私は上記の段落についてのみ確信しています。私はsystemdgpg-connect-agent
でテストしたときにcgroupにまだ存在し、終了したExecStartPre=
警告が発生したことがわかりました。gpg-agent