Příkaz Chmod v Linuxu (oprávnění k souborům)

author
11 minutes, 37 seconds Read

V Linuxu je přístup k souborům spravován prostřednictvím oprávnění, atributů a vlastnictví souborů. Tím je zajištěno, že k souborům a adresářům mohou přistupovat pouze oprávnění uživatelé a procesy.

Tento návod se zabývá tím, jak pomocí příkazu chmod změnit přístupová oprávnění k souborům a adresářům.

Oprávnění k souborům v Linuxu #

Než budeme pokračovat, vysvětlíme si základní model oprávnění v Linuxu.

V systému Linux je každému souboru přiřazen vlastník a skupina a jsou mu přidělena přístupová práva pro tři různé třídy uživatelů:

  • Vlastník souboru.
  • Členové skupiny.
  • Ostatní (všichni ostatní).

Vlastnictví souboru lze změnit pomocí příkazů chowna chgrp.

Pro každou třídu platí tři typy práv k souboru:

  • Právo ke čtení.
  • Právo k zápisu.
  • Povolení ke spuštění.

Tento koncept umožňuje určit, kteří uživatelé mohou soubor číst, zapisovat do něj nebo jej spouštět.

Povolení k souboru lze zobrazit pomocí příkazu ls:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type

První znak ukazuje typ souboru. Může to být běžný soubor (-), adresář (d), symbolický odkaz(l) nebo jiný speciální typ souboru.

Dalších devět znaků představuje oprávnění souboru, tři trojice po třech znacích. První trojice zobrazuje oprávnění vlastníka, druhá skupinová oprávnění a poslední trojice zobrazuje oprávnění všech ostatních. Oprávnění mohou mít různý význam v závislosti na typu souboru.

V uvedeném příkladu (rw-r--r--) znamená, že vlastník souboru má oprávnění ke čtení a zápisu (rw-), skupina a ostatní mají pouze oprávnění ke čtení (r--).

Každá ze tří trojic oprávnění může být sestavena z následujících znaků a má různé účinky podle toho, zda je nastavena na soubor nebo na adresář:

Vliv oprávnění na soubory

Oprávnění Znak Význam na soubor
Číst - Soubor nelze číst. Obsah souboru nelze zobrazit.
r Soubor je čitelný.
Zápis - Soubor nelze změnit ani upravit.
w Soubor lze změnit nebo upravit.
Vykonat - Soubor nelze vykonat.
x Soubor lze vykonat.
s Pokud se nachází v trojici user, nastaví bit setuid. Pokud se nachází v tripletu group, nastaví bit setgid. Znamená to také, že je nastaven příznak x.
Pokud jsou u spustitelného souboru nastaveny příznaky setuid nebo setgid, soubor se spustí s právy vlastníka a/nebo skupiny.
S Stejně jako s, ale příznak x není nastaven. Tento příznak se u souborů používá jen zřídka.
t Pokud se nachází v trojici others, nastavuje bit sticky.
To také znamená, že je nastaven příznak x. Tento příznak je u souborů zbytečný.
T Stejně jako t, ale příznak x není nastaven. Tento příznak je u souborů nepoužitelný.

Vliv oprávnění na adresáře (složky)

Řadiče jsou v Linuxu zvláštní typy souborů, které obsahují jiné soubory a adresáře.

Oprávnění Znak Význam na adresář
Číst - Obsah adresáře nelze zobrazit.
r Obsah adresáře lze zobrazit.
(např. Soubory uvnitř adresáře lze vypsat pomocí ls.)
Zápis - Obsah adresáře nelze měnit.
w Obsah adresáře lze měnit.
(např. lze vytvářet nové soubory, mazat soubory..atd.)
Vykonat - Adresář nelze měnit.
x Adresářem lze procházet pomocí cd.
s Pokud se nachází v trojici user, nastaví bit setuid. Pokud se nachází v tripletu group, nastaví bit setgid. Znamená to také, že je nastaven příznak x. Pokud je u adresáře nastaven příznak setgid, nové soubory v něm vytvořené zdědí ID skupiny adresáře (GID) místo ID primární skupiny uživatele, který soubor vytvořil.
setuid nemá na adresáře žádný vliv.
S Stejné jako s, ale příznak x není nastaven. Tento příznak je u adresářů nepoužitelný.
t Pokud se nachází v trojici others, nastavuje bit sticky.
To také znamená, že je nastaven příznak x. Pokud je u adresáře nastaven bit sticky, může soubory v adresáři mazat nebo přejmenovávat pouze vlastník souboru, vlastník adresáře nebo administrátorský uživatel.
T Stejně jako t, ale příznak x není nastaven. Tento příznak je u adresářů nepoužitelný.

Použití příkazu chmod #

Příkaz chmod má následující obecnou podobu:

chmod MODE FILE...

Příkaz chmod umožňuje změnit oprávnění souboru pomocí symbolického nebo číselného režimu nebo referenčního souboru. Podrobněji si jednotlivé režimy vysvětlíme později v tomto článku. Příkaz může jako argumenty přijmout jeden nebo více souborů a/nebo adresářů oddělených mezerou.

Právo k souboru může změnit pouze root, vlastník souboru nebo uživatel s právy sudo. Při použití příkazu chmod buďte obzvláště opatrní, zejména při rekurzivní změně oprávnění.

Symbolická (textová) metoda #

Syntaxe příkazu chmod při použití symbolického režimu má následující formát:

chmod perms… FILE...

První sada příznaků (), příznaky uživatelů, určuje, ve kterých uživatelských třídách se mění oprávnění k souboru.

  • u – Vlastník souboru.
  • g – Uživatelé, kteří jsou členy skupiny.
  • o – Všichni ostatní uživatelé.
  • a – Všichni uživatelé, totožné s ugo.

Pokud je příznak users vynechán, je výchozí a a oprávnění, která jsou nastavena umaskou, nejsou ovlivněna.

Druhá sada příznaků (), příznaky operací, určuje, zda mají být oprávnění odebrána, přidána nebo nastavena:

  • - Odebere zadaná oprávnění.
  • + Přidá zadaná oprávnění.
  • = Změní aktuální oprávnění na zadaná oprávnění. Nejsou-li za symbolem = zadána žádná oprávnění, odstraní se všechna oprávnění ze zadané třídy uživatelů.

Oprávnění (perms...) lze explicitně nastavit pomocí nuly nebo jednoho či více následujících písmen: r, w, x, X, s a t. Při kopírování oprávnění z jedné třídy uživatelů do druhé použijte jedno písmeno ze sady u, g a o.

Při nastavování oprávnění pro více než jednu třídu uživatelů () použijte pro oddělení symbolických režimů čárky (bez mezer).

Níže jsou uvedeny některé příklady použití příkazu chmod v symbolickém režimu:

  • Přidělte členům skupiny oprávnění ke čtení souboru, ale ne k zápisu a spouštění:

    chmod g=r filename
  • Odstraňte oprávnění ke spouštění pro všechny uživatele:

    chmod a-x filename
  • Odeberte oprávnění k zápisu ostatním uživatelům:

    chmod -R o-w dirname
  • Odeberte oprávnění ke čtení, zápisu a spuštění všem uživatelům kromě vlastníka souboru:

    chmod og-rwx filename

    Téhož lze dosáhnout také pomocí následujícího formuláře:

    chmod og= filename
  • Přidělit oprávnění ke čtení, zápisu a spuštění vlastníkovi souboru, oprávnění ke čtení skupině uživatelů souboru a žádná oprávnění všem ostatním uživatelům:

    chmod u=rwx,g=r,o= filename
  • Přidat oprávnění vlastníka souboru k oprávněním, která mají členové skupiny souboru:

    chmod g+u filename
  • Přidat lepicí bit do daného adresáře:

    chmod o+t dirname

Číslicová metoda #

Syntaxe příkazu chmod při použití číselné metody má následující formát:

chmod NUMBER FILE...

Při použití číselného režimu můžete nastavit oprávnění pro všechny tři třídy uživatelů (vlastníka, skupinu a všechny ostatní) současně.

Příkaz NUMBER může být třímístné nebo čtyřmístné číslo.

Při použití třímístného čísla představuje první číslice oprávnění vlastníka souboru, druhá číslice skupinu souboru a poslední číslice všechny ostatní uživatele.

Každé oprávnění k zápisu, čtení a spuštění má následující číselnou hodnotu:

  • r (čtení) = 4
  • w (zápis) = 2
  • x (spuštění) = 1
  • žádná oprávnění = 0

Číslo oprávnění určité třídy uživatelů je reprezentováno součtem hodnot oprávnění dané skupiny.

Chcete-li zjistit oprávnění souboru v číselném režimu, jednoduše spočítejte součty pro všechny třídy uživatelů. Chcete-li například udělit oprávnění ke čtení, zápisu a spuštění souboru jeho vlastníkovi, oprávnění ke čtení a spuštění souboru jeho skupině a všem ostatním uživatelům pouze oprávnění ke čtení, provedete následující postup:

  • Vlastník: rwx=4+2+1=7
  • Skupina: r-x=4+0+1=5
  • Ostatní: r-x=4+0+0=4

Pomocí výše uvedeného postupu dojdeme k číslu 754, které představuje požadovaná oprávnění.

Pro nastavení příznaků setuid, setgid a sticky bit použijeme čtyřmístné číslo.

Při použití čtyřmístného čísla má první číslice následující význam:

  • setuid=4
  • setgid=2
  • sticky=1
  • bez změn = 0

Další tři číslice mají stejný význam jako při použití třímístného čísla.

Pokud je první číslice 0, lze ji vynechat a režim lze reprezentovat pomocí 3 číslic. Číselný režim 0755 je stejný jako 755.

Pro výpočet číselného režimu lze použít i jinou metodu (binární metoda), ale je to trochu složitější. Znalost výpočtu číselného režimu pomocí 4, 2 a 1 je pro většinu uživatelů dostačující.

Příkazem stat můžete zkontrolovat oprávnění souboru v číselném zápisu:

stat -c "%a" filename
644

Níže uvádíme několik příkladů použití příkazu chmod v číselném režimu:

  • Přidělte vlastníkovi souboru oprávnění ke čtení a zápisu a členům skupiny a všem ostatním uživatelům pouze oprávnění ke čtení:

    chmod 644 dirname
  • Přidělte vlastníkovi souboru oprávnění ke čtení, zápisu a spuštění, členům skupiny oprávnění ke čtení a spuštění a všem ostatním uživatelům žádná oprávnění:

    chmod 750 dirname
  • Přidělení oprávnění ke čtení, zápisu a spouštění a lepicího bitu danému adresáři:

    chmod 1777 dirname
  • Rekurzivně nastavit oprávnění ke čtení, zápisu a spouštění vlastníkovi souboru a žádná oprávnění pro všechny ostatní uživatele daného adresáře:

    chmod -R 700 dirname

Použití referenčního souboru #

Volba --reference=ref_file umožňuje nastavit oprávnění souboru tak, aby byla stejná jako u zadaného referenčního souboru (ref_file).

chmod --reference=REF_FILE FILE

Například následující příkaz přiřadí oprávnění souboru file1 na file2

chmod --reference=file1 file2

Rekurzivní změna oprávnění souboru #

Chcete-li rekurzivně pracovat se všemi soubory a adresáři v daném adresáři, použijte volbu -R (--recursive):

chmod -R MODE DIRECTORY

Příklad pro změnu oprávnění všech souborů a podadresářů pod adresářem /var/www na 755 použijete:

chmod -R 755 /var/www

Operace na symbolických odkazech #

Symbolické odkazy mají vždy oprávnění 777.

Ve výchozím nastavení se při změně oprávnění symlinku chmod změní oprávnění souboru, na který odkaz ukazuje.

chmod 755 symlink

Je pravděpodobné, že místo změny vlastnictví cíle se zobrazí hlášení „nelze přistupovat k ‚symlink‘:

K chybě dochází proto, že ve výchozím nastavení většiny linuxových distribucí jsou symlinky chráněny a s cílovými soubory nelze pracovat. Tato volba je specifikována v /proc/sys/fs/protected_symlinks. 1 znamená povoleno a 0 zakázáno. Doporučuje se ochranu symlinků nevypínat.

Hromadná změna oprávnění souborů #

Někdy nastanou situace, kdy byste potřebovali hromadně změnit oprávnění souborů a adresářů.

Nejčastějším scénářem je rekurzivní změna oprávnění souboru webu na 644 a oprávnění adresáře na 755.

Pomocí číselné metody:

find /var/www/my_website -type d -exec chmod 755 {} \;find /var/www/my_website -type f -exec chmod 644 {} \;

Pomocí symbolické metody:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

Příkaz find vyhledá soubory a adresáře pod /var/www/my_website a každý nalezený soubor a adresář předá příkazu chmod k nastavení oprávnění.

Závěr #

Příkaz chmod změní oprávnění souboru. Oprávnění lze nastavit v symbolickém nebo číselném režimu.

Pro více informací o příkazu chmod navštivte manuálovou stránku chmod.

.

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.