私は質問で言及された概念に比較的慣れていないので、さまざまなソースからそれらについて読むことはそれらをより混乱させるだけです。これは私がこれまでに理解したことです:
ファイルのアクセス許可が与えられると、次のようになります。
-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin
グループusers
に所属するユーザーuser2
がfile.bin
を実行しようとしていると想定します。 setuidビットが設定されていない場合、これはfile.bin
のRUIDとEUIDの両方がuser2
のUIDと等しいことを意味します。しかし、setuidビットが設定されているので、これはRUIDがuser2
のUIDに等しいことを意味し、EUIDはファイルの所有者user1
のUIDです。
私の質問は:
root
の違いは何ですか? root
には所有者と同じ権限がありますか?または、root
の権限リストに別のエントリが必要ですか?ここに答えがあります:
root
は常にfullファイルとディレクトリにアクセスできます。ファイルの所有者も通常それらを持っていますが、これは常に正しいとは限りません。例えば:
-r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
user1
は所有者です。ただし、それらはreadとexecuteのみが可能ですが、root
はまだファイルへのフルアクセス(rwx)を持っています。
RUIDはReal User IDであり、決して(ほとんど)変更されません。 user2
がシステムにログインすると、シェルは実際のIDをuser2
に設定して起動されます。シェルから開始するすべてのプロセスは、実際のIDとして実際のID user2
を継承します。
EUIDはEffective User 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
になります。
user2
はpasswd
を使用して変更できますonly内部的にpasswd
がRUIDをチェックし、それがroot
でない場合は、そのアクションは実際のユーザーのパスワードに制限されます。
root
の場合、EUIDはpasswd
になる必要があります。これは、プロセスがwriteを/etc/passwd
または/etc/shadow
に変換する必要があるためです。