web-dev-qa-db-ja.com

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

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

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

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

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

私の質問は:

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

ここに答えがあります:

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

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

    user1所有者です。ただし、それらはreadexecuteのみが可能ですが、rootはまだファイルへのフルアクセス(rwx)を持っています。

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

    EUIDはEffective User IDであり、setuidビットを設定した、ユーザーが実行するプロセス(ユーザーではない)に対して変更されます。

    user2file.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になります。

  • user2passwdを使用して変更できますonly内部的にpasswdがRUIDをチェックし、それがrootでない場合は、そのアクションは実際のユーザーのパスワードに制限されます。

  • rootの場合、EUIDはpasswdになる必要があります。これは、プロセスがwrite/etc/passwdまたは/etc/shadowに変換する必要があるためです。

38
jcbermu