Vysvětlení SUID a SGID v Linuxu s příklady
On 1 října, 2021 by adminPředstavte si situaci, kdy máte skript nebo spustitelný soubor, který musí být vždy spuštěn určitým uživatelem, protože tento uživatel má příslušná přístupová práva pro akce prováděné skriptem. Také si přejete, aby ostatní uživatelé mohli tento skript spustit, ale nakonec je třeba, aby byl spuštěn jako původní uživatel skriptu(protože pouze tento uživatel má požadované sady oprávnění pro prováděné akce).
Ve výchozím nastavení se linuxové aplikace a programy spouštějí s přesně stejnými právy jako uživatel, který je spouští. Z tohoto důvodu potřebujeme dobré řešení pro výše uvedenou situaci (tj. všichni uživatelé by měli mít možnost spustit program vlastněný určitým uživatelem, jako by ho spustil sám vlastník).
Tady přichází ke slovu SUID. SUID není nic jiného než speciální bit oprávnění dostupný v Linuxu, který toho dosahuje velmi snadno.
Jste-li vlastníkem spustitelného souboru, s pomocí nastaveného oprávnění SUID budou ostatní uživatelé spouštět spustitelný soubor s vaším oprávněním, a ne s jejich.
SUID se v Linuxu běžně používá k dočasnému poskytování zvýšených oprávnění během spouštění. Toto zvýšení oprávnění není vůbec trvalé. Jeho dočasné zvýšení je pouze v době, kdy je program/skript spouštěn.
Příklad spustitelných souborů v Linuxu s nastaveným bitem oprávnění SUID
Pochopíme to na příkladu. Z výše uvedeného seznamu spustitelných souborů je /usr/bin/passwd něco, co by mělo být spustitelné všemi uživateli v systému (to proto, že všichni uživatelé by měli mít možnost změnit si vlastní heslo). Pokud nevíte, jak hesla v Linuxu fungují, doporučuji přečíst si níže uvedený článek.
Přečtěte si: Jak fungují hesla v Linuxu
Aktualizace hesla uživatele vyžaduje, aby uživatel upravil soubor /etc/passwd, /etc/shadow v Linuxu. To je však povoleno pouze pro uživatele root. To je důvod, proč je na soubor /usr/bin/passwd aplikován bit SUID. Vzhledem k tomu, že root je vlastníkem tohoto souboru a SUID je nastaveno na tomto souboru, každý uživatel, který provede příkaz /usr/bin/passwd, jej provede jako uživatel root. Podívejme se na to prakticky.
Níže je zobrazen příkaz passwd spuštěný uživatelem jménem sarath. Podívejme se, zda se tento proces příkazu passwd spouští jako uživatel root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Otevřeme další terminál a spustíme ps aux commad a uvidíme, zda se proces příkazu passwd spouští s uživatelem root. To lze provést podle následujícího obrázku.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Je jasně vidět, že proces příkazu passwd je spuštěn s uživatelem root(viditelné z prvního pole výše uvedeného výstupu.). Podobně jako příkaz passwd bude jakýkoli příkaz z dříve zobrazeného seznamu souborů s aplikovaným SUID vždy spuštěn s oprávněním vlastníka souboru, bez ohledu na to, který uživatel jej provádí.
Všimněte si také skutečnosti, že i příkaz ping je SUID(viz úvodní seznam uvedený výše), je to proto, že provedení příkazu PING vyžaduje několik síťových operací, které může provést pouze root.
Jak nakonfigurovat SUID v Linuxu?
Konfiguraci SUID u požadovaných souborů/skriptů stačí jediný příkaz CHMOD.
$ chmod u+s /path/to/file/or/executable
Výše uvedený příkaz „/path/to/file/or/executable“ nahraďte absolutní cestou ke skriptu, na kterém potřebujete SUID bit. Toho lze dosáhnout i pomocí číselné metody chmod.
$ chmod 4755 /path/to/file/or/executable
První „4“ v „4755“ označuje SUID. Další příklad numerické metody je uveden níže.
$ chmod 4750 /path/to/file/or/executable
Zásadně v číselné metodě jednoduše přidejte 4 k ostatním sadám oprávnění, které jsou v daném souboru potřeba.
Jak ověřit, zda je na souboru použit bit SUID, nebo ne?
Příkazem ls, jak je uvedeno níže, můžete ověřit, zda je na souboru použit bit SUID, nebo ne.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Příkazls -l by vám měl ukázat, zda je SUID aplikován, nebo ne. Stačí se podívat na první pole výstupu příkazu ls -l. Písmeno s ve znaku -rwsr-xr-x označuje bit SUID. V některých případech uvidíte velké S místo malého s, které jsme viděli výše. Velké S znamená, že na daný soubor/skript není aplikováno žádné oprávnění ke spuštění.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Z výše uvedeného výstupu jasně vidíte, že po odebrání spustitelného oprávnění ze souboru /usr/bin/passwd se výstup ls -l změnil na velké S. Přidáním spustitelného oprávnění zpět na tento soubor se z něj stane malé s, jak je uvedeno níže.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Jak najít všechny soubory, které mají v Linuxu povolený bit SUID?
Pro vyhledání všech souborů v systému, které mají povolený bit SUID, můžete použít níže uvedený příkaz find. Pokud s příkazem find začínáte, doporučuji přečíst si níže uvedený článek.
Přečtěte si:
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Zaměňte první / ve výše uvedeném příkazu za požadované umístění, abyste našli všechny soubory SUID v tomto umístění. Chcete-li například najít všechny soubory s SUID uvnitř /usr/bin, spusťte níže uvedený příkaz.
Nezapomeňte prosím na skutečnost, že bit SUID je u adresářů v Linuxu ignorován.
SGID je velmi podobný SUID. Jediný rozdíl je v tom, že skript/soubor, který má nakonfigurováno SGID, bude spuštěn se stejnými právy vlastníka skupiny.
Pokud nastavíte SGID na adresářích, všechny soubory nebo adresáře vytvořené uvnitř tohoto adresáře budou vlastněny stejnou společnou skupinou(vlastníkem skupiny adresáře, kde je SGID nakonfigurováno).
Příklady souborů SGID v Linuxu
Jak nakonfigurovat SGID v Linuxu?
Podobně jako SUID lze SGID nakonfigurovat pomocí příkazu chmod, jak je uvedeno níže.
root@localhost:~# chmod g+s /path/to/file
Ve výše uvedeném příkazu nahraďte „/cesta/do/souboru“ absolutní cestou ke skriptu, na kterém potřebujete SGID bit. Toho lze dosáhnout také pomocí číselné metody chmod (zobrazené níže).
root@localhost:~# chmod 2755 /path/to/file
Jak ověřit, zda je na souboru nebo skriptu použito SGID?
Podobně jako u SUID můžete snadno provést příkaz ls -l na souboru/adresáři a zjistit, zda je SGID povoleno, nebo ne. Níže uvedený příklad ukazuje totéž.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Malá část s v prvním poli ve výstupu about (-rwxr-sr-x) označuje bit SGID. Podobně jako u SUID, pokud nemáte na skupinu aplikováno spustitelné oprávnění, bude mít místo malého S velké S, jak je ukázáno níže.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
Při povolení spustitelného oprávnění na skupinu bude mít malé s (ukázáno níže.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
.
Napsat komentář