GNU/Linux >> Znalost Linux >  >> Linux

Linux – Rozumíte unixovým oprávněním a typům souborů?

Nikdy jsem pořádně nepochopil, jak chmod pracoval až do dneška. Sledoval jsem tutoriál, který mi vysvětlil velkou věc.

Například jsem četl, že máte tři různé skupiny oprávnění:

  • vlastník (u )
  • skupina (g )
  • všichni (o )

Na základě těchto tří skupin nyní vím, že:

  • Pokud je soubor ve vlastnictví uživatele, o přístupu rozhodují uživatelská oprávnění.
  • Pokud je skupina souboru stejná jako skupina uživatele, určuje přístup skupinové oprávnění.
  • Pokud uživatel není vlastníkem souboru a není ve skupině, použije se jiné oprávnění.

Také jsem se dozvěděl, že máte následující oprávnění:

  • číst (r )
  • zapsat (w )
  • spustit (x )

Vytvořil jsem adresář, abych otestoval své nově nabyté znalosti:

mkdir test

Pak jsem provedl nějaké testy:

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

Po nějaké době blbnutí si myslím, že jsem konečně pochopil chmod a způsob, jakým nastavíte oprávnění pomocí tohoto příkazu.

Ale…

Ještě mám pár otázek:

  • Co znamená d na startu stojí?
  • Jaký je název a použití obsahujícího bloku a jaké další hodnoty může obsahovat?
  • Jak jej mohu nastavit a zrušit?
  • Jaká je hodnota tohoto d ? (Protože máte pouze 7=4+2+1 7=4+2+1 7=4+2+1)
  • Proč lidé někdy používají 0777 místo 777 nastavit jejich oprávnění?

Ale protože bych neměl klást více otázek, pokusím se to položit jedinou otázkou.

V systému založeném na UNIXu, jako jsou všechny distribuce Linuxu, co se týká oprávnění, co dělá první část (d ) znamená a k čemu tato část oprávnění slouží?

Přijatá odpověď:

Na vaše otázky odpovím ve třech částech:typy souborů, oprávnění a případy použití pro různé formy chmod .

Typy souborů

První znak v ls -l výstup představuje typ souboru; d znamená, že je to adresář. Nelze jej nastavit ani zrušit, záleží na tom, jak byl soubor vytvořen. Úplný seznam typů souborů naleznete v dokumentaci ls; ti, na které pravděpodobně narazíte, jsou

  • - :„běžný“ soubor, vytvořený pomocí libovolného programu, který umí zapisovat soubor
  • b :speciální blokový soubor, obvykle disková zařízení nebo zařízení s oddíly, lze vytvořit pomocí mknod
  • c :znakový speciální soubor, lze také vytvořit pomocí mknod (viz /dev pro příklady)
  • d :adresář, lze vytvořit pomocí mkdir
  • l :symbolický odkaz, lze vytvořit pomocí ln -s
  • p :pojmenované potrubí, lze vytvořit pomocí mkfifo
  • s :socket, lze vytvořit pomocí nc -U
  • D :door, vytvořený některými serverovými procesy na Solaris/openindiana.

Oprávnění

chmod 0777 se používá k nastavení všech oprávnění v jednom chmod provádění, spíše než kombinování změn pomocí u+ atd. Každá ze čtyř číslic je osmičková hodnota představující sadu oprávnění:

  • suid , sgid a „lepkavý“ (viz níže)
  • uživatelská oprávnění
  • skupinová oprávnění
  • „jiná“ oprávnění

Osmičková hodnota se vypočítá jako součet oprávnění:

  • „přečíst“ je 4
  • „write“ je 2
  • „provést“ je 1

Pro první číslici:

  • suid je 4; binární soubory s touto bitovou sadou běží jako uživatel vlastníka (obvykle root )
  • sgid je 2; binární soubory s touto bitovou sadou běží jako jejich skupina vlastníků (toto bylo používáno pro hry, takže bylo možné sdílet vysoké skóre, ale v kombinaci se zranitelností ve hrách je to často bezpečnostní riziko) a soubory vytvořené v adresářích s touto bitovou sadou patří do skupina vlastníků adresáře ve výchozím nastavení (toto je užitečné pro vytváření sdílených složek)
  • „sticky“ (nebo „omezené mazání“) je 1; soubory v adresářích s touto bitovou sadou může smazat pouze jejich vlastník, vlastník adresáře nebo root (viz /tmp pro běžný příklad tohoto).
