Uživatelé, skupiny a oprávnění v Linuxu

Uživatelé

Mnohdy je v různých distribucím Linuxu po čerstvé instalace k dispozici pouze jeden uživatel, pomocí něhož se můžeme do systému přihlásit. Standardně jde o uživatele pojmenovaného jako root, který má nejvyšší oprávnění. Takový uživatel může číst a měnit libovolné položky (složky, soubory) kdekoliv v rámci celé adresářové struktury, stejně tak jako spouštět jakékoliv skripty.

Domovské adresáře /home/user, /root

Vedle nejvyššího uživatele root se můžeme v systému Linux setkat také s „běžnými“ uživateli. Jak se liší? Běžný uživatel nemusí mít ani zdaleka taková oprávnění jako root.

Kam ale může takový uživatel přistupovat? Obecně má tento uživatel vytvořen svůj tzv. „domovský adresář“, a to formou podsložky v /home. Běžný uživatel Linuxu user tedy bude za normálních okolností mít vytvořen adresář /home/user, v němž bude moci provádět cokoliv.

Jak vytvořit uživatele?

Uživatele lze vytvořit příkazem adduser, za nímž bude bezprostředně po mezeře následovat jméno uživatele. Například takto

root@ubuntu:~$ adduser user

Každý uživatel musí mít unikátní uživatelské jméno. Chceme-li uživateli zároveň vytvořit i domovskou složku v již výše zmiňovaném adresáři /home, docílíme toho pomocí přepínače -m

root@ubuntu:~$ adduser -m user

Aby se však uživatel mohl přihlásit do terminálu, musíme mu říci, jaké prostředí má používat. Pomocí přepínače -s mu proto nastavíme defaultní shell na bash, který se nachází v /bin/bash takto

root@ubuntu:~$ adduser -m -s /bin/bash user

Jak nastavit uživateli heslo?

Uživatele máme vytvořeného, ale aby se mohl přihlásit, je vhodné mu nastavit také heslo. To učiníme příkazem passwd následovaným již existujícím uživatelem (tzn. nejdříve vytvořme uživatele pomocí adduser a až následně mu nastavme heslo)

root@ubuntu:~$ passwd user

Prompt (v terminálu) nás nyní vyzve k zadání nového hesla. Potvrdíme Enterem a pro ověření zopakujeme heslo znovu.

Co když nejsem root? Vhod přijde sudo

Pokud nejsi root a přesto chceš vytvořit libovolného uživatele či mu změnit heslo, musíš mít odpovídající oprávnění. Těm se budeme věnovat v závěru kapitoly. Pokud však nejsi rootem, ale máš oprávnění používat jako root určité příkazy, přidáš před ně tzv. sudo

jinyuzivatel@ubuntu:~$ sudo adduser -m -s /bin/bash user
jinyuzivatel@ubuntu:~$ sudo passwd user

Daemon – uživatel s omezenými právy

Vedle uživatelských účtů typu root, běžné účtu s privilegii root a běžného účtu existují ještě takzvaní daemons. Jde o speciální uživatelé, kteří nemají heslo a nemohou se přihlásit.

I přesto však mají oprávnění. K čemu je to dobré? Představme si webovou aplikaci, která běží pod uživatelem root. Záškodnický hacker ji napadne pomocí dosud neobjevené zranitelnosti a rázem má plnou kontrolu nad systémem, neboť může systém ovládat příkazy jako root.

Toto nechceme. Proto je vhodné každou aplikaci či skript spouštět pod individuálním uživatelem, respektive nyní daemonem, který bude mít práva omezena pouze na nezbytné minimum. Bude moci nahlížet jen do nutných složek, aby se v případě napadení minimalizovaly škody v rámci systému.

UID

Pod zkratkou UID se skrývá „User Identification Number“, tedy uživatelské identifikační číslo, které je napříč všemi uživateli v daném systému unikátní. Dva uživatelé nemohou mít, stejně jako uživatelské jméno, totožné UID. Uživatel root má zpravidla UID 0. Tato ID lze zjistit ze souboru /etc/passwd.

Skupiny

