Ubuntu 12.04デスクトップシステムを実行しています。これまでのところ、一部のプログラムのみをインストールしています(Sudo権限があります)。
システム上のユーザーのリストを確認すると、20ユーザーを超えるような長いリストが表示されます。これらのユーザーが作成されたのはいつですか(デーモン、sys、同期、ゲーム、Pulseなど)?これらは、インストールされる新しいプログラムとどのように関連していますか?
私のシステムでプログラムを実行すると、私のUIDで実行されるはずです。しかし ps を実行すると、異なるUIDで実行されている他の多くのプログラム(root、daemon、avahi、syslog、coloredなど)が表示されます。これらのプログラムはどのように異なるUIDで開始されましたか?
ユーザーアカウントは、実際の人間のユーザーだけでなく、システムサービスの実行や、場合によってはシステムファイルの所有者としても使用されます。これは、人間のユーザーのリソース(プロセス、ファイルなど)間の分離とシステムサービスのリソース間の分離が、内部で同じメカニズムを必要とするために行われます。
通常実行するプログラムは、ユーザーIDで実行されます。自分のアカウントで実行されるのは、システム daemons だけです。デーモンをいつ実行するかを示す構成ファイルは、デーモンを実行する必要があるユーザーも示すか、デーモンは起動後に非特権アカウントに切り替えます。一部のデーモンは完全な管理者権限を必要とするため、 root アカウントで実行されます。多くのデーモンは、特定のハードウェアデバイスまたは特定のファイルへのアクセスのみを必要とするため、専用のユーザーアカウントで実行されます。これはセキュリティのために行われます。そのため、これらのサービスの1つにバグや設定ミスがあっても、攻撃者はこのサービスで実行できることだけに制限されるため、システム全体を攻撃することはできません。ファイルの上書き、プロセスのスパイなどが可能.
Ubuntuでは、0〜99の範囲のユーザーIDがシステムのインストール時に作成されます。 0はルートです。 1〜99の範囲にあるものの多くは、歴史的な理由でのみ存在し、それらを使用する一部のローカルインストールとの下位互換性のためにのみ保持されます(いくつかの追加のエントリは問題ありません)。専用のユーザーIDを必要とするサービスがインストールまたは削除されると、100〜999の範囲のユーザーIDが動的に作成および削除されます。 1000以降の範囲は、人間のユーザー、またはシステム管理者が作成したその他のアカウント用です。グループについても同じことが言えます。
/etc/passwd
をチェックして、このユーザーのリストを見つけていると思います。これは完全に正常です-「ユーザー」は一連の権限を持ち、「実際のユーザー」だけでなくプログラムをシステムの特定の領域にロックして、変更内容を追跡するのに役立ちます(グループと同じ概念)。
参考のために、以下のRaspberry Pi /etc/passwd
ファイルの1つを挿入しました。このファイルの下部に、プログラムntop
(ネットワークモニタリング)によって作成されたユーザーntop
が表示されます。同様に、sshd
、gnats
バグ報告など。
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false
これらのユーザーはいつ作成されましたか?
あなたが言及したものの場合、それらはシステムのインストール時に作成されました。これらのユーザーアカウントは従来のものであり、数十年前のものもあります。それらも標準化されています。 Linux Standard Baseはそれらを次のように分割します。
root
、bin
、およびdaemon
;そしてadm
、lp
、sync
、shutdown
、halt
、mail
、news
、uucp
、operator
、man
、nobody
ここで言及されている他のユーザーアカウント— Pulse
、avahi
、colord
、およびDebian-exim
(py4onのパスワードファイルから1つを選択する)—次のユーザーアカウントを作成します質問。
これらは、インストールされる新しいプログラムとどのように関連していますか?
非標準のユーザーアカウントは、さまざまなパッケージの「メンテナスクリプト」によって、それらのパッケージがインストールおよびパージされるときに作成および破棄されます。ユーザーアカウントは、パッケージのいわゆるpostinst
メンテナースクリプトによって作成されます。このスクリプトは、getent
を実行してユーザーアカウントが既に存在するかどうかを確認し、存在しない場合はuseradd
を実行します。理論的には、postrm
を実行するパッケージのいわゆるuserdel
メンテナースクリプトによって削除されます。
実際には、パッケージのユーザーアカウントは削除されません。 Fedora wiki(q.v.)は、これには困難が伴うと説明しています。この根拠の実際の例については Debianバグ#646175 を参照してください。この場合、rabbitmq
ユーザーアカウントを削除することはだけではありませんパッケージがパージされたときに、そのアカウントのAegisで実行され続けるデーモンの問題を解決します。
これらのプログラムはどのようにして異なるUIDで開始されましたか?
UnixおよびLinuxでは、スーパーユーザーのAegisの下で実行されているプロセスは、ユーザーアカウントを別のアカウントに変更して同じプログラムを実行し続けることができますが、その逆は許可されません。 (set-UIDメカニズムを使用する必要があります。)
デーモン管理システムはスーパーユーザーとして実行されます。その構成データは、特定のデーモンが特定のユーザーアカウントの管理下で実行されることを指定しています。
rc
/etc/init.d
のスクリプトはstart-stop-daemon
とその--chuid
オプションなどのヘルパーツールを使用します。run
スクリプトはsetuidgid
、s6-setuidgid
、chpst
、またはrunuid
をユーザーアカウント名で呼び出します。 https://unix.stackexchange.com/a/179798/5132 にこの例があり、nagios
ユーザーアカウントを設定しています。setuid
スタンザがジョブファイルにあります。これは特に細かい設定ではなく、 https://superuser.com/a/723333/38062 で説明されているものが必要になる場合があります。User=
設定があり、ユーザーアカウントを指定します。デーモン管理システムがデーモンになるプロセスを生成すると、これらのメカニズムはスーパーユーザー特権を削除し、デーモンプロセスが非特権ユーザーアカウントのAegisで引き続き実行されるようにします。
かなり長い説明がありますなぜ優れたデーモン管理がこのように行われるのですか?しかし、理由を尋ねませんでした。いつ、どのように、いつでも。 thereforeしたがって、非常に簡単な説明:
UnixおよびLinuxオペレーティングシステムは、異なるユーザーアカウントのエージで実行されているプロセスを互いに隔離します。歴史的に、スーパーユーザーとして実行されていたデーモンを引き継ぐことができれば、好きなことは何でもできます。一方、非特権アカウントのAegisの下で実行されるデーモンは、その非特権アカウントがアクセスできるファイル、ディレクトリ、デバイス、およびプロセスにのみアクセスできます。 相互に信頼できないデーモンプログラムのシステムはすべて、異なるユーザーアカウントのエージで実行され、相互の(内部、信頼された)ファイル/ディレクトリ/プロセス/デバイスにアクセス/制御できないため、 、クラックするのははるかに難しいです。
Linuxでは、サービスをインストールすると、サービス名またはそれに類似した名前のユーザーが作成され、他のファイルにアクセスできなくなります。