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.