Skupiny v operačním systému Linux nám umožňuje velmi jednoduše a intuitivně přidělovat hromadně oprávnění jednotlivým uživatelům. Díky tomu získají uživatelé přístup k souborům, které potřebují ke své práci, a ke zbytku se nedostanou, popřípadě budou moci některé soubory jen číst, kdežto jiné i editovat.

Lze vytvářet neomezeně mnoho skupin, přidávat do nich libovolné množství uživatelů a nastavovat jim různá oprávnění. Jak na to?

Root s omezenými právy? To je sudoers

V kapitole zaměřené na uživatele jsme se seznámili s tím, jakým způsobem spouštět určité commandy i za situace, kdy nemáte root oprávnění. Tím je příkaz sudo. Ovšem co když nechceme, aby si daný uživatel (v rámci skupiny) mohl dělat, co bude chtít?

Pomůže nám v tom soubor /etc/sudoerrs, v němž můžeme snadno definovat, jaké uživatelské skupiny mohou spouštět jaké příkazy. Tím zcela jasně omezíme činnost „falešných“ (ale chtěných) root uživatelů.

Zobrazíme-li si tento soubor, např. takto

root@ubuntu:~$ cat /etc/sudoerrs

uvidíme něco v tomto formátu

root ALL=(ALL) ALL

Pokud tedy chceme dovolit uživateli user, aby měl privilegia totožná s uživatelem nginx, provedeme to následovně

user localhost = (nginx) ALL, (root) /usr/bin/su nginx

Tím jsme doslovně nastavili, že uživatel user může spouštět lokálně (localhost) jakékoliv commandy jménem (a oprávněními) uživatele nginx a zároveň dovolujeme pomocí příkazu su (switch users) se za tohoto uživatele přihlásit do shellu (terminálu).

GID

Podobně jako UID je GID „Group Identification Number“, tedy jednoznačný číselný identifikátor skupiny v systému unikátní.

Vytvoření nové skupiny

Podobně, jako jsme přidávali nové uživatele do systému, můžeme vytvářet také nové skupiny. Například tímto příkazem

root@ubuntu:~$ addgroup mojeskupina

vytvoříme novou skupinu mojeskupina. Nemáme-li oprávnění (nejsme přihlášení za uživatele root), použijme na začátku příkaz sudo.

Přidání uživatele do skupiny

Chceme-li přidat uživatele user do skupiny mojeskupina, učiníme tak přepínačem -G u příkazu useradd, kde prvním parametrem je název již existující skupiny a druhým parametrem je jméno uživatele.

root@ubuntu:~$ useradd -G mojeskupina user

Každý uživatel má však také svou tzv. primární skupina. Zpravidla je její název shodný s názvem uživatelského účtu. Primární skupinu změníme u uživatele takto

root@ubuntu:~$ usermod -g jinaskupina user

Seznam všech skupin v systému

Pro výpis všech skupin využijme commandu groups, chceme-li vypsat i jejich ID, příkaz je jednoduše id

root@ubuntu:~$ groups
root@ubuntu:~$ id

Změna skupiny u souboru

Nyní jsme nakousli problematiku samotných oprávnění, kterou detailněji probereme až v následující kapitole. Prozatím si však alespoň prozraďme, že každý soubor a složka má tzv. svou vlastnickou skupinu a vlastníka (uživatele).

Chceme-li změnit vlastnickou skupinu na mojeskupina souboru ahoj.txt, provedeme to následujícím příkazem

root@ubuntu:~$ chgrp mojeskupina ahoj.txt

Více v další kapitole...

Oprávnění

Základní práva rwx - read, write, execute

Aby si v Linuxu nemohl kdokoliv dělat cokoliv, existují oprávnění. Ta udávají, kdo daný soubor či složku může zobrazit, kdo editovat a kdo spustit (jedná-li se o skript). Jednoduše lze oprávnění rozdělit na 3 atributy bash rwx, a to read, write, execute, tedy čtení, zápis a spouštění.

Na první pohled by se mohlo zdát, že mám-li oprávnění ke čtení zápisu i spouštění v rámci složky, mohu takto manipulovat i s každým jednotlivým souborem v této složce. Ale opak je pravdou – i na toto potřebuji jednotlivá oprávnění u každého takového souboru.

