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?rootmá 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:
-
rootmá 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.binuser1je vlastníkem; mohou však pouze číst a provést , alerootmá stále plný přístup (rwx ) do souboru. -
RUID je ID skutečného uživatele a nikdy se (téměř) nezmění. Pokud
user2se 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é IDuser2jako 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
user2spustífile.bin, RUID budeuser2a 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ž
user2chce změnit heslo , spouštějí/usr/bin/passwd. -
RUID bude
user2ale EUID tohoto procesu buderoot. -
user2můžete použítpasswdzměnit pouze jejich vlastní heslo, protože interněpasswdzkontroluje RUID a pokud to neníroot, jeho akce budou omezeny na skutečné uživatelské heslo. -
Je nutné, aby se EUID stalo
rootv případěpasswdprotože proces potřebuje zapsat do/etc/passwda/nebo/etc/shadow.