systemdで動的ユーザーを使用して秘密ファイルに対する正しい権限

systemdで動的ユーザーを使用して秘密ファイルに対する正しい権限

systemdサービスから読み取ることができる秘密ファイルがあります。DynamicUser=Trueこのサービスを使用していて、ConfigurationDirectory=fooその中に秘密のファイルを入れたが、/etc/foo/rootユーザーがそのファイルを所有している場合、サービスはそのファイルにアクセスできません。ファイルに0644権限を付与しなければ機能しません。これは少しゴミのように見えます。実際、私はサービスとルートだけがファイルにアクセスできるようにしたいと思います。これを行う方法はありますか?

答え1

私はあなたが使用できると確信しています:

ExecStartPre=+/usr/bin/install --owner=%u --mode=600 -T /etc/foo/secrets %T/secrets

+infontプレフィックスを付けると、/usr/bin/installroot権限で実行されます(したがって、ソースファイルへの読み取りアクセス権を持ちます)。その後、それを%T個人的にインストールされた一時ディレクトリにコピーし、所有者を%u動的ユーザー名に設定しました。同じファイルを使用する複数のサービスインスタンスがある場合は、コピーを使用していくつかの並行性の問題を解決することもできます。

答え2

〜のようにジョシュアR.スミス使えると指摘しました。資格情報の読み込み。構成内のファイルをにコピーし、/run/credentials/example.service/権限を500に設定し、ユーザーをexample:root

例は次のとおりです。

[Service]
...
LoadCredential=config.json:/usr/local/etc/example/config.json
ExecStart=/usr/local/bin/example --config ${CREDENTIALS_DIRECTORY}/config.json

LoadCredentialEncrypted資格情報ファイルを暗号化したい場合にも使用できます。

関連情報