GNU/Linux >> Znalost Linux >  >> Linux

Speciální oprávnění k souborům v Linuxu:SUID, GUID a Sticky Bit

Oprávnění k souborům a vlastnictví jsou základním a přesto nezbytným konceptem zabezpečení v Linuxu. Tyto pojmy již pravděpodobně znáte. Obvykle to vypadá takto:

Kromě těchto běžných oprávnění existuje několik speciálních oprávnění k souborům a mnoho uživatelů Linuxu si toho není vědomo.

Abychom mohli začít mluvit o speciálních oprávněních, předpokládám, že máte určité znalosti o základních oprávněních k souborům. Pokud ne, přečtěte si prosím našeho skvělého průvodce vysvětlujícího oprávnění k souborům pro Linux.

Nyní vám ukážu některá speciální oprávnění s novými písmeny v systému souborů Linux.

V tomto příkladu má příkaz passwd, zodpovědný za změnu hesla uživatele, písmeno s na stejném místě očekáváme, že uvidíme x nebo - , pro uživatelská oprávnění. Je důležité si všimnout, že tento soubor patří uživateli root a skupině root.

S tímto oprávněním nemusíte dávat sudo přístup ke konkrétnímu uživateli, když chcete, aby spustil nějaký kořenový skript.

Co je SUID?

Když je u spustitelného souboru nastaven bit SUID, znamená to, že soubor bude spuštěn se stejnými oprávněními jako vlastník spustitelného souboru.

Vezměme si praktický příklad. Pokud se podíváte na binární spustitelný soubor příkazu passwd, má nastaven bit SUID.

linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22  2019 /usr/bin/passwd

To znamená, že každý uživatel spouštějící příkaz passwd jej bude spouštět se stejným oprávněním jako root.

jaký je přínos? Příkaz passwd potřebuje ke změně hesla upravit soubory jako /etc/passwd, /etc/shadow. Tyto soubory jsou vlastněny uživatelem root a mohou být upravovány pouze uživatelem root. Ale díky příznaku setuid (bit SUID) bude moci běžný uživatel také upravovat tyto soubory (které vlastní root) a měnit své heslo.

To je důvod, proč můžete použít příkaz passwd ke změně vlastního hesla i přes skutečnost, že soubory, které tento příkaz upravuje, jsou vlastněny rootem.

Proč normální uživatel nemůže změnit hesla ostatních uživatelů?

Mějte na paměti, že běžný uživatel nemůže měnit hesla pro jiné uživatele, pouze pro sebe. Ale proč? Pokud můžete spustit příkaz passwd jako běžný uživatel se stejnými oprávněními jako root a upravit soubory jako /etc/passwd, proč nemůžete změnit hesla ostatních uživatelů?

Pokud zkontrolujete kód pro příkaz passwd, zjistíte, že kontroluje UID uživatele, jehož heslo se upravuje, s UID uživatele, který příkaz spustil. Pokud se neshoduje a pokud příkaz nespustil root, vyvolá chybu.

Koncept setuid/SUID je složitý a měl by být používán s maximální opatrností, jinak ve vašem systému zůstanou bezpečnostní mezery. Je to základní bezpečnostní koncept a mnoho příkazů (jako je příkaz ping) a programů (jako sudo) jej využívá.

Nyní, když rozumíte konceptu SUID, pojďme se podívat, jak nastavit bit SUID.

Jak nastavit bit SUID?

Při nastavování bitu SUID mi připadá symbolický způsob jednodušší. Příkaz chmod můžete použít takto:

chmod u+s file_name

Zde je příklad:

linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Můžete také použít číselný způsob. K normálním oprávněním stačí přidat čtvrtou číslici. Osmičkové číslo používané k nastavení SUID je vždy 4.

linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt

Jak odstranit SUID?

Můžete použít buď symbolický režim v příkazu chmod takto:

chmod u-s test.txt

Nebo použijte numerický způsob s 0 místo 4 s oprávněními, která chcete nastavit:

chmod 0766 test2.txt

Rozdíl mezi malým s a velkým S jako bit SUID

Pamatujete si definici SUID? Umožňuje spuštění souboru se stejnými oprávněními jako vlastník souboru.

Ale co když soubor nemá nastaven bit spuštění? Takhle:

linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt

Pokud nastavíte bit SUID, zobrazí se velké S, nikoli malé:

linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Příznak S jako SUID znamená, že došlo k chybě, kterou byste měli prozkoumat. Chcete, aby byl soubor spuštěn se stejným oprávněním jako vlastník, ale soubor nemá žádné spustitelné oprávnění. Což znamená, že ani vlastník nemůže soubor spustit, a pokud soubor nelze spustit, nezískáte oprávnění jako vlastník. Tím selže celý bod nastavení bitu SUID.

Jak najít všechny soubory s nastaveným SUID?

Pokud chcete prohledávat soubory s tímto oprávněním, použijte příkaz find v terminálu s volbou -perm.

find / -perm /4000

Co je SGID?

SGID je obdobou SUID. S nastaveným bitem SGID bude mít každý uživatel spouštějící soubor stejná oprávnění jako vlastník skupiny souboru.

Jeho výhodou je manipulace s adresářem. Když je na adresář aplikováno oprávnění SGID, všechny podadresáře a soubory vytvořené v tomto adresáři získají stejné skupinové vlastnictví jako hlavní adresář (nikoli skupinové vlastnictví uživatele, který soubory a adresáře vytvořil).

Otevřete svůj terminál a zkontrolujte oprávnění k souboru /var/local:

linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24  2018 /var/local

Tato složka /var/local má písmeno ‚s‘ na stejném místě, kde očekáváte ‚x‘ nebo ‚-‘ pro oprávnění skupiny.

Praktickým příkladem SGID je server Samba pro sdílení souborů ve vaší lokální síti. Je zaručeno, že všechny nové soubory neztratí požadovaná oprávnění, bez ohledu na to, kdo je vytvořil.

Jak nastavit SGID?

Bit SGID můžete nastavit v symbolickém režimu takto:

chmod g+s directory_name

Zde je příklad:

linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/

Můžete také použít číselný způsob. K normálním oprávněním stačí přidat čtvrtou číslici. Osmičkové číslo používané pro SGID je vždy 2.

linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/

Jak odstranit bit SGID?

Stačí použít -s místo +s takto:

chmod g-s folder

Odebrání SGID je stejné jako odebrání SGID. Použijte další 0 před oprávněními, která chcete nastavit:

chmod 0755 folder

Jak najít soubory s nastaveným SGID v Linuxu

Chcete-li najít všechny soubory s nastaveným bitem SGID, použijte tento příkaz:

find . -perm /2000

Co je to lepkavý bit?

Na adresáři funguje lepivý bit. S fixním bitem nastaveným v adresáři mohou být všechny soubory v adresáři odstraněny nebo přejmenovány pouze vlastníky souborů nebo kořenem.

To se obvykle používá v adresáři /tmp, který funguje jako odpadkový koš dočasných souborů.

linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp

Jak vidíte, složka /tmp má písmeno t na stejném místě, kde očekáváme, že uvidíme x nebo pro ostatní oprávnění. To znamená, že uživatel (kromě root) nemůže odstranit dočasné soubory vytvořené jinými uživateli v adresáři /tmp.

Jak nastavit lepivý bit?

Jako vždy můžete v Linuxu použít jak symbolický, tak číselný režim k nastavení lepivého bitu.

chmod +t my_dir

Zde je příklad:

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/

Číselný způsob je přidat čtvrtou číslici k normálním oprávněním. Osmičkové číslo použité pro lepivý bit je vždy 1.

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/

Jak odstranit lepivý kousek:

Můžete použít symbolický režim:

chmod -t my_dir

Nebo číselný režim s 0 před běžnými oprávněními:

chmod 0775 tmp2

Jak najít soubory s lepivým bitem nastaveným v Linuxu

Tento příkaz vrátí všechny soubory/adresáře s nastaveným lepivým bitem:

linuxhandbook:~$ find . -perm /1000

Pokud adresář nemá oprávnění ke spuštění nastavené pro všechny, nastavení lepivého bitu povede k zobrazení T namísto t. Indikace toho, že věci nejsou úplně v pořádku s lepivým bitem.

Závěr

Vložím sem tento obrázek, abych si připomněl, co jste se právě naučili:

Tato flexibilita správy složek, souborů a všech jejich oprávnění je tak důležitá v každodenní práci správce systému. Mohli jste vidět, že všechna tato speciální oprávnění nejsou tak složitá na pochopení, ale je třeba je používat s maximální opatrností.

Doufám, že vám tento článek dobře porozuměl SUID, GUID a Sticky Bit v Linuxu. Máte-li dotazy nebo návrhy, napište komentář níže.


Linux
  1. Jak zkopírovat oprávnění a vlastnictví souboru do jiného souboru v Linuxu

  2. Základy oprávnění k souborům Linux

  3. Oprávnění pro Linux:Úvod do chmod

  1. Oprávnění pro Linux:SUID, SGID a sticky bit

  2. Linux chmod and chown – Jak změnit oprávnění a vlastnictví souborů v Linuxu

  3. Co je Sticky Bit, SUID a SGID v Linuxu

  1. Linux – Rozumíte unixovým oprávněním a typům souborů?

  2. Oprávnění a ukládání souborů?

  3. Jak spravovat oprávnění/vlastnictví souborů a adresářů v Linuxu