• Dave McKay

    @TheGurkha

  • 26. února 2020, 8:00am EDT
Fatmawati Achmad Zaenuri/

SUID, SGID a Sticky Bits jsou mocná speciální oprávnění, která můžete nastavit pro spustitelné soubory a adresáře v Linuxu. Podělíme se o výhody – a možná úskalí – jejich používání.

Již se používají

Zabudování zabezpečení do víceuživatelského operačního systému představuje několik otazníků. Vezměme si například (zdánlivě) základní koncept hesel. Všechna musí být uložena tak, aby při každém přihlášení mohl systém porovnat heslo, které zadá, s uloženou kopií. Je zřejmé, že vzhledem k tomu, že hesla jsou klíčem ke království, musí být chráněna.

V systému Linux jsou uložená hesla chráněna dvěma způsoby: jsou šifrována a k souboru, který hesla obsahuje, má přístup pouze osoba s právy root. To může znít dobře, ale představuje to problém: Pokud mají k uloženým heslům přístup pouze osoby s právy root, jak mohou svá hesla změnit ti, kteří tato práva nemají?

Zvýšení vašeho statusu

Obvykle se příkazy a programy v Linuxu spouštějí se stejnou sadou oprávnění jako osoba, která program spouští. Když root spustí příkaz passwd pro změnu hesla, spustí se s právy root. To znamená, že příkaz passwd může volně přistupovat k uloženým heslům v souboru /etc/shadow.

Reklama

Ideální by bylo schéma, ve kterém by kdokoli v systému mohl spustit program passwd, ale program passwd by si zachoval zvýšená oprávnění root. To by komukoli umožnilo změnit vlastní heslo.

Výše uvedený scénář je přesně to, co dělá bit Set User ID (SUID). Spouští programy a příkazy s právy vlastníka souboru, nikoliv s právy osoby, která program spouští.

Povýšíte status programu

Je tu však ještě jeden oříšek. Této osobě je třeba zabránit, aby zasahovala do cizích hesel. Linux obsahuje schéma SUID, které mu umožňuje spouštět aplikace se sadou dočasně vypůjčených oprávnění – ale to je jen polovina bezpečnostního příběhu.

Reklama

Kontrolní mechanismus, který někomu brání pracovat s cizím heslem, je obsažen v programu passwd, nikoli v operačním systému a schématu SUID.

Programy, které se spouštějí se zvýšenými oprávněními, mohou představovat bezpečnostní riziko, pokud nejsou vytvořeny s ohledem na „bezpečnost od návrhu“. To znamená, že bezpečnost je první věc, kterou zvažujete, a pak na ní stavíte. Nepište program a nesnažte se mu dodatečně dát bezpečnostní nátěr.

Největší výhodou softwaru s otevřeným zdrojovým kódem je, že se můžete sami podívat na zdrojový kód nebo se odkázat na jeho důvěryhodné odborné recenze. Ve zdrojovém kódu programu passwd jsou kontroly, takže můžete zjistit, zda osoba, která program spouští, je root. Pokud je někdo root (nebo někdo, kdo používá sudo), jsou povoleny různé schopnosti.

Toto je kód, který zjišťuje, zda je někdo root.

Následující příklad je příklad, ve kterém je toto zohledněno. Protože root může změnit libovolné heslo, nemusí se program obtěžovat s kontrolami, které obvykle provádí, aby zjistil, která hesla má daná osoba právo změnit. Pro root tedy tyto kontroly přeskočí a kontrolní funkci ukončí.

Reklama

U základních linuxových příkazů a nástrojů si můžete být jisti, že mají v sobě zapečetěné zabezpečení a že kód byl mnohokrát zkontrolován. Samozřejmě vždy existuje hrozba dosud neznámých zneužití. Rychle se však objeví záplaty nebo aktualizace, které nově zjištěným zranitelnostem čelí.

Je to software třetích stran – zejména ten, který není open-source – s nímž musíte být velmi opatrní SUID. Neříkáme, abyste to nedělali, ale pokud to děláte, chtějte se ujistit, že to nevystaví váš systém riziku. Nechcete zvyšovat oprávnění programu, který nebude správně spravovat sám sebe a osobu, která ho spouští.

Příkazy systému Linux, které používají SUID

