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/install
root権限で実行されます(したがって、ソースファイルへの読み取りアクセス権を持ちます)。その後、それを%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
資格情報ファイルを暗号化したい場合にも使用できます。