====== Soubory a vlastnická práva ======
Oprávnění přístupu k souborům a jejich vlastnictví (dále jen práva) je výrazný bezpečnostní prvek, používaný v linuxových systémech. Otřepaná fráze z linuxového světa zní: "Všechno je soubor", což úzce souvisí s [[wp>cs:Open_source|open source licencí]] kterou, jak známo používají systémy[[wp>cs:Linux|GNU/Linux]]. Jiné, související dogma zní: "Každý soubor někomu patří".
Pojďme si to trochu vysvětlit.
===== Co všechno je soubor =====
[[wp>cs:Soubor|Soubor]] může být fotografie z dovolené, ale i text, určující, jak jste připojeni na internet. Je tedy pochopitelné, práva k takto rozdílným souborům nebudou stejná. Nehledejte rozlišování pomocí přípon (jako třeba ''*.exe'' pro spustitelné soubory),v linuxu je to jinak... Možná je to složitější, ale o to přesnější.
===== Zjištění práv a vlastnictví=====
Systémová [[soubory_a_adresare#file|utilita file]] pomůže zjistit o jaký druh souboru se jedná.
[[soubory_a_adresare#ls|Příkaz ls]] pak umí vypsat soubory obsažené v adresáři i různými doplňujícími informacemi.
Jako příklad si necháme vypsat svůj domovský adresář:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
ls -lA
výsledkem bude obsáhlý výpis, plný podobných řádků:
drwxr-xr-x 2 kaja masters 4096 2008-12-06 13:43 Documents/
Ptáte se, co to znamená? Směsice písmen a pomlček na začátku řádku určuje:
^ typ ^ práva vlastníka ^ práva skupiny ^práva ostatních^
| d | rwx | r-x | r-x |
kdy typ může být:
^soubor ^znakové zařízení ^blokové zařízení ^adresář ^link ^
| - | c | b | d | l |
a práva jsou:
^čtení ^zápis ^spouštění^
| r | w | x |
nebo alternativně číselně
^čtení ^zápis ^spouštění^
| r | w | x |
| 4 | 2 | 1 |
další sloupce výpisu určují vlastníka, skupinu, velikost souboru, datum vytvoření a název.
===== Změna práv a vlastnictví =====
Pro změnu práv a vlastnictví může ve většině případů provádět jako [[:root|root]] nebo vlastník souboru. \\
* Pro nastavení práv použijte [[#prikaz_chmod_s_ciselnou_strukturou|příkaz chmod]].
* Pro změnu majitele, nebo skupiny použijte [[#prikaz_chown|příkaz chown]]
==== Příkaz chmod s číselnou strukturou ====
Nejsnažší změnou práv je použití oktálové (osmičkové) struktury: podle tabulky uložené výše je snadno pochopitelné, že každé písmeno určující práva má svojí číselnou alternativu. Z toho vychází oktálová syntaxe.
příklad:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod [MAJITEL, SKUPINA nebo OSTATNÍ] soubor
tedy vyjádřeno číselně:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod 751 soubor
znamená: ''MAJITEL 4+2+1'', ''SKUPINA 4+1'', ''OSTATNÍ UŽIVATELÉ'', ''NEČLENI SKUPINY 1''.
|Číselná hodnota:|Popis práva:|
|''0''| - žádná práva|
|''1''| - právo spouštění|
|''2''| - právo zápisu|
|''3''| - právo spouštění a zápisu|
|''4''| - právo právo čtení|
|''5''| - právo spouštění a čtení|
|''6''| - právo čtení a zápisu|
|''7''| - právo spouštění, zápisu a čtení|
==== Příkaz chmod se znakovou strukturou ====
Složitější ale s více možnostmi. V prvé řadě je třeba vypsat komu jsou práva měněna:
^u ^g ^o ^a ^
| user | group | others | all |
| vlastník| skupina | ostatní| všichni|
a jakým způsobem jsou měněna:
^+ ^- ^= ^
| přidat | odebrat | je rovno |
takže stejná práva jako v předchozím případě nastavíme pomocí:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod u=rwx,g=rx,o=x soubor
*chmod a adresáře
Podobné je to s právy u adresářů . ''chmod'' lze použít i rekurzivně, tzn. že nastaví práva i v podřízených souborech a adresářích. Slouží k tomu přepínač ''-R'', tedy:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod -R 751 adresář
Další příklad:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod ug=rwx,o=r obrazek.jpg
Výhoda tohoto zápisu je právě v operacích, které lze tímto způsobem s právy dělat. Viz. dále.
==== Jak přesně nastavit práva ====
Následující příklad nastaví pro soubor ''obrazek.jpg'' práva tak, že uživatel může číst, zapisovat, spouštět; skupina může jen čtení; a ostatní nemohou soubor ''obrazek.jpg'' ani číst:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod 740 obrazek.jpg
Jiný způsob by byl :
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod u=rwx,g=r,o= obrazek.jpg
==== Jak přidávat práva ====
Např. potřebuji jen přidat právo zápisu pro skupinu do souboru ''obrazek.jpg''.
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod g+w obrazek.jpg
Jiná práva zůstanou tak jak byly. Tedy u souboru ''obrazek.jpg'' se nezmění žádná práva ani pro majitele souboru ''obrazek.jpg'', ani práva pro ostatní uživatele. Stejně tak se nezmění u skupiny práva čtení a spouštění. Toho nelze při tzv. osmičkovém zápisu dosáhnout.
==== Jak kopírovat práva. ====
Nebo zajímavá možnost kopírovat práva. Např. nastavit taková práva jaká má uživatel, aby měli stejná práva i ostatní.
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod o=u obrazek.jpg
==== Jak kopírovat práva ze souboru. ====
Nebo možnost kopírovat práva z jiného souboru. Např. nastavit práva pro soubor ''obrazek.jpg'' podle toho, jaká práva má soubor ''popisobrazku.txt''.
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chmod -reference=popisobrazku.txt obrazek.jpg
==== Speciální atributy souborů ====
(použijte ''+'' pro nastavení a ''-'' pro odebrání práv)
==== Příkaz chown ====
Opět jako [[:root|root]] můžete změnit i vlastnictví souboru (potažmo adresáře). Syntaxe je jednoduchá:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chown uživatel:skupina soubor
pro adresáře ovšen rekruzivně, aby i obsah adresáře měl stejné majitele:
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chown -R uživatel:skupina adresář
jako příklad použijeme změnu majitele výše uvedeného adresáře z výstupu ''ls -lA''
[[:system:prikazovy_radek#konzole|{{wiki:icons:konzole.png?40 |Konzole}}]]
chown -R root:root /home/kaja/Dokuments
a kájovo dokumenty nejsou kájovo.
==== Příkaz chgrpm ====
''chgrp group1 file1'' změní skupinu souboru ''file1'' \\
''chown user1:group1 file1'' změní uživatele a skupinu souboru ''file1''
==== Příkaz chattr ====
|Příkaz:|Popis příkazu:|
|''chattr +a file1''| - nastaví souboru zápis pouze pro přidávání|
|''chattr +c file1''| - dovolí, aby byl soubor automaticky komprimován / dekomprimován jádrem systému|
|''chattr +d file1''| - nastaví soubor pro vynechání ze zálohování pomocí programu ''Dump''|
|''chattr +i file1''| - nastaví soubor jako neměnný (nemůže být odstraněn, upraven, přejmenován a ani na něj není možné vytvořit odkaz)|
|''chattr +s file1''| - nastaví souboru bezpečné mazání|
|''chattr +S file1''| - nastaví zapsání změn souboru v synchronním módu pomocí ''sync''|
|''chattr +u file1''| - nastaví souboru možnost být obnoven|
==== Příkaz lsattr ====
|Příkaz:|Popis příkazu:|
|lsattr| - zobrazí speciální atributy|
===== Odkazy =====
http://www.manpagez.com/man/1/chmod \\
http://www.manpagez.com/man/8/chown