NOVINKA: Kurz kybernetické bezpečnosti s akreditací MŠMT, nyní již od 0 Kč. Staň se žádaným profesionálem. Zjisti více:
NOVINKA: Staň se datovým analytikem a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Lekce 12 - Linuxový terminál (Bash) - Správa skupin a ACL

V předešlém cvičení, Řešené úlohy k 9.-11. lekci základů Linuxu, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V tomto tutoriálu základů Linuxu se zaměříme na správu skupin a ACL v terminálu. Naučíme se, jak skupiny vytvářet a spravovat a jak pomocí ACL (Access Control List) přidělovat konkrétní oprávnění jednotlivým uživatelům.

Skupiny v Linuxu

V Linuxu existují dva typy skupin, jejichž členem může být uživatel:

  • Primární skupina – Každý uživatel musí být členem právě jedné primární skupiny. Ta je automaticky přiřazena ke všem souborům a adresářům, které uživatel vytvoří. Název skupiny je obvykle shodný se jménem uživatele.
  • Sekundární skupiny – Uživatel může být členem více sekundárních skupin. Ty slouží k přidělení vybraných oprávnění více uživatelům.

Stejně jako seznam uživatelů, tak i seznam skupin je v Linuxu zapisován do souboru. Operační systém zapisuje všechny skupiny do souboru /etc/group. Podívejme se, jaké skupiny jsou v systému vytvořeny:

cat /etc/group

Každý řádek představuje jednu skupinu a obsahuje několik údajů oddělených dvojtečkou (:):

root x 0
Jméno skupiny Heslo ID skupiny (GID)

Heslo skupiny je dnes považováno za bezpečnostní problém, proto se běžně nepoužívá.

Pokud chceme zjistit, ve kterých skupinách je uživatel členem, použijeme příkaz:

groups

Výstup vypadá například takto:

itnetwork adm cdrom sudo dip plugdev users lpadmin

Na první pozici je uvedena primární skupina, jejíž název je obvykle shodný se jménem uživatele. Následují sekundární skupiny, které uživateli přidělují další oprávnění.

Zadáme-li jméno uživatele jako parametr příkazu groups, zobrazíme skupiny konkrétního uživatele.

Členy konkrétní skupiny můžeme zobrazit příkazem getent:

getent group sudo

Skupina sudo

Ve výpisu příkazu groups vidíme například skupinu sudo. Členství v této skupině umožňuje používat příkaz sudo, tedy spouštět příkazy s oprávněními uživatele root.

V Ubuntu je uživatel vytvořený při instalaci do této skupiny přidán automaticky. V jiných distribucích je potřeba uživatele přidat ručně:

sudo usermod -a -G sudo jmeno_uzivatele

Změna se projeví až po odhlášení a novém přihlášení. Pokud ji chceme použít okamžitě v aktuálním terminálu, použijeme příkaz newgrp sudo.

Vytvoření skupiny

Novou skupinu vytvoříme příkazem groupadd. Vytvoříme například skupinu redactors:

sudo groupadd redactors

Skupina redactors nám bude například sdružovat všechna společná oprávnění pro uživatele, kteří jsou redaktoři.

V některých případech můžeme potřebovat vytvořit skupinu se specifickým GID. Skupinu redactors s GID 2022 vytvoříme takto:

sudo groupadd -g 2022 redactors

Pokud již v systému existuje skupina se stejným GID, příkaz vypíše chybové hlášení a skupinu nevytvoří.

Nastavení skupiny

Každou skupinu můžeme dále spravovat – například změnit její název, upravit její GID nebo nastavit heslo. K tomu slouží příkaz groupmod a jeho přepínače.

Změna názvu

Nový název editors pro skupinu redactors nastavíme přepínačem -n:

sudo groupmod -n editors redactors

Změna GID

Nové GID 5050 nastavíme přepínačem -g:

sudo groupmod -g 5050 editors

