web-dev-qa-db-ja.com

ユーザーとサービスアカウントの違いは何ですか?

ユーザーとサービスアカウントの違いを知りたい。

私はそれを知っていますubuntuにインストールされているJenkinsはユーザーではありません サービスアカウントです

  1. サービスアカウントの使用とは何ですか?
  2. いつ必要ですか?
  3. サービスアカウントを作成するにはどうすればよいですか?
18
Rudziankoŭ

ユーザーアカウントは実際のユーザーによって使用され、サービスアカウントはWebサーバー、メールトランスポートエージェント、データベースなどのシステムサービスによって使用されます。慣例により、そして慣例としてのみ、サービスアカウントは低い範囲のユーザーIDを持っています。 <1000程度。 UID 0を除き、サービスアカウントには特別な権限はありません。サービスアカウントは、特定のリソースを所有している可能性があり、通常は所有していますが、デバイスの特殊ファイルも所有していますが、スーパーユーザーのような特権は持っていません。

サービスアカウントは、通常のユーザーアカウントと同様に作成できます(例:useraddを使用)。ただし、サービスアカウントは通常、サービスソフトウェアのインストール時にパッケージマネージャーによって作成および構成されます。したがって、管理者であっても、サービスアカウントの作成に直接関係することはほとんどありません。

適切な理由:ユーザーアカウントとは対照的に、サービスアカウントには「適切な」ログインシェルがないことがよくあります。つまり、ログインシェルとして/usr/sbin/nologinを持っています(または、昔は/bin/false)。 。さらに、サービスアカウントは通常ロックされています。つまり、ログインできません(従来の/etc/passwdおよび/etc/shadowの場合、これは、パスワードハッシュを*xなどの任意の値に設定することで実現できます。 )。これは、悪用に対するサービスアカウントを強化するためです( 多層防御 )。

各サービスに個別のサービスアカウントを持つことは、2つの主な目的に役立ちます。これは、1つのサービスでのインシデントの場合の影響を減らすためのセキュリティ対策です(compartmentalization) 、どのリソースがどのサービスに属しているかを追跡しやすくなるため、管理が簡単になります。詳細については、関連する質問の this または this 回答を参照してください。

19
countermode

元々、ユーザーはシステムを使用する人間に対応することを意図していたため、名前が付けられました。各プロセスは特定のユーザーとして実行され、各ファイルは特定のユーザーによって所有されます。 rootと呼ばれる特別なユーザーは、特定の人間のユーザー、つまりオペレーティングシステム自体に属していないものに使用されます。 rootはオペレーティングシステム自体に対応しているため、すべての権限を持っています。

すぐに、広範な特権を持たない複数のシステムユーザーを作成すると便利であることがわかりました。これにより、マシン上で実行されるさまざまなサービスを分離して、お互いの足元を踏まないようにすることができます。サービスアカウント(または「システムアカウント」、これらの2つの用語は同義語です)は、システムを使用しているユーザーではなく、システムで実行されているサービスに対応するアカウントです。通常、独自の特権セット(独自のファイル、独自のネットワークポートなど)を持つシステムで実行されている各タスクのサービスアカウントがあります。

人間アカウントとシステム/サービスアカウントの正式な定義はありません。カーネルは気にしません(UID 0のユーザーに多くの特権を与えることを除いて)。ほとんどの管理コマンドはどちらも気にしません。いくつかの典型的な違いは次のとおりです。

  • 人間のユーザーは「John Doe」のような本名を持っていますが、システムユーザーは「Nasal daemon」のような説明的な名前を持っているか、まったくありません。
  • 人間のユーザーは実際のログインシェル(例:/bin/shまたは/bin/bashまたは/bin/csh)を持っています。一部のシステムユーザーはシェル(ほとんどの場合/bin/sh)を持っています。それらがどのように使用されることが意図されているか(例えば、su foofooがシェルを持っている必要があります)。
  • 人間のユーザーはパスワードを持っていることがよくありますが、必ずしもそうとは限りません。たとえば、リモートのみのユーザーはSSHキーしか持っていない場合があります。最近のユニスでは、パスワードは/etc/passwdではなく、/etc/shadowなどの他のファイルにあることに注意してください。
  • 人間のユーザーのホームディレクトリは通常/home(またはサイト固有の場所)の下にありますが、システムユーザーのホームディレクトリは通常/homeの下になく、存在しない可能性があります(ただし、例外があります)。
  • ほとんどのサイトでは、システムユーザーにはユーザーIDの範囲を、人間のユーザーにはばらばらの範囲を指定しています。 100–65533または500–65533または1000–65533の予約は一般的であり、ほとんどのディストリビューションは500または1000からの実際のユーザーIDの割り当てを開始するように設定されています。

