GNU/Linux >> Znalost Linux >  >> Linux

Jak fungují oprávnění k souborům pro uživatele root?

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 /proc a /sys , protože se ve skutečnosti nejedná o skutečné soubory
  • SELinux a další bezpečnostní moduly, které mohou omezovat root
  • chattr neměnný +i a připojit pouze +a pří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_squash v 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)


Linux
  1. Pochopení vlastnictví souborů uživatele v dockeru:jak se vyhnout změně oprávnění propojených svazků

  2. Jak přimět ssh, aby se přihlásil jako správný uživatel?

  3. Jak nastavit výchozí oprávnění k souborům pro všechny složky/soubory v adresáři?

  1. Jak nastavit oprávnění Sudo pro uživatele v Linuxu

  2. Jak nastavit oprávnění linux pro složku WWW?

  3. Jak najít soubor .pid pro daný proces

  1. Jak zkontrolovat velké soubory v konzole

  2. Linux – Jak nastavit výchozí oprávnění k souborům pro všechny složky/soubory v adresáři?

  3. Pokud změním oprávnění u souboru Tar, bude se to vztahovat i na soubory v něm?