所有者/ルートとRUID / EUIDの違い


24

私は質問で言及された概念に比較的新しく、異なるソースからそれらについて読むことはそれらをより混乱させるだけです。これは私がこれまでのところ理解したことです:

ファイルのアクセス許可が与えられると、次のようになります。

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

user2グループ内のユーザーがusers実行しようとすると仮定しますfile.bin。setuidビットが設定されていない場合、これはRUIDとEUIDの両方file.binがUIDと等しいことを意味しuser2ます。ただし、setuidビットが設定されているため、これはRUIDがのUIDと等しいことを意味しますが、EUIDはuser2ファイルの所有者のUIDですuser1

私の質問は:

  1. ファイルの所有者との違いは何rootですか?root所有者と同じ権限を持っていますか?または、アクセス許可リストに別のエントリが必要rootですか?
  2. RUIDとEUIDの違いは?
    • 私が理解しているように、RUIDとEUIDはプロセスにのみ適用されます。その場合、なぜユーザーIDの値があるのですか?
    • RUIDがプロセスを作成するユーザーであり、EUIDが現在プロセスを実行しているユーザーである場合、この質問の最初の回答の最初の文は意味がありません。
    • setuidビットの機能を正しく理解しましたか?

回答:


35

答えは次のとおりです。

  1. root常にファイルとディレクトリへのフルアクセスがあります。通常、ファイルの所有者にもファイルがありますが、これは常に正しいとは限りません。例えば:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1ある所有者は、しかし、彼らは唯一の可能読み実行が、rootまだフルアクセス(持ってrwxのファイルにします)。

  2. RUIDは実ユーザーIDであり、(ほとんど)変更されません。場合はuser2、システムにログインし、シェルは、その後に設定された実際のIDで起動されますuser2。シェルから開始するすべてのプロセスは、実際のID user2を実際のID として継承します。

    EUIDは実効ユーザーIDです。setuid ビットを設定したユーザーが実行するプロセス(ユーザーではなく)で変更されます。

    場合はuser2実行file.bin、RUIDになりますuser2となります開始したプロセスのEUID user1

の場合を使用してみましょうpasswd

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • パスワードuser2変更したいとき、彼らは実行し/usr/bin/passwdます。

  • RUIDはになりますuser2が、そのプロセスのEUIDはになりますroot

  • user2RUIDを内部的にチェックし、そうでない場合、そのアクションは実際のユーザーのパスワードに制限されるため、自分のパスワードのみpasswdを変更するために使用できます。passwdroot

  • EUIDになるということのneccesary rootの場合、passwdプロセスが必要なため、書き込み/etc/passwdおよび/または/etc/shadow


ありがとうございました!今ではすべてが明確になっています。ただし、もう1つ質問があります。EUIDは、ユーザーがsetuidビットが設定されているプロセスを実行するときにのみ変更されますか?または、別の状況でも変更できますか?もしそうなら、その状況は何ですか?
user1956190

1
setuidビットが設定されているプロセスを実行する以外に方法はないと思います。
jcbermu

3
「setuid」プログラムから実行されているプロセス(つまり、実効UID≠実UIDを持つプロセス)は、EUIDをRUIDに戻すことができます。場合によっては、初期値(プログラムファイルの所有者)とRUIDの間でEUIDを切り替えることができます。また、RUIDをEUIDと等しく設定できる場合があります。…(続き)
スコット

2
(続き)...特権プロセス(EUID = 0を有するもの、別名root)任意の値にEUIDとRUIDを設定することができる(例えば、loginsu、及びsudoプログラムこれを行います)。一般に、特権プロセスがそのUIDをゼロ以外の値に変更すると、特権プロセスではなくなり、root再び使用できなくなります。マニュアルページsetuid(2)seteuid(2)、およびsetreuid(2)を参照してください。
スコット

1
(続き)…1つの問題を解決するためのハックとして導入されましたが、その後、より広範な方法で解決されました。このようなプルーニングは、それを使用するプログラムを破壊するという事実を除いて、Linuxから削除された可能性があります。マイケル・ケリスク、著者のインタフェースをプログラミングLinuxの彼のバージョンでは、と言うsetfsuid(2)のmanページ、「setfsuid()最近は不要で、新しいアプリケーションでは避けるべきである。」
スコット・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.