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ů chown
a 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é sugo
.
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.
.