Práva na soubory a adresáře v systémech UNIXového typu

Práva na soubory a adresáře, aneb co je tvoje je i moje a co je moje do toho ti nic není.

Zobrazení práv na soubory a adresáře:
Použijte příkaz ls -la. Výsledek:

 ls -la
...
drwxr-xr-x   2 root     other         512 pro 25 00:28 .ssh

tzn: d = je to adresář, vlastníkem je root, skupina other. První skupina písmen rwx jsou práva pro vlastníka, druhá skupina písmen r-x jsou práva pro skupinu a třetí jsou práva pro zbytek světa. Výsledkem je, že root smí číst, zapisovat a procházet, a skupina se zbytkem světa jen číst a procházet.
Práva x u souboru znamenají možnost spustit, u adresáře možnost procházet, to znamená že třeba při právech --x nemůžete zapisovat, nemůžete číst tj. příkaz ls skončí hláškou: Permission denied. Pokud si myslíte, že to nemá význam, tak má. Můžete například projít do adresáře, kde už práva budete mít.

Změna vlastníka:

chown user soubor
chown -R user adresar

-R znamená rekurzivně, tj. i pro obsah, lze použít i bez -R.

Změna vlastníka a skupiny současně:

chown user:skupina soubor
chown -R user1:skupina1 adresar

Změna práv bez změny skupiny nebo vlastníka:
Pokud Vám nastavení vlastníka a skupiny vyhovuje, ale potřebujete změnit práva tak použijte příkaz chmod. Prováděné změny lze vyjadřovat písemě a číselně.
Čísla jsou z rozsahu 0 až 7 a když si to celé představíte binárně, tak to dává smysl. Pořadí rwx je dané. Takže tam kde jsou jedničky, tam je i písmenko. A když si binárně zapsaná čísla převedete do desítkové soustavy, vyjdou vám čísla, pomocí kterých změníte práva.

dec    práva  binárně
 0	---	000
 1 	--x	001 
 2 	-w-	010	
 3 	-wx	011
 4 	r--	100
 5 	r-x	101
 6 	rw-	110
 7 	rwx	111

vlastně se nejedna o nic složitého :)

a tato práva se 3x opakují pro:

  rwx	     rwx	  rwx
vlastníka  skupinu      ostatní

tj. příkaz chmod 775 nastaví souboru práva rwxrwxr-x, chmod 500 nastaví r-x------. Mno snad to pochopil každý.

Tak to byla číselná změna. Ještě je možné měnit práva pomocí písmenek.
u = vlastník
g = skupina
o = ostatní

takže chmod u+rw,g-rw,o-rwx nastaví vlastníkovi práva pro čtení a zápis, skupině odere tato práva a pro ostatní nastaví práva ---. Jednotlivé skupiny se oddělují čárkou.

Speciální práva - setuid, setgid, sticky bit
Setuid - pokud je nastaveno na spustitelný soubor, tak výsledný proces, který z programu bude po jeho spuštění běží s právy vlastníka souboru místo toho aby běžel s právy uživatele, který ho spustil. Například:

 ls -la /usr/bin/su
-r-sr-xr-x   1 root     sys        21960 May 11  2004 /usr/bin/su

s místo x znamená setuid bit. To znamená, že pokud jako user zavolám program su, tak se ve skutečnosti spustí pod rootem. viz toto: spustil jsem jako user a výsledek:

user@demo-249 # ps -ef | grep su
    root  3020  3003  0 19:46:33 pts/1    0:00 su -
    user  3021  3006  0 19:46:37 pts/2    0:00 grep su

nastavení suid bitu: chmod 4700 spustitelny_soubor
vyhledání všech souborů na disku s suid bitem: find / -perm 4000

setgid - analogicky stejné jako setuid, akorát je závislé na skupině.

 ls -la /usr/bin/mail
-r-x--s--x   1 root     mail       61416 Oct 21  2004 /usr/bin/mail

To znamená, že program bude spuštěn s právy skupiny mail.
Nastavení guid bitu: chmod 2555 spustitelny_soubor

setgid bit může mít ještě jedno zajímavé použití a to pokud je nastaven na adresář, tak všechny nové objekty, které jsou v tomto adresáři vytvořené mají místo skupiny uživatele skupinu nadřazeného adresáře.
nastavení chmod g+s adresar

Sticky bit se používá v adresářích, do kterých může zapisovat každý, ale není žádoucí aby zde každý mohl mazat i soubory, které mu nepatří. Smazat takový soubor může root, nebo vlastník.

ls -la /tmp/
drwxrwxrwt   7 root     sys          559 Feb 21 21:18 .

Sticky bit je zde označen písmenem t.
nastavení chmod 1755 adresar.

Jak vidíte, nastavení práv je poměrně hrubé. Pro jemnější rozlišení lze použít ACLs - Access Control Lists. O tom zas někdy příště...