Linux: soubory - oprávnění



1. Východiska

Systém UNIX (1970) byl od prvopočátku navržen jako víceuživatelský. Tuto vlastnost převzal i systém Linux (1992). Windows byl ještě v roce 1998 stále jednouživatelský. Technicky podporoval více uživatelů, ale bez jakékoliv ochrany dat. Podpora více uživatelů přišla až v roce 2000 s Windows 2000.

Standard POSIX definuje systém oprávnění, který používají všechny unixové systémy (UNIX, GNU/Linux, macOS, iOS, Android, WebOS, Tizen...). Ten umožňuje definovat pravidla přístupových práv, aby uživatelé nemohli přistupovat k citlivým datům jiných uživatelů, zajišťuje maximální bezpečnost systému atp.

Systémy Windows si přístupová oprávní řeší po svém – tedy úplně jiným způsobem nekompatibilním se standardem POSIX.

2. Výpis oprávnění

Každý soubor a adresář má přidělena různá oprávnění (i ty skryté). Ty se vztahují na tři kategorie uživatelů: vlastníka, skupinu a ostatní. Jsou vidět v podrobném výpisu adresáře (přepínač -l):

$ ls -l
$ ls -la

Výpis by mohl vypadat například takto (toto je pouze ukázkový příklad, který by ve skutečnosti těžko nastal):

3. Význam symbolů

4. Typ souboru

První znak zobrazuje typ souboru. Znaků je víc. Pro běžné potřeby stačí znát tyto tři:

Znak Význam
- (pomlčka) běžný soubor
d adresář (directory)
l symbolický odkaz
(něco jako Zástupce ve Windows)

5. Oprávnění

Zbylých devět znaků definuje oprávnění pro tři skupiny uživatelů:

První znak každé trojice je r čtení (read), druhý w zápis (write), třetí je x spouštění (executable). Písmeno x u adresáře znamená právo jej "otevírat" (vstupovat do něj).

Pokud je na příslušném místě místo nich znak - (pomlčka), je příslušné oprávnění odepřeno.

Právo Význam u souboru Význam u adresáře
r Čtení souboru Čtení názvů obsažených položek
w Zápis do souboru Vytváření souborů a adresářů
x Spuštění souboru Vstup do adresáře

6. Vlastník a skupina

To jsou ty dva sloupce se jmény.

  1. první sloupec je vlastník (majitel)
  2. druhý sloupec název skupiny.

U vlastních souborů se skupina jmenuje stejně jako vlastník a jediným členem jste pouze vy.

7. Změna oprávnění

Změny oprávnění může provádět pouze vlastník. Ve výchozím nastavení jsou všechna nastavena tak, aby je nebylo nutné měnit. V některých konkrétních případech jsou naopak změny nezbytné (např. spouštění skriptů). Základní syntaxe je:

$ chmod <cislo> <soubor|adresar>

Parametr <cislo> je trojciferné vyjádření oprávnění v intervalu 000777. První cifra je vlastník, druhá skupina, třetí ostatní. Oprávnění tvoří součet čísel 4, 2 a 1.

Příklady některých běžných oprávnění:

rwx------  700
rw-------  600
rw-r--r--  644
rw-rw----  660
rwxr-wr-x  755
rwxrwx---  770
rwxrwxrwx  777
rw-rw-rw-  666

💡 Vlastník si ke svým souborům může práva upravovat bez omezení – rizika, že si je po odebrání práv nebude moci přidat.

Práva se kódují v oktalové číselné soustavě. Minimální je kód 000, maximální 777. Kolik to je možností?

Čísla 1, 2 a 4 jsou mocniny řádů: 20 = 1, 21 = 2, 22 = 4.

Zajímavý je tento pohled:

DEC  BIN  odpovídá
 0   000  ---
 1   001  --x
 2   010  -w-
 3   011  -wx
 4   100  r--
 5   101  r-x
 6   110  rw-
 7   111  rwx

8. Změna oprávnění (relativní mód)

Tento způsob je oproti číselnému praktičtější:

  1. oprávnění měníme bez ovlivnění stávajících oprávnění,
  2. není nutné počítání.

Několik příkladů:

$ chmod +x soubor
$ chmod g+r soubor
$ chmod go-w soubor
$ chmod o+rw soubor

u = user (vlastník), g = group (skupina), o = other (ostatní), a = all (všichni, ekvivalent ugo).
+ oprávnění přidává, - oprávnění odebírá.

Tento způsob se nejčastěji využívá pro přidání oprávnění spouštění (+x).

Pokud chybí písmeno "komu", přidá se všem (viz první ukázkový příklad).

9. Změna vlastníka nebo skupiny

Tyto změny běžný uživatel provádět nesmí. Na to má oprávnění pouze root nebo uživatel s právy sudo. Pro ně se práva nekontrolují. Jsou zde uvedeny pouze pro úplnost.

$ chown <nazev> <soubor>
$ chgrp <nazev> <soubor>

Seznam uživatelů je v souboru /etc/passwd, seznam skupin v souboru /etc/group.

Linuxový terminál nabízí bohatý příkazový aparát pro správu těchto kategorií. Existují příkazy jako groups, adduser a řada dalších.

10. ❓ Kontrolní otázky

  1. V jaké číselné soustavě jsou číselné zápisy oprávnění?
  2. Jak se z výpisu adresáře pozná, co je adresář a co soubor?
  3. Přepište do notace r,w,x číselné oprávnění NNN.
  4. Zapište číselně oprávnění -rw-rw-r-- (nebo jiné).
  5. Které z oprávnění zajistí, že do adresáře budete mít přístup pouze vy a nikdo jiný?
  6. Poslední trojice znaků v zápise oprávnění se vztahuje na...
  7. Jakému číselnému vyjádření odpovídá oprávnění adresáře /root?
  8. Co znamená oprávnění x u adresáře?
  9. Co znamená oprávnění x u souboru?
  10. Existuje nástroj, který dokáže převést oprávnění složek a souborů z operačních systému Unixového typu do Windows a opačně?
  11. Co reprezentují dva sloupce se jmény v podrobném výpisu adresáře?
  12. Pomocí relativního módu upravte stávající oprávnění ... na ...
  13. Jaký příkaz slouží pro změnu oprávnění a jakou má syntaxi?
  14. Ve kterých souborech jsou uloženy seznamy uživatelů a skupin?

11. 🖥️ Cvičení

11.1. prava1

Vytvořte adresář ~/prava1 a přesuňte se do něj. Další činnosti provádějte v něm.

  1. Zkopírujte do něj soubor /etc/apt/sources.list pod novým názvem zdroje.
  2. Souboru zdroje přidejte práva zápisu skupině.
  3. Přesměrujte výstup příkazu ascii –d do souboru ascii.txt.
  4. Vytvořte soubor prg.c a přidejte právo spouštění pouze sobě.
  5. Do nového souboru .config zapište v číselném vyjádření jeho oprávnění.
  6. Vytvořte podadresář zaloha a nastavte mu práva rwx------.

11.2. prava2

Vytvořte adresář ~/prava2 a přesuňte se do něj. Další činnosti provádějte v něm.

  1. Do tohoto adresáře zkopírujte soubor /etc/fstab.
  2. Nastavte mu práva na rw-------.
  3. Změňte mu název na disky.
  4. Vytvořte skrytý adresář config.
  5. Nastavte mu práva tak, aby jej mohl otevřít pouze majitel.
  6. Do souboru web přesměrujte výpis adresáře /etc/apache2.
  7. Obsah kolika souborů z adresáře /etc/bind si zobrazíte, pokud budete členem skupiny root? Odpověď (číslo) zapište do nového souboru bind.

11.3. prava3

Vytvořte adresář ~/prava3, v něm soubor pr3. Do něj pište pouze číslované odpovědi:

  1. Které kategorie uživatelů (vlastník, skupina, ostatní) budou moci zapisovat do souboru s právy rw-r--rw-?
  2. Přepište předchozí oprávnění v číselném vyjádření:...
  3. Sestavte příkaz, který nastaví práva rwxr-x--- souboru ~/skript.sh.
  4. Jaká práva adresáři skripty budou nastavena číslem 750? Vypište způsobem rwx. Výsledkem bude 10 znaků:...
  5. Přepište číselně práva souboru soubor.txt z obrázku níže:

11.4. prava4

  1. Bude moci zapisovat člen skupiny www-data do souboru s právy -rw-r--rw- (Ano | Ne)
  2. Označte pravdivé tvrzení pro soubor s právy -rwxr-x---
    A. Majitel soboru do něj nesmí zapisovat
    B. Majitel soboru do něj smí zapisovat
    C. Ostatní do ní smí zapisovat
    D. Žádná možnost není správná
  3. Správná práva, která umožnění spouštění souboru (skriptu) kýmkoliv, bude vypadat:
    A. -rwxr-xrw-
    B. drwxr-xr-x
    C. -rwxr-xr--
    D. Žádná možnost není správná
  4. Jaká práva budou nastavena číslem 650? Vypište způsobem rwx...
  5. Sestavte příkaz, který nastaví práva drwxr-x--- adresáři ~/abc