Práva na souboru vs. na složce

Podívej se do tabulky níže pro názorné vysvětlení.

právo soubor složka
read (r) čtení souboru čtení složky a názvů souborů v ní
write (w) zápis do souboru vytváření souborů a složek
execute (x) spuštění souboru vstup do adresáře

Práva pro vlastníka, skupinu a ostatní

Aby to nebylo tak jednoduché, každý soubor i adresář disponuje hned třemi úrovněmi oprávnění. Jiná práva ke stejnému objektu může mít vlastník, skupina a ostatní. Mezi tzv. „ostatní“ se řadí tací uživatelé, kteří nejsou vlastníky a ani nejsou členy vlastnické skupiny souboru/složky.

V důsledku proto máme hned 9 tzv. atributů oprávnění, a to rwxrwxrwx. Opakuje se nám zde třikrát rwx – jednou pro vlastníka, poté pro skupinu a nakonec pro ostatní.

Že to není srozumitelné? Řekněme, že chceme, aby soubor

  • vlastník mohl číst, měnit a spouštět
  • skupina mohla číst a spouštět
  • ostatní nemohli nic

V případě, že některé oprávnění „chybí“ (není přiděleno – např. skupina nemůže měnit - zapisovat), nahradí se pomlčkou. Oprávnění souboru dle zadání výše by vypadalo následovně

  • rwx pro vlastníka
  • r-x pro skupinu (chybí w, nemůže zapisovat)
  • --- pro ostatní (nemohou nic, nemají žádná oprávnění k souboru)

Finální zápis proto bude znít rwxr-x---.

Práva rwx číslicově aneb rw-r----- == 640

Aby byl zápis jednodušší, každému právu (rwx - čtení, zápisu a spouštění) je přiděleno číslo, jejichž sečtením získáme hodnotu oprávnění pro vlastníka, skupinu či ostatní.

Následující zápisy jsou ekvivalentní

právo textově právo číslicově
read (r) 4
write (w) 2
execute (x) 1

Čísla jsou záměrně tvůrci tohoto systému volena tak, aby jejich součet vždy dával jednoznačné oprávnění. Vezmeme-li příklad uvedený výše (rwxr-x---) a sečteme oprávnění vždy pro vlastníka, skupinu a ostatní zvlášť, získáme 750.

Jak jsme k tomu došli?

  • vlastník může číst (4), zapisovat (2) a spouštět (1), součet je 7
  • skupina může číst (4) a spouštět (1), součet je 5
  • ostatní nemohou nic, součet je 0

Proto například zápis rw-r-----, který „lidsky“ znamená toto

  • vlastník může číst a zapisovat (celkem 4 + 2 + 0 = 6)
  • skupina může pouze číst (celkem 4 + 0 + 0 = 4)
  • ostatní nemohou nic (celkem 0 + 0 + 0 = 0)

můžeme zapsat jako 640.

chown

V závěru kapitoly o skupinách jsme si prozradili, jakým způsobem lze měnit vlastnickou skupinu. Změnit vlastníka (tedy uživatele) souboru ahoj.txt na uživatele user je velmi jednoduché a provedeme to následujícím příkazem

root@ubuntu:~$ chown user ahoj.txt

chmod

Díky tomu, že víme, jakým způsobem funguje číslicové znázornění práv, můžeme jednoduše měnit oprávnění u souborů i složek tímto zápisem složeným z čísel. Jak na to? Pokud chceme změnit oprávnění souboru ahoj.txt na 640, provedeme to takto

root@ubuntu:~$ chmod 640 user ahoj.txt

Udělení sudo (root) oprávnění běžnému uživateli usermod

Chceme-li uživateli user přidělit oprávnění uživatele root, provedeme to velmi jednoduše pomocí commandu

root@ubuntu:~$ usermod -a -G sudo user

Tím jsme uživatele user přidali do skupiny sudo, která má plná oprávnění. Pouze bude nutné před každým příkazem, který má být spuštěný jako root, uvést frázi „sudo“ (tedy zkratku „super user do“ – česky „superuživateli udělej”).

results matching ""

    No results matching ""