GNU/Linux >> Linux の 問題 >  >> Linux

LinuxのUIDについて知っておくべき重要なことすべて

LinuxのUIDとは何ですか?

UIDはユーザー識別子を表します。 UIDは、各Linuxユーザーに割り当てられた番号です。これは、Linuxカーネルでのユーザーの表現です。 UIDは、システム内のユーザーを識別し、ユーザーがアクセスできるシステムリソースを決定するために使用されます。これが、ユーザーIDが一意である必要がある理由です。

/ etc/passwdファイルに保存されているUIDを見つけることができます。これは、Linuxシステムのすべてのユーザーを一覧表示するために使用できるのと同じファイルです。

Linuxコマンドを使用してテキストファイルを表示すると、システムに存在するユーザーに関するさまざまな情報が表示されます。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin

ここでの3番目のフィールドは、ユーザーIDまたはUIDを表します。

ほとんどのLinuxディストリビューションでは、UID1-500は通常システムユーザー用に予約されていることに注意してください。 UbuntuとFedoraでは、新規ユーザーのUIDは1000から始まります。

たとえば、adduserまたはuseraddコマンドを使用して新しいユーザーを作成すると、そのUIDとして1000の次に使用可能な番号が取得されます。

Linuxでは、UID0とGID0はrootユーザー用に予約されています。

LinuxでユーザーのUIDを見つける方法

ユーザーのUIDを取得するには、いつでも/ etc/passwdファイルに依存できます。 LinuxでUID情報を取得する方法はこれだけではありません。

Linuxのidコマンドは、現在のユーザーが属するUID、GID、およびグループを表示します。

id
uid=1000(abhishek) gid=1000(abhishek) groups=1000(abhishek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),127(kvm)

idコマンドでユーザー名を指定して、任意のLinuxユーザーのUIDを取得することもできます。

id standard
uid=1001(standard) gid=1001(standard) groups=1001(standard)

LinuxでユーザーのUIDを変更するにはどうすればよいですか?

Linuxシステムに複数のユーザーがいるとします。ユーザーが組織を離れたため、ユーザーを削除する必要がありました。ここで、そのUIDをすでにシステム上にいる別のユーザーが取得できるようにします。

次のようにusermodコマンドを使用してユーザーを変更することにより、UIDを変更できます。

usermod -u 1004 user_2

上記のコマンドを実行するには、スーパーユーザー権限が必要です。

Linuxでのファイルのパーミッションと所有権の概念を覚えていますか?ファイルの所有権は、所有者ユーザーのUIDによって決定されます。

ユーザーのUIDを更新すると、このユーザーが所有するファイルはどうなりますか?user_2のホームディレクトリ内のすべてのファイルに関連付けられたUIDが変更されますが、外部の他のファイルの関連付けられたUIDを手動で更新する必要がありますホームディレクトリ。

できることは、user_2の古いUIDに関連付けられているファイルの所有権を手動で更新することです。

find / -user old_uid_of_user_2 -exec chown -h user_2 {} \;

UIDはどのようにさまざまなシステムリソースに関連付けられますか? [上級ユーザー向け]

UIDは互いに一意であるため、ファイルやプロセスなどのさまざまなシステムリソースの所有権を識別するためにも使用できます。

UIDとファイル

Linuxでのファイルパーミッションの概念に精通していることを願っています。ファイルを作成するときは、あなたがこのファイルの所有者です。これで、このファイルで誰が何をするかを決めることができます。これはLinuxのDACメカニズムの一部であり、各ファイルは所有者の裁量に委ねられています。

lsまたはstatコマンドを使用して、ファイルの所有権を読み取ることができます。人気のあるlsコマンドでそれを実行し、バイナリのsleepの所有権を確認しましょう。 またはpasswd

ご覧のとおり、ファイル/ usr / bin / sleepはrootに属しています:

