root権限なしでプロセスを実行するには、DynamicUser =を使用するか、systemdでUser =を持つ静的ユーザーを使用できます。 DynamicUserの詳細な説明は、次のブログ記事にあります。http://0pointer.net/blog/dynamic-users-with-systemd.html
しかし、どちらがより安全ですか? DynamicUserが動的ユーザーを使用し、ユーザーがシステムユーザーを必要とすることに加えて、DynamicUserとUserの正確な違いは何ですか?
ベストアンサー1
DynamicUser
より安全な理由は次のとおりです。
ProtectSystem=strict
/dev/
:APIファイルシステムサブツリーを/proc/
除いて、ファイルシステム階層全体は読み取り専用としてマウントされます/sys/
。ProtectHome=read-only
:ディレクトリ/home/
とこのユニットを呼び出すプロセスは読み取り専用に設定されています/root
。/run/user
PrivateTmp=yes
:実行中のプロセスの新しいファイルシステム名前空間を設定し、名前空間外のプロセスで共有されていないプライベートディレクトリ/tmp/
とディレクトリをマウントします。/var/tmp/
これは一時ファイル処理へのアクセスを保護するのに役立ちますが、プロセス間の共有は/tmp/
不可能です/var/tmp/
。この機能を有効にすると、サービスが停止した後、そのディレクトリからサービスによって生成されたすべての一時ファイルが削除されます。RemoveIPC=yes
:デバイスのユーザーおよびグループプロセスが所有するすべてのSystem VおよびPOSIX IPCオブジェクトは、デバイスが停止したときに削除されたかのように実行されます。
これらの設定を使用するときは、明示的に設定してこれらの設定を模倣することで、効果User=
的に同じ保護を得ることができます。
より良いアプローチDynamicUser=
は、サービスインスタンスを作成することです。あなたfoo.socket
がどんな用途にも使用すると仮定してくださいAccept=yes
。この場合、誰かがソケットに接続するたびにfoo@%i.service
新しいソケットが作成されます。各インスタンスには、DynamicUser=
使用されると/tmp
共有される独自の名前空間とディレクトリがあります。User=