複数のマシン間でアカウントが共有されているサイトでは、通常、ユーザーリストを含む中央サーバーがあり、 [〜#〜] nis [〜#〜] または [〜#〜 ] ldap [〜#〜]/etc/nsswitch.confpasswdエントリは、ユーザー情報を検索する場所を指定します。ローカル/etc/passwdのシステムユーザーとネットワーク全体のデータベースの実際のユーザーがいるのは一般的ですが、ネットワーク全体のデータベースにシステムユーザーがいる場合があります(サーバーとデータのレプリケーションを容易にする一貫したUIDを適用するため)。 、およびローカルファイルに人間のユーザーがいる場合があります(ネットワークが接続されている場合でもログインできるようにするため)。

システムユーザーを装った人間がアクセスできるアカウントは、通常、実際の名前はありませんが、ログインシェルと、パスワードセットまたはSSHキーのいずれかがあり、システムIDの範囲内にユーザーIDがあります。実際、実際のシステムアカウントを使用すると、一部のサービスが動作しなくなるため、そのアカウントを使用するほうが偽装する方が適切です。ただし、潜在的な攻撃を検出するための厳格な規則はありません。定義により、攻撃者は規則に従いません。

サービスアカウントとヒューマンアカウントは同じコマンドで管理され、同じファイルに記録されます。アカウント作成コマンドには、人間とサービスユーザーの妥当なデフォルトを設定するオプションがあります。適切な範囲のユーザーIDを選択し、人間のパスワードを要求し、サービスのパスワード認証を無効にします。たとえば、Linuxではadduser vs adduser --systemまたはuseradd vs useradd -r

    1. サービスアカウント、別名テクニカルアカウントは、通常のユーザーではなく、サービス/アプリケーションでのみ使用されるように設計されたアカウントです。
    1. アプリケーションとサービスの開発者は、これらのアカウントに、プロセスをrootとして実行するのではなく、関連するプロセスの権限と特権を制限させたいと考えています。ルートとして実行されるinitsystemdなどで開始されたサービスは、リスクを制限するためにサービスアカウントにすばやくダウングレードします。使用するOSによっては、アプリケーションアカウントに通常のアカウントよりも多くの権限が付与される場合があります。特権のあるTCP=ポート、またはその逆にバインドする権利は、サービスプロセスがfork/execを呼び出すことを拒否するなど、通常のユーザーと比較して特権が減少しています。そのような場合、サービスをサービスアカウントにダウングレードする必要はありません。サービスアカウントで開始できます。
    1. 必要はありませんが、使用可能なパスワードを使用せず、機能しないシェルを使用してアカウントを作成するだけです(例:/bin/false)であり、通常のユーザーは使用できません。つまり、ローカルまたはリモートで(たとえば、sshを介して)アカウント名を使用してログインすることはできません。ほとんどの制限と同様に、rootアカウントまたはSudoを使用すると、それを克服できます。
3
jlliagre

たとえば、サービスアカウントにはシェルを使用する機能がない場合があります。スコープと権限が制限されたサービス(デーモン)を実行するために使用されます。私の意見では、権限とグループメンバーシップに注意するだけで、通常のユーザーとして作成できます。ただし、ほとんどの場合、インストール中にプログラムが自動的に作成するため、作成しません。ご覧ください/etc/passwdroot:x:0:0:root:/root:/bin/bash

0はUIDであり、ユーザースペースでのアカウントの階層を特徴付けます。ルートは全員の上にあり、グループメンバーシップを持っています:rootホームディレクトリ/root最後に、アカウントで使用されるシェル/bin/bashを使用してシステムに「ログイン」します。

ログイン権限を必要としないアカウントには/usr/sbin/nologinを使用できます。

1
Kuruwan