回答:
ユーザーアカウントは実際のユーザーによって使用され、サービスアカウントはWebサーバー、メールトランスポートエージェント、データベースなどのシステムサービスによって使用されます。 。UID 0を除き、サービスアカウントには特別な特権はありません。サービスアカウントは、特定のリソースを所有する場合があり、通常は所有しますが、デバイススペシャルファイルも所有できますが、スーパーユーザーのような権限はありません。
サービスアカウントは、通常のユーザーアカウントと同様に作成できます(例:を使用useradd
)。ただし、サービスアカウントは通常、サービスソフトウェアのインストール時にパッケージマネージャーによって作成および構成されます。そのため、管理者であっても、サービスアカウントの作成に直接関係することはほとんどありません。
正当な理由:ユーザーアカウントとは対照的に、サービスアカウントには多くの場合、「適切な」ログインシェルがありません。つまり、/usr/sbin/nologin
ログインシェルとして使用されます(または、昔のように/bin/false
)。さらに、サービスアカウントは通常ロックされています。つまり、ログインすることはできません(従来の方法/etc/passwd
で/etc/shadow
は、パスワードハッシュを*
やなどの任意の値に設定することで実現できますx
)。これは、悪用に対するサービスアカウントを強化することです(多層防御)。
各サービスに個別のサービスアカウントを持つことは、主に2つの目的に役立ちます。1つのサービスでのインシデント(コンパートメント化)の影響を軽減するセキュリティ対策であり、どのリソースがどのサービスに属しているかを追跡しやすくなるため、管理が簡素化されます。参照してください。このまたはこれ以上の詳細については、関連の質問に答えを。
もともと、ユーザーはシステムを使用している人間に対応することを目的としていたため、名前が付けられました。各プロセスは特定のユーザーとして実行され、各ファイルは特定のユーザーによって所有されます。rootと呼ばれる特別なユーザーは、特定の人間のユーザー、つまりオペレーティングシステム自体に属さないものに使用されます。ルートはオペレーティングシステム自体に対応しているため、すべての権限があります。
すぐに人々は、広範な権限なしで複数のシステムユーザーを作成することが便利であることに気付きました。これにより、マシン上で実行されるさまざまなサービスを分離できるので、お互いの足指を踏む必要がありません。サービスアカウント(または「システムアカウント」、これら2つの用語は同義語)は、システムを使用している人ではなく、システムで実行されているサービスに対応するものです。通常、独自の特権セット(独自のファイル、独自のネットワークポートなど)を持つシステムで実行されている各タスクのサービスアカウントがあります。
人間とシステム/サービスアカウントの正式な定義はありません。カーネルは気にしません(UID 0を持つユーザーに多くの特権を付与する以外は)。ほとんどの管理コマンドも気にしません。典型的な違いは次のとおりです。
/bin/sh
か、/bin/bash
または/bin/csh
一部のシステム・ユーザーは、(ほとんど常にシェルを持っている/bin/sh
など(それらが使用されることを意図されている方法に応じて、他の人にはない、)su foo
が必要ですfoo
)シェルを持っています。/etc/passwd
などの他のファイルにあることに注意してください/etc/shadow
。/home
(またはサイト固有の場所)の下に/home
ありますが、システムユーザーのホームディレクトリは通常下になく、存在しない可能性があります(ただし、例外があります)。アカウントが複数のマシン間で共有されるサイトでは、通常、NISまたはLDAPを介してアクセス可能なユーザーリストを含む中央サーバーがあります。のpasswd
エントリは、/etc/nsswitch.conf
ユーザー情報の検索場所を指定します。/etc/passwd
ネットワーク全体のデータベースのローカルユーザーと実際のユーザーにシステムユーザーがいるのが一般的ですが、ネットワーク全体のデータベースにシステムユーザーが存在することもあります(サーバーとデータの複製を容易にする一貫したUIDを強制するため)。ローカルファイル内の人間のユーザー(ネットワークがホース接続されている場合でもログインできるようにするため)。
システムユーザーを装った人間がアクセス可能なアカウントは、通常、本名ではなく、ログインシェル、パスワードセットまたはSSHキーを持ち、システム範囲内のユーザーIDを持ちます。実際、削除すると一部のサービスが動作しなくなる実際のシステムアカウントを使用する方が良いでしょう。ただし、潜在的な攻撃を検出するための厳格なルールはありません。定義により、攻撃者はルールに従いません。
サービスアカウントとヒューマンアカウントは同じコマンドで管理され、同じファイルに記録されます。アカウント作成コマンドには、適切な範囲のユーザーIDを選択したり、人間のパスワードを求めたり、サービスのパスワード認証を無効にしたりするなど、人間とサービスのユーザーに適切なデフォルトを設定するオプションがあります。たとえば、adduser
vs adduser --system
またはuseradd
vs useradd -r
on Linux。
init
、systemd
または同様のサービスは、rootとして実行され、サービスアカウントにすばやくダウングレードしてリスクを制限します。使用するOSによっては、アプリケーションアカウントに通常のアカウントよりも多くの特権が与えられる場合があります。たとえば、特権TCPポートにバインドする権利、または反対に、サービスプロセスを拒否するなど、通常のユーザーと比較して特権を減らす場合fork
/を呼び出しますexec
。そのような場合、サービスをサービスアカウントにダウングレードする必要はなく、それを使用して開始できます。/bin/false
)を持たないアカウントを作成するだけで、通常のユーザーは使用できません。つまり、ローカルまたはリモートでログインする方法はありません(例thru ssh
)アカウント名を使用します。ほとんどの制限と同様に、rootアカウントを使用するかsudo
、それを克服できます。たとえば、サービスアカウントにはシェルを使用する機能がない場合があります。制限されたスコープと特権でサービス(デーモン)を実行するために使用されます。私の意見では、権利とグループメンバーシップに注意するだけで、通常のユーザーとして作成できると考えています。ただし、ほとんどの場合、インストール中にプログラムが自動的に作成するため、そうしません。見てみましょう/etc/passwd
root:x:0:0:root:/root:/bin/bash
0はUIDであり、ユーザー空間のアカウントの階層を特徴づけます。ルートはすべてのユーザーより上にあり、グループメンバーシップ:root
はホームディレクトリ、/root
最終的にはアカウント/bin/bash
がシステムに「ログイン」するために使用するシェルです。
/usr/sbin/nologin
ログイン特権が不要なアカウントに使用できます。