Následujících několik příkazů systému Linux, které používají bit SUID, aby příkaz získal zvýšená oprávnění, když je spuštěn běžným uživatelem:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Všimněte si, že názvy souborů jsou zvýrazněny červeně, což znamená, že je nastaven bit SUID.

Reklama

Oprávnění k souboru nebo adresáři jsou obvykle reprezentována třemi skupinami tří znaků: rwx. Ty znamenají čtení, zápis a spuštění. Pokud jsou tato písmena přítomna, znamená to, že dané oprávnění bylo uděleno. Pokud je však místo písmen přítomna pomlčka (-), toto oprávnění nebylo uděleno.

Existují tři skupiny těchto oprávnění (zleva doprava): pro vlastníka souboru, pro členy skupiny souboru a pro ostatní. Je-li u souboru nastaven bit SUID, písmeno „s“ představuje oprávnění vlastníka ke spuštění.

Je-li bit SUID nastaven u souboru, který nemá možnost spuštění, označuje to velké písmeno „S“.

Podíváme se na příklad. Běžný uživatel dave zadá příkaz passwd:

passwd

Reklama

Příkaz passwd vyzve dave k zadání jeho nového hesla. Pro zobrazení podrobností o běžících procesech můžeme použít příkaz ps.

Použijeme ps s grep v jiném okně terminálu a vyhledáme proces passwd. Použijeme také volby -e (každý proces) a -f (plný formát) s ps.

Zadáme následující příkaz:

ps -e -f | grep passwd

Zobrazí se dva řádky, z nichž druhý je proces grep hledající příkazy s řetězcem „passwd“. Nás však zajímá první řádek, protože ten je určen pro proces passwd, který dave spustil.

Vidíme, že proces passwd běží stejně, jako kdyby ho spustil root.

Nastavení bitu SUID

Bit SUID lze snadno změnit pomocí chmod. Symbolický režim u+s nastaví bit SUID a symbolický režim u-s bit SUID vymaže.

Reklama

Pro ilustraci některých pojmů týkajících se bitu SUID jsme vytvořili malý program htg. Nachází se v kořenovém adresáři uživatele dave a nemá nastavený bit SUID. Po jeho spuštění se zobrazí skutečné a efektivní ID uživatele (UID).

Skutečné UID patří osobě, která program spustila. Efektivní ID je účet, ke kterému se program chová, jako by ho spustil.

Zadáme následující příkaz:

ls -lh htg
./htg

Při spuštění místní kopie programu vidíme, že skutečné i efektivní ID je nastaveno na dave. Chová se tedy stejně, jako by se měl chovat normální program.

Reklama

Zkopírujeme jej do adresáře /usr/local/bin, aby jej mohli používat i ostatní.

Napíšeme následující příkaz, pomocí chmod nastavíme bit SUID a pak zkontrolujeme, zda byl nastaven:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Takže program je zkopírován a bit SUID je nastaven. Spustíme jej znovu, ale tentokrát spustíme kopii ve složce /usr/local/bin:

htg

Přestože program spustil dave, efektivní ID je nastaveno na uživatele root. Pokud tedy program spustí mary, stane se totéž, jak je uvedeno níže:

htg

Reklama

Skutečné ID je mary a efektivní ID je root. Program se spouští s oprávněními uživatele root.

SOUHLASÍM: Jak používat příkaz chmod v systému Linux

Bit SGID

Bit Set Group ID (SGID) je velmi podobný bitu SUID. Když je bit SGID nastaven na spustitelném souboru, je efektivní skupina nastavena na skupinu souboru. Proces se spouští s právy členů skupiny souboru, nikoli s právy osoby, která jej spustila.

Náš program htg jsme upravili tak, aby zobrazoval i efektivní skupinu. Změníme skupinu programu htg na výchozí skupinu uživatele mary, tedy mary. Použijeme také symbolické režimy u-s a g+s s chown, abychom odstranili bit SUID a nastavili SGID.

Proto zadáme následující příkaz:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

V oprávnění skupiny vidíte bit SGID označený písmenem „s“. Všimněte si také, že skupina je nastavena na mary a název souboru je nyní zvýrazněn žlutě.

Reklama

Před spuštěním programu zjistíme, do kterých skupin patří dave a mary. Použijeme příkaz id s volbou -G (groups), abychom vypsali ID všech skupin. Poté spustíme program htg jako dave.

