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