Odebrání uživatele ze skupiny

Pokud potřebujeme odebrat uživatele ze sekundární skupiny, použijeme příkaz gpasswd s přepínačem -d:

sudo gpasswd -d jmeno_uzivatele jmeno_skupiny

Alternativně můžeme použít příkaz deluser:

sudo deluser jmeno_uzivatele jmeno_skupiny

Odstranění skupiny

Skupinu odstraníme příkazem groupdel:

sudo groupdel editors

Pokud je skupina nastavena jako primární pro některého uživatele, příkaz selže a skupinu neodstraní. Nejprve je nutné změnit primární skupinu daného uživatele.

ACL v Linuxu

Při správě systému brzy zjistíme, že přidělování práv pouze pomocí skupin může být nepraktické. V prostředí s větším počtem uživatelů často potřebujeme nastavit přístup ke konkrétním souborům nebo adresářům jen vybraným uživatelům.

Tento problém řeší ACL (Access Control List), který umožňuje rozšířenou správu oprávnění jednotlivých uživatelů.

Než začneme ACL používat, ověříme, že je v systému dostupné. V Ubuntu se ACL spravuje balíčkem acl, který poskytuje příkazy getfacl a setfacl:

getfacl --version

Výstup vypadá například takto:

getfacl 2.3.2

Pokud příkaz není dostupný, balíček nainstalujeme:

sudo apt install acl

Ukázka omezení přístupu

Nyní si vytvoříme dva uživatele martin a thomas a přepneme se na uživatele martin:

sudo adduser martin
sudo adduser thomas
su martin

Poté si necháme vypsat obsah domovského adresáře uživatele thomas:

ls /home/thomas

Namísto obsahu adresáře obdržíme chybové hlášení:

ls: cannot open directory '/home/thomas': Permission denied

Důvodem je, že nově vytvořený uživatel martin nemá oprávnění ke čtení ani vstupu do adresáře /home/thomas. Domovské adresáře jsou standardně přístupné pouze svému vlastníkovi. Kdybychom přidělení práv vyřešili vytvořením společné skupiny, hrozilo by riziko, že později zapomeneme význam skupiny a umožníme tak přístup i jiné osobě.

Zobrazení přístupu

Příkazem getfacl zobrazíme vlastníka souboru, skupinu a aktuální nastavení ACL. Vypišme si ACL pro domovský adresář uživatele thomas:

getfacl /home/thomas

Výstup vypadá například takto:

# file: thomas
# owner: thomas
# group: thomas
user::rwx
group::r-x
other::---

Řádky začínající znakem # obsahují pouze informativní údaje o souboru, samotná oprávnění jsou uvedena na následujících řádcích.

Soubory a adresáře s nastaveným ACL poznáme podle znaku + na konci řetězce oprávnění ve výpisu příkazu ls -la.

Nastavení přístupu

K nastavení přístupu jednotlivým uživatelům nebo skupinám slouží příkaz setfacl. Nyní přidáme uživateli martin práva ke čtení a vstupu do adresáře /home/thomas:

setfacl -m u:martin:r-x /home/thomas

Pro změnu ACL musíme být vlastníkem adresáře (thomas) nebo mít administrátorská práva.

Za přepínačem -m následuje typ záznamu a dvojtečka (:). Typ záznamu určuje, komu práva nastavujeme:

  • u – konkrétní uživatel (user),
  • g – skupina (group),
  • o – ostatní (others),
  • m – maska (omezuje maximální práva).

Poté uvádíme jméno uživatele nebo skupiny (např. martin) a oprávnění, která jsou stejná jako u klasických práv (r, w, x).

V našem případě zápis u:martin:r-x znamená, že uživatel martin má právo číst (r) a vstupovat (x) do adresáře.

Posledním parametrem příkazu je soubor či adresář, kterému ACL nastavujeme.