ls -l $(which sleep)
-rwxr-xr-x 1 root root 39048 Mar  6  2020 /usr/bin/sleep

所有権をユーザー名ではなくUIDでマップするように強制しましょう:

ls -lhn $(which sleep)
-rwxr-xr-x 1 0 0 39K Mar  6  2020 /usr/bin/sleep

ここに楽しい情報があります。お使いのオペレーティングシステムは「ユーザー名」を理解していません。プログラムがユーザー名を操作する必要がある場合、またはそのようなユーザー名を印刷する必要がある場合は常に、/etc/passwdを参照します。 情報を抽出するためのファイル。

私の言葉を信じる必要はありません。プログラムによって行われたすべてのシステムコールを出力するstraceプログラムでそれを自分で確認してください。

strace ls -lhn $(which sleep) 2>&1 | grep passwd

あなたが見ようとしているのは、lsかどうかです コマンドが/etc/passwdを読み取ろうとしています ファイルかどうか。

strace ls -lh $(which sleep) 2>&1 | grep passwd
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6

これまでのところ、とても良いです。

UIDとプロセス

プロセスには、ファイルと同じように所有者もいます。プロセスの所有者(またはrootユーザー)のみがプロセスシグナルをプロセスに送信できます。ここでUIDが機能します。

通常のユーザーが別のユーザーが所有するプロセスを強制終了しようとすると、エラーが発生します:

kill 3708
bash: kill: (3708) - Operation not permitted

プロセスの所有者またはルートのみがこれを実行できます。

プロセスを規制する必要があります。のように規制されているため、プロセスで実行できる量を制限または知る方法が必要です。これは、そのUIDによって決定されます。

プロセスに関連付けられているUIDには3つのタイプがあります。

  1. 実際のUID :実UIDは、プロセスがその親から採用するUIDです。簡単に言うと、プロセスを開始する人は誰でも、そのユーザーのUIDがプロセスの実際のUIDです。これは、プロセスが実際に誰に属しているかを識別するのに役立ちます。これは、有効なUIDが次に説明する実際のUIDと同じでない場合に特に重要です。
  2. 有効なUID :これが主に 特定のプロセスが実際に持つ権限を決定します。ユーザーはプロセスを開始できますが、別のユーザーが使用できる権限で実行できます。コマンドpasswd この一例です。このプログラムは、ファイル/etc/shadowを編集します 、これはroot 所有。したがって、通常のユーザーはこのコマンドを実行したり、パスワードを変更したりすることはできません。幸い、バイナリは有効なUIDが0(つまり、ルート)で実行されるため、/etc/shadowを編集するのに十分な権限を持つことができます。 ファイル。実際のUIDと有効なUIDは、SUIDビットが有効なバイナリの場合を除いてほとんど同じです。
  3. 保存されたUID :プロセスが自由に使用できるUID。これは通常は使用されませんが、プロセスが特権作業を実行しないことがわかっている場合に備えて存在するため、有効なUIDを非特権のものに変更できます。これにより、意図しない不正行為の表面が減少します。

それでおしまい。 LinuxのUIDについて今より良いアイデアを持っていることを願っています。質問がある場合は、遠慮なく質問してください。

Linuxのプロユーザーとして、UIDに関する重要な概念を見逃したと思われる場合は、コメントセクションでお知らせください。


Linux
  1. Ubuntu13.04について知っておくべきことすべて

  2. SteamOSとは何ですか?この「ゲーム配信」について知っておくべき重要なことすべて

  3. Linux tmpディレクトリ:知っておくべきことすべて

  1. Linuxファイル圧縮:知っておくべきことすべて

  2. Linuxファイルのパーミッション:知っておくべきことすべて

  3. LinuxのSwappiness:知っておくべきことすべて

  1. Linuxファイルシステムについて知っておくべきことすべて

  2. LinuxChmodコマンドについて知っておくべきことすべて

  3. Linuxコンテナー(LXC)について知っておくべきことすべて