Zadáme následující příkazy:

id -G dave

id -G mary
htg

ID výchozí skupiny pro mary je 1001 a účinná skupina programu htg je 1001. Ačkoli byl tedy spuštěn programem dave, je spuštěn s oprávněními členů skupiny mary. Je to stejné, jako kdyby se dave připojil ke skupině mary.

Použijeme bit SGID na adresář. Nejprve vytvoříme adresář s názvem „work“ a poté změníme jeho skupinu na „geek“. Poté na adresář nastavíme bit SGID.

Když použijeme ls pro kontrolu nastavení adresáře, použijeme také volbu -d (adresář), abychom viděli podrobnosti o adresáři, nikoli jeho obsah.

Zadáme následující příkazy:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

Reklama

Bit SGID a skupina „geek“ jsou nastaveny. Ty ovlivní všechny položky vytvořené v adresáři work.

Napíšeme následující příkaz pro vstup do adresáře work, vytvoříme adresář s názvem „demo“ a zkontrolujeme jeho vlastnosti:

cd work
mkdir demo
ls -lh -d demo

Bit SGID a skupina „geek“ se automaticky použijí pro adresář „demo“.

Příkazem touch vytvoříme soubor a zkontrolujeme jeho vlastnosti:

touch useful.sh
ls -lh useful.sh

Reklama

Skupina nového souboru je automaticky nastavena na „geek“.

PŘÍKAZ: Jak používat příkaz chown v Linuxu

Lepivý bit

Lepivý bit získal své jméno podle svého historického účelu. Když byl nastaven na spustitelném souboru, označil operačnímu systému, že textové části spustitelného souboru mají být drženy ve swapu, což urychlilo jejich opětovné použití. V Linuxu má sticky bit vliv pouze na adresář – jeho nastavení na souboru by nedávalo smysl.

Při nastavení sticky bitu na adresáři mohou lidé mazat pouze soubory, které jim v rámci tohoto adresáře patří. Nemohou mazat soubory, které patří někomu jinému, bez ohledu na to, jaká kombinace oprávnění je u souborů nastavena.

To umožňuje vytvořit adresář, který mohou všichni – a procesy, které spouštějí – používat jako sdílené úložiště souborů. Soubory jsou chráněny, protože opět nikdo nemůže smazat soubory někoho jiného.

Reklama

Vytvořme adresář nazvaný „sdílený“. Použijeme o+t symbolický režim s chmod, abychom u tohoto adresáře nastavili lepicí bit. Poté se podíváme na oprávnění tohoto adresáře, stejně jako adresářů /tmp a /var/tmp.

Zadáme následující příkazy:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Je-li nastaven sticky bit, spustitelný bit sady oprávnění „ostatní“ souborů je nastaven na „t“. Název souboru je také zvýrazněn modře.

Složky /tmp a /var/tmp jsou dva příklady adresářů, které mají nastavena všechna práva k souborům pro vlastníka, skupinu a ostatní (proto jsou zvýrazněny zeleně). Používají se jako sdílené umístění pro dočasné soubory.

Reklama

S těmito oprávněními by teoreticky měl mít kdokoli možnost dělat cokoli. Nicméně bit sticky je přebíjí a nikdo nemůže smazat soubor, který mu nepatří.

Připomínky

Následující je stručný seznam toho, co jsme probrali výše, pro budoucí použití:

  • SUID Funguje pouze na soubory.
  • Na adresáře a soubory můžete použít SGID.
  • Bit sticky můžete použít pouze na adresáře.
  • Pokud se indikátory „s„, „g“ nebo „t“ objeví velkými písmeny, nebyl nastaven spustitelný bit (x).
Dave McKay
Dave McKay poprvé použil počítač v době, kdy byla v módě děrná papírová páska, a od té doby programuje. Po více než 30 letech v oboru informačních technologií je nyní technologickým novinářem na plný úvazek. Během své kariéry pracoval jako programátor na volné noze, manažer mezinárodního týmu pro vývoj softwaru, projektový manažer IT služeb a v poslední době jako pověřenec pro ochranu osobních údajů. Dave je evangelistou Linuxu a zastáncem open source.Přečtěte si celý životopis “

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.