Nyní se přepneme zpět na uživatele martin a ověříme přístup. Nejprve příkazem exit ukončíme relaci uživatele thomas:

exit
su martin
ls /home/thomas

Příkaz nyní proběhne úspěšně.

Pomocí příkazu getfacl si můžeme ověřit, že ve výpisu přibyl řádek user:martin:r-x:

getfacl /home/thomas

Výstup příkazu vypíše oprávnění adresáře /home/thomas:

# file: thomas
# owner: thomas
# group: thomas
user::rwx
user:martin:r-x
group::r-x
other::---

Rekurzivní nastavení ACL

Pokud chceme nastavit ACL pro adresář včetně všech jeho podadresářů a souborů, použijeme přepínač -R:

sudo setfacl -R -m u:martin:r-x /home/thomas

Výchozí ACL

Výchozí ACL umožňuje nastavit oprávnění, která se automaticky použijí na všechny nově vytvořené soubory a adresáře.

Použijeme přepínač -d:

sudo setfacl -d -m u:martin:r-x /home/thomas

Všechny nově vytvořené soubory v adresáři /home/thomas tak budou mít nastavená stejná oprávnění pro uživatele martin.

Sdílení pomocí ACL

Ukažme si reálný příklad vytvoření sdíleného projektového adresáře pro tým vývojářů:

sudo mkdir /srv/projects
sudo chown :developers /srv/projects
sudo chmod 2775 /srv/projects
sudo setfacl -d -m g::rwx /srv/projects

Zápisem chmod 2775 (číslo 2 na začátku označuje tzv. SGID bit – Set Group ID) zajistíme, že všechny nově vytvořené soubory a adresáře v tomto adresáři automaticky zdědí jeho skupinu.

Výchozí ACL (nastavené pomocí přepínače -d) pak určuje, jaká oprávnění tato skupina k novým souborům získá.

Díky tomu mohou všichni členové skupiny developers do adresáře zapisovat a všechny nově vytvořené soubory jsou automaticky sdílené s celým týmem.

Maska ACL

Po nastavení ACL si ve výpisu příkazu getfacl všimneme řádku mask. Maska určuje maximální možná oprávnění.

Pokud například nastavíme masku:

sudo setfacl -m m::r-x /home/thomas

Uživatel martin může mít přiřazena širší práva, ale maska je omezí pouze na čtení a vstup.

Zamezení přístupu

Oprávnění odebereme pomocí příkazu setfacl s přepínačem -x:

sudo setfacl -x u:martin /home/thomas

Pokud chceme odstranit všechna ACL nastavení ze souboru nebo adresáře, použijeme přepínač -b:

sudo setfacl -b /home/thomas

Zálohování ACL

ACL můžeme zálohovat do souboru:

getfacl -R /home/thomas > acl_backup.txt

Obnovení ACL ze zálohy provedeme příkazem:

setfacl --restore=acl_backup.txt

Závěr

V této lekci jsme se seznámili se správou skupin a nastavením přístupových práv v Linuxu pomocí ACL. Naučili jsme se pracovat se skupinami a přidělovat konkrétní oprávnění jednotlivým uživatelům. Díky ACL nyní dokážeme přesně řídit, kdo má k jakým datům přístup, což je důležité zejména při správě systému a práci na serverech.

V příští lekci, Linuxový terminál (Bash) - Archivace a komprese, se zaměříme na archivaci a kompresi dat v Linuxu. Ukážeme si práci s nástrojem tar i formátem ZIP a naučíme se vytvářet, upravovat a rozbalovat archivy.


 

Předchozí článek
Řešené úlohy k 9.-11. lekci základů Linuxu
Všechny články v sekci
Základy Linuxu
Přeskočit článek
(nedoporučujeme)
Linuxový terminál (Bash) - Archivace a komprese
Článek pro vás napsal Václav Franz
Avatar
Uživatelské hodnocení:
106 hlasů
Aktivity