V pojmech zmíněných v otázce jsem relativně nový a číst o nich z různých zdrojů je jen činí více matoucími. Takže tohle jsem zatím pochopil:
Když dostaneme oprávnění k souboru, vypadají takto:
-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin
Předpokládáme, že uživatel user2
kdo je ve skupině users
pokusí se spustit file.bin
. Pokud by nebyl nastaven bit setuid, znamenalo by to, že jak RUID, tak EUID souboru file.bin
se rovnaly UID user2
. Ale protože je nastaven bit setuid, znamená to, že RUID se nyní rovná UID user2
, zatímco EUID je UID vlastníka souboru, user1
.
Moje otázky jsou:
- Jaký je rozdíl mezi vlastníkem souboru a
root
?root
má stejná oprávnění jako vlastník? Nebo bychom potřebovali samostatnou položku v seznamu oprávnění proroot
? - Rozdíl mezi RUID a EUID?
- Pokud tomu rozumím, RUID a EUID se vztahují pouze na procesy. Pokud je tomu tak, proč mají hodnotu ID uživatele?
- Pokud je RUID uživatel, který vytváří proces, a EUID je uživatel, který proces aktuálně spouští, pak mi první věta první odpovědi v této otázce nedává žádný smysl.
- Pochopil jsem správně, co bit setuid dělá?
Přijatá odpověď:
Zde jsou odpovědi:
-
root
má vždy plné přístup k souborům a adresářům. Vlastník souboru je obvykle má také, ale ne vždy je to pravda. Například:-r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
user1
je vlastníkem; mohou však pouze číst a provést , aleroot
má stále plný přístup (rwx ) do souboru. -
RUID je ID skutečného uživatele a nikdy se (téměř) nezmění. Pokud
user2
se přihlásí do systému, shell se pak spustí s jeho skutečným ID nastaveným nauser2
. Všechny procesy, které spustí ze shellu, zdědí skutečné IDuser2
jako jejich skutečné ID.EUID je Efektivní ID uživatele , mění se pro procesy (nikoli pro uživatele), které uživatel spouští a které mají nastavený bit setuid .
Pokud
user2
spustífile.bin
, RUID budeuser2
a EUID zahájeného procesu budeuser1
.
Použijme případ passwd
:
-rwsr-xr-x 1 root root 45396 may 25 2012 /usr/bin/passwd
-
Když
user2
chce změnit heslo , spouštějí/usr/bin/passwd
. -
RUID bude
user2
ale EUID tohoto procesu buderoot
. -
user2
můžete použítpasswd
změnit pouze jejich vlastní heslo, protože interněpasswd
zkontroluje RUID a pokud to neníroot
, jeho akce budou omezeny na skutečné uživatelské heslo. -
Je nutné, aby se EUID stalo
root
v případěpasswd
protože proces potřebuje zapsat do/etc/passwd
a/nebo/etc/shadow
.