システムユーザー= --userを使う

システムユーザー= --userを使う

User=someuserこれをデバイス構成で指定するものとサービスとして実行することのユースケースは何ですか?サービスでこれを指定することは意味がありますか--userUser=--user

答え1

User=someuserシステムサービスは、rootユーザーとして起動されないシステムサービスを定義します。システムサービスはユーザーログインとは無関係に実行されます。システムにログインしている人がいなくても引き続き実行されます。可能な限り、専用サービスアカウントでサービスを実行するのは安全ですが、時にはサービスをrootとして起動する必要があり、サービスアカウントのTCPまたはUDPポートを開くなど、通常はrootアクセスを必要とするいくつかの初期操作を実行した後、できます。ポート番号は1024未満です。

--userログインしたユーザーのサービスを開始します。デフォルトの前提は、そのサービスを所有するユーザーがシステムの最後の残りのセッションからログオフすると、すべてのユーザーサービスが停止することです。ただし、システム管理者はログアウト後もユーザープロセスが続行することを許可できます。一部のディストリビューションでは、Unix / Linuxシステムは、ログアウト時にユーザープロセスをインポートするのに厳密ではなく、ユーザーが特定のタスクを実行せずにログアウト時にバックグラウンドプロセスを実行できることを期待できるため、デフォルトでこれを許可しますsystemd

(一方、マルチユーザーシステムの管理者は、伝統的に、例えばラップトップユーザーが実際にログアウトせずにラップトップカバーを閉じて席を離れた場合、レガシーユーザープロセスをクリーンアップするためにさまざまなソリューションを実装する必要がありました。)必要に応じて正確にシャットダウンすることができますが、その結果、システム管理者はsystemd自動セッションクリーンアップが必要かどうか、および時期にポリシーを決定する必要があります。)

同じユーザーが同時に複数のセッションにログインする場合、--userサービスのコピーは1つだけ実行されます。したがって--user、サービスは実際にはユーザーの特定のセッションに関連付けられておらず、ユーザー自身にのみ接続されます。

セッションが属するログインユーザー以外のユーザーでサービスを実行することは、--user非常に限られた状況でのみ役に立つと思います。サービスへのアクセスを特定の共有アカウントに制限する必要がある場合は、通常、そのサービスをシステムサービスにするのが最善だと思います。必要に応じてアクセス権があります。アカウントを共有する他のユーザーが提供します。

答え2

問題は、どの systemd インスタンスがサービスを実行しており、誰がそのサービスでコマンドを実行する必要があるかです。

ユーザーがログインするとサービスが開始されますが、joeコマンド自体は通常のアカウントで実行されることをお勧めしますshared_account。この場合、サービスはユーザーインスタンスで実行されますが、joeコマンドへのアクセスはに制限される可能性がありますshared_account

一般的に言えば、サービスインスタンスを所有する人とサービスでコマンドを実行する UID--userの違いは次のとおりです。指定しない場合、User=デフォルトUser=は systemd インスタンスの所有者です。

関連情報