/etc/passwd からアカウントを「隠す」ことは可能ですか?

/etc/passwd からアカウントを「隠す」ことは可能ですか?

一般的な Linux システムには、システムの実際のユーザーのアカウントだけでなく、さまざまなシステム アカウントもあります。

/etc/passwdデーモンのようなファイル、またはアカウントを定義できる他の手段のリソースはありますか?

アカウントをサービスアカウントとして偽装することが可能だと聞いたので、コンピューター内でこのようなアカウントを見つけようとしています。

答え1

デーモン ユーザーと実ユーザーは同じファイルにリストされます。「/etc/passwdデーモン用の のようなファイル」は です/etc/passwd

人間とシステム ユーザーに関する正式な定義はありません。カーネルは気にしません (UID 0 のユーザーに多くの権限を付与する以外は)。ほとんどの管理コマンドも気にしません。一般的な違いは次のとおりです。

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

複数のマシンでアカウントを共有するサイトでは、通常、ユーザーリストを含む中央サーバーがあり、国家情報院またはLDAP のpasswdのエントリ/etc/nsswitch.confユーザー情報を検索する場所を指定します。ローカルにシステム ユーザーが存在し/etc/passwd、ネットワーク全体のデータベースから実際のユーザーが存在するのが一般的ですが、ネットワーク全体のデータベースにシステム ユーザーが存在する場合 (UID の一貫性を強制し、サーバーとデータのレプリケーションを容易にするため)、ローカル ファイルに人間のユーザーが存在する場合もあります (ネットワークがダウンしている場合でもログインできるようにするため)。

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

答え2

別々のユーザー定義ファイルを用意する必要はありません。システム ユーザーと実際のユーザーは技術的に区別されているのではなく、UID が取得される範囲によって組織的に区別されています。ファイルを確認してください/etc/login.defs。私の openSUSE には次のエントリがあります。

SYSTEM_UID_MIN            100
SYSTEM_UID_MAX            499
UID_MIN                  1000
UID_MAX                 60000

ディストリビューション ツールは、これらの値を使用して 2 つのグループを区別します。ただし、UID 300 のユーザー アカウントを作成した場合、ログイン メニューには表示されない可能性がありますが、他のアカウントと同様にそのアカウントを使用できます。

答え3

本当にユーザー アカウントとシステム アカウントを分割したい場合 (他の投稿のコメントをいくつか読むと、この点について興味があるようです)、すべてのシステム ユーザーをfiles(つまり /etc/passwd) データベースに残し、ユーザーを 2 番目のデータベース (ldap を実行している場合のように) に配置することができます。

このためには、Berkeley DB NSS モジュール (と呼ばれる追加の glibc パッケージを通じて多くのシステムで利用可能) を使用できますnss_db。使用している OS が何であるかはわかりませんが、次のサイトには Linux に関するいくつかの情報が掲載されています。http://www.linuxfromscratch.org/hints/downloads/files/nss_db.txt

ドキュメントがそれほど豊富ではないので、気の弱い人向けではありませんが、この種のものがどのように機能するかを詳しく知りたい場合は、試してみると楽しいかもしれません (@Hauke Laging による独自の実装に関する提案も素晴らしいです)。

答え4

ほとんどのデーモンはルートとして実行され、少数のデーモンは (セキュリティ上の理由から、デーモンの危害の可能性を制限するため) 独自のユーザーとして実行されます。それらはファイルにリストされています/etc/passwd。ほとんどのディストリビューションは、「システム ユーザー」の UID を 500 や 1000 などの値に制限しているので、それが手がかりになります。一部のデーモンには「デーモン」という GECOS (ユーザー記述) エントリがあり、その他のデーモンには奇妙なシェルがあります。ただし、NFS やその他の用途のためのファントム ユーザーも存在します。

関連情報