Privilegovaný přístup k souborům a adresářům je ve skutečnosti určen schopnostmi, nejen tím, že je root nebo ne. V praxi root má obvykle všechny možné schopnosti, ale jsou situace, kdy všechny/mnoho z nich může být zrušeno nebo některé dány jiným uživatelům (jejich procesům).
Stručně jste již popsali, jak fungují kontroly řízení přístupu u privilegovaného procesu. Zde je návod, jak to ve skutečnosti ovlivňují různé schopnosti:
Hlavní schopnost je zde CAP_DAC_OVERRIDE , proces, který ji má, může „obcházet čtení, zápis a provádění kontrol oprávnění“. To zahrnuje čtení a zápis do libovolných souborů, stejně jako čtení, zápis a přístup k adresářům.
Ve skutečnosti se nevztahuje na spouštění souborů, které nejsou označeny jako spustitelné. Komentář v generic_permission (fs/namei.c ), než přístup zkontroluje soubory, říká, že
Čtení/zápis DAC lze vždy přepsat. Spustitelné DAC lze přepsat, pokud je nastaven alespoň jeden exec bit.
A kód zkontroluje, zda existuje alespoň jeden x bit nastaven, pokud se pokoušíte spustit soubor. Domnívám se, že jde pouze o pohodlnou funkci, která má zabránit náhodnému spuštění náhodných datových souborů a získání chyb nebo zvláštních výsledků.
Každopádně, pokud můžete přepsat oprávnění, stačí vytvořit spustitelnou kopii a spustit ji. (Ačkoli to může znamenat teoretický rozdíl, protože soubory setuid procesu dokázaly přepsat oprávnění k souboru (CAP_DAC_OVERRIDE ), ale neměl další související funkce (CAP_FSETID /CAP_FOWNER /CAP_SETUID ). Ale mít CAP_DAC_OVERRIDE umožňuje editaci /etc/shadow a podobné věci, takže je to přibližně stejné, jako kdybychom měli úplný root přístup.)
Je zde také CAP_DAC_READ_SEARCH schopnost, která umožňuje číst libovolné soubory a přistupovat k libovolným adresářům, ale nikoli je spouštět nebo do nich zapisovat; a CAP_FOWNER což procesu umožňuje provádět věci, které jsou obvykle vyhrazeny pouze pro vlastníka souboru, jako je změna bitů oprávnění a skupiny souborů.
Přepsání lepivého bitu v adresářích je zmíněno pouze pod CAP_FOWNER , takže se zdá, že CAP_DAC_OVERRIDE to by nestačilo ignorovat. (Dalo by vám to oprávnění k zápisu, ale obvykle je stejně máte v adresářích s lepivým obsahem a +t omezuje to.)
(Myslím, že speciální zařízení se zde počítají jako "soubory". Alespoň generic_permission() má pouze typovou kontrolu pro adresáře, ale mimo ni jsem to nekontroloval.)
Samozřejmě stále existují situace, kdy vám ani schopnosti nepomohou upravit soubory:
- některé soubory ve formátu
/proca/sys, protože se ve skutečnosti nejedná o skutečné soubory - SELinux a další bezpečnostní moduly, které mohou omezovat root
chattrneměnný+ia připojit pouze+apříznaky na ext2/ext3/ext4, které oba zastaví i root a zabrání také přejmenování souborů atd.- síťové souborové systémy, kde server může provádět vlastní řízení přístupu, např.
root_squashv NFS mapuje root na nikoho - FUSE, o kterém předpokládám, že by mohl dělat cokoliv
- připojení pouze pro čtení
- zařízení pouze pro čtení
Přesně tak, jak jste si všimli u výchozích oprávnění:
-
Čtení a zápis:
Ve výchozím nastavení má uživatel root přístup k jakémukoli souboru v systému. Tento přístup můžete odebrat změnou atributů, jako je vysvětlení zde:chattr. To je pak spojeno se schopnostmi. -
Provést:
Uživatel root nemá oprávnění ke spuštění, pokud není nastaven alespoň jeden ze spouštěcích bitů.
myFile.txt se získá pomocí chmod 000 myFile.txt .
0 no permission
1 execute
2 write
3 execute + write
4 read
5 read + execute
6 read + write
7 all
--------- znamená, že neexistuje žádná oprávnění pro uživatele , skupinu a další.
Uživatel root má neomezené možnost upravit tento soubor. Čtení/zápis je povolen. Aby mohl uživatel root spustit tento soubor, musí jej přesto učinit spustitelným. (chmod 100, 010 nebo 001)