Související:Linux – správný postup pro nahrazení MDM LightDM v Linux Mintu?

Viz chmod manuálová stránka pro podrobnosti. Všimněte si, že v tom všem ignoruji další bezpečnostní funkce, které mohou změnit uživatelská oprávnění k souborům (SELinux, souborové ACL…).

Se speciálními bity se zachází odlišně v závislosti na typu souboru (běžný soubor nebo adresář) a základním systému. (To je zmíněno v chmod manpage.) Na systému, který jsem použil k testování (pomocí coreutils 8.23 na ext4 souborový systém s linuxovým jádrem 3.16.7-ckt2), chování je následující. U souboru jsou speciální bity vždy vymazány, pokud nejsou explicitně nastaveny, takže chmod 0777 je ekvivalentní chmod 777 a oba příkazy vymažou speciální bity a dají všem plná oprávnění k souboru. U adresáře nejsou speciální bity nikdy zcela vymazány pomocí čtyřmístné číselné formy, takže ve skutečnosti chmod 0777 je také ekvivalentní chmod 777 ale je to zavádějící, protože některé speciální bity zůstanou tak, jak jsou. (Předchozí verze této odpovědi to měla špatně.) Chcete-li vymazat speciální bity v adresářích, musíte použít u-s , g-s a/nebo o-t explicitně nebo zadejte zápornou číselnou hodnotu, takže chmod -7000 vymaže všechny speciální bity v adresáři.

V ls -l výstup, suid , sgid a „sticky“ se objeví místo x záznam:suid je s nebo S namísto x uživatele , sgid je s nebo S místo x skupiny a „sticky“ je t nebo T místo x ostatních . Malé písmeno označuje, že jsou nastaveny speciální bit i spustitelný bit; velké písmeno znamená, že je nastaven pouze speciální bit.

Různé formy chmod

Kvůli výše popsanému chování, použití celých čtyř číslic v chmod může být matoucí (alespoň se ukázalo, že jsem byl zmatený). Je to užitečné, když chcete nastavit speciální bity i bity oprávnění; jinak jsou bity vymazány, pokud manipulujete se souborem, zachovány, pokud manipulujete s adresářem. Takže chmod 2750 zajišťuje, že získáte alespoň sgid a přesně u=rwx,g=rx,o=; ale chmod 0750 nemusí nutně vymazat speciální bity.

Použití numerických režimů místo textových příkazů ([ugo][=+-][rwxXst] ) jde pravděpodobně spíše o zvyk a cíl příkazu. Jakmile jste si zvykli na používání numerických režimů, je často snazší určit celý režim tímto způsobem; a je užitečné mít možnost myslet na oprávnění pomocí číselných režimů, protože je může používat mnoho dalších příkazů (install , mknod …).

Některé textové varianty se mohou hodit:pokud chcete jednoduše zajistit, aby soubor mohl spustit kdokoli, chmod a+x to udělá bez ohledu na to, jaká jsou ostatní oprávnění. Podobně +X přidá oprávnění ke spuštění pouze v případě, že jedno z oprávnění ke spuštění je již nastaveno nebo je soubor adresář; to může být užitečné pro globální obnovu oprávnění, aniž byste museli používat speciální případy souborů v. adresáře. Tedy chmod -R ug=rX,u+w,o= je ekvivalentní použití chmod -R 750 do všech adresářů a spustitelných souborů a chmod -R 640 do všech ostatních souborů.


Linux
  1. Jak zkopírovat oprávnění a vlastnictví souboru do jiného souboru v Linuxu

  2. Oprávnění pro Linux:Úvod do chmod

  3. Oprávnění souborů v Linuxu s příkladem

  1. Jak povolím indexování souborů a adresářů Apache v systému Linux nebo UNIX?

  2. Přehled procesu UNIX (uvnitř procesu Linux a typy procesů)

  3. Pochopení oprávnění UNIX a typů souborů

  1. Základy oprávnění k souborům Linux

  2. Oprávnění a ukládání souborů?

  3. UNIX / Linux:Průvodce pro začátečníky k oprávněním k souborům a adresářům (umask, chmod, čtení, zápis, spouštění)