Portál AbcLinuxu, 1. června 2024 08:10


Přístupová práva

Linux je víceuživatelský systém a je proto nutné zajistit, aby mi ostatní nemohli měnit, číst moje dokumenty. Pokud jim to tedy výslovně nepovolím. Každý soubor (i adresář) v Linuxu má přidělená práva, která upravují práci se souborem.

Příkaz ls vypisuje obsah zadaného adresáře. Přídáním parametru -l si zobrazíme podrobnější informace, včetně práv.

ls
bsd.txt  Desktop  dnsping  linux.txt
ls -l
celkem 16
-rw-r--r--  1 misak users   23 zář  1 23:06 bsd.txt
drwxr-xr-x  2 misak users 4096 zář  1 23:08 Desktop
-rwxr-xr-x  1 misak users  443 zář  1 23:08 dnsping
-rw-r--r--  1 misak users   33 zář  1 23:05 linux.txt

Práva jsou uvedená v prvním sloupci. První znak označuje typ souboru, pomlčka '-' označuje normální soubor, 'd' adresář, dále 'l' je symbolický odkaz, 'c' znakové zařízení, 'b' blokové zařízení a 'p' je pojmenovaná roura (pokud nevíte, co jednotlivé typy znamenají, přečtěte si předešlou kapitolu: Soubory v Linuxu, zvláště pak část Speciální soubory).

Za typem je potom devět znaků, které symbolizují práva. Vždy jsou vypsány v pořadí právo pro čtení 'r', právo pro zápis 'w' a právo pro spuštění 'x'. Na úrovni adresářů 'r' značí, že je možné vypsat seznam souborů, 'w', že je možné do adresáře soubory přidávat nebo je z něj odebírat a 'x', že adresář smí být součástí cesty. První trojice je nastavení platné pro vlastníka souboru (třetí sloupeček - misak), druhá pro skupinu (čtvrtý - users) a poslední pro ostatní. Vlastník souboru je uživatel, který jej vytvořil (nebo bylo na něj vlastnictví převedeno příkazem chown) a obvykle má největší pravomoci. Skupina usnadňuje sdílení souborů mezi uživateli. Můžeme zvýšit práva lidem jen ze svojí skupiny a ne těm, kteří tam nepatří.

Spustitelné soubory

Linux bere soubor jako spustitelný jen tehdy, když má nastavená práva pro spuštění. Tento systém má své kouzlo v tom, že spustitelný soubor může být jakéhokoli typu (binární soubor, skript v shellu), ale z hlediska jeho spouštění je to úplně jedno. U skriptů je podmínka, aby měly na prvním řádku uvedený interpret, který je bude provádět (#!/bin/sh, nebo přenositelněji /usr/bin/env python) a binární soubor musí být podporován jádrem (nejpoužívanější je elf, starším formátem je a.out).

Další práva

Soubor, který je uložený v adresáři, do něhož mají všichni povolen zápis může také kdokoliv smazat. Někdy se hodí, kdyby jej mohl mazat pouze vlastník souboru a nikdo jiný. Typickým představitelem je adresář /tmp. Tento adresář má nastavený sticky (lepkavý) bit, který se nastavuje příkazem chmod +t a ve výpisu příkazu ls je vidět takto:

drwxrwxrwt   39 root  root   3704 zář  6 21:15 tmp

Program spuštěný uživatelem má stejná práva, jako uživatel sám. To znamená, může modifikovat jen ty soubory k nimž má uživatel právo zápisu. Existuje několik případů, kdy je nutné, aby uživatelem spuštěný program běžel pod jiným účtem (zpravidla s vyššími právy). Typickým příkladem je příkaz passwd pro změnu hesla uživatele. Ten musí modifikovat soubor /etc/shadow, kde jsou uložené hashe hesel. Tento soubor není, z pochopitelných důvodů, zapisovatelný pro běžné uživatele. Program passwd má nastaven příznak suid a vlastní jej uživatel root. Program po svém spuštění má práva uživatele root, přestože jej spustil jiný uživatel. Příznak se nastaví příkazem chmod u+s, ls jej pak ukazuje následovně:

ls -l /bin/passwd 
-rws--x--x  1 root root 32108 čec 11 14:30 /bin/passwd

Existuje také podobný příznak setgid, který mění skupinu. Není tolik používán u souborů, ale u adresářů, kdy po aplikaci tohoto příznaku patří všechny nově vytvořené soubory do určené skupiny a ne do uživatelově hlavní. Nastaví se příkazem chmod g+s a výpis vypadá následovně:

drwxr-sr-x   3 root users     4096 zář  1 23:14 foo

Číselné vyjádření

Práva jsou na systémové úrovni reprezentována jako čtyři čísla v rozsahu od 0 až po 7 (tj. tři bity). Tyto číslice reprezentují speciální práva, uživatelská, skupinová a ostatních. Právo pro čtení má hodnotu 4, pro zápis 2 a pro spuštění 1. Jejich součtem potom získáme součtem těchto hodnot. Hodnota 7 (4+2+1) označuje všechna práva, hodnota 5 (4+1) značí právo pro čtení a spuštění. Hodnota 0 pak, celkem logicky, určuje žádná práva.

Speciální práva jsou ohodnocena následovně. 4 je setuid, 2 je setgid a 1 je sticky bit.

Kompletní nastavení adresáře /tmp se tedy dá provést:

# zdlouhavější způsob
chmod a+rwx /tmp        
chmod +t /tmp

# rychlejší způsob
chmod 1777 /tmp         

Změnu vlastníků lze pak provádět pod rootem následně:

chown -cR uzivatel:skupina /tmp      # -cR mění práva rekurzivně i v podadresářích

ACL

Jemnější nastavení práv umožňuje ACL, viz příkazy getfacl a setfacl.

« Předchozí | Nahoru | Obsah | Další »

Dokument vytvořil: vladka, 29.8.2005 11:55 | Poslední úprava: Nicky726, 4.3.2009 09:54 | Další přispěvatelé: Ash, Petr "Glubo" Sýkora | Historie změn | Zobrazeno: 62030×

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.