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

Nikdy jsem opravdu nezískal, jak chmod fungoval dodnes. Sledoval jsem výukový program, který mi vysvětlil velký problém.

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 soubor vlastní uživatel, určí přístupová oprávnění přístup .
  • Pokud je skupina souboru stejná jako skupina uživatele, přístup určí přístupové oprávnění skupiny.
  • Pokud uživatel není vlastníkem souboru a není ve skupině se použije druhé oprávnění.

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

  • read (r)
  • write (w)
  • provést ()

Vytvořil jsem adresář pro otestování svých nově získaných znalostí:

mkdir test 

Potom Provedl jsem několik testů:

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

Poté, co jsem nějakou dobu klamal, myslím, že jsem se konečně dostal chmod a způsob, jakým nastavujete oprávnění pomocí tohoto příkazu.


Ale …

Stále mám několik otázek:

  • Co dělá d na začátku znamená?
  • Jaký je název a použití příslušného slotu a jaké další hodnoty může obsahovat?
  • Jak to 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 svá oprávnění?

Ale protože bych neměl klást více otázek, zkusím to zeptat v jedna otázka.

V systémech založených na systému UNIX, jako jsou všechny distribuce Linuxu, týkající se oprávnění, co znamená první část (d) a jaké jsou použít pro tuto část oprávnění?

Komentáře

  • Zkuste příště zeptat se pouze na jednu otázku, více otázek je obvykle špatných pro odkazování a téměř nikdy neřešil všechny najednou.
  • @Kiwy I ‚ omlouvám se, myslel jsem si ‚ d líbí se mi to, protože se týká stejného tématu. Pokud chcete, můžete navrhnout lepší název mé otázky a vylepšit ji ‚ s odkazem.
  • Mimochodem, hodnota pro “ d “ je 040000 – lze jej najít v hlavičkových souborech pod názvem S_IFDIR. ‚ jej nepoužíváte při nastavování režimu souboru, ale funkce stat() ve skutečnosti vrátí hodnotu 040750 pro drwxr-x---.
  • @jamesqf Vlastně teď, když chápu, jak se mapují osmičkové kódy, je pro mě ‚ jednodušší o tom přemýšlet .
  • @Peter: neexistují žádné hloupé otázky – jen hloupí, kteří se ‚ neučí, protože ‚ znovu bojím se zeptat.

Odpovědět

Odpovím na vaše otázky 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 jde o adresář. Nelze jej nastavit ani zrušit, záleží na tom, jak byl soubor vytvořen. Úplný seznam typů souborů najdete v ls dokumentaci ; ti, se kterými se pravděpodobně setkáte, jsou

  • -: „obyčejný“ soubor vytvořený jakýmkoli programem, který dokáže soubor zapsat
  • b: blokovat speciální soubor, obvykle disk nebo zařízení s oddíly, lze vytvořit pomocí mknod
  • c: speciální soubor znaků, lze také vytvořit pomocí mknod (příklady viz /dev)
  • d: adresář, který lze vytvořit pomocí mkdir
  • l: symbolický odkaz, lze vytvořit pomocí ln -s
  • p: pojmenovaného kanálu, lze vytvořit pomocí mkfifo
  • s: socket, lze vytvořit pomocí nc -U
  • D: door , vytvořené některými procesy serveru na systému Solaris / openindiana.

Oprávnění

chmod 0777 se používá k nastavení všech oprávnění v jednom chmod namísto kombinování změn s 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í:

  • „read“ je 4
  • „write“ je 2
  • „execute“ je 1

Pro první číslici:

  • suid je 4; binární soubory s touto bitovou sadou běží jako jejich vlastník (obvykle root)
  • sgid je 2; binární soubory s touto sadou bitů fungují jako jejich skupina vlastníků (toto se používalo pro hry, takže bylo možné sdílet vysoké skóre, ale v kombinaci s chybami zabezpečení ve hrách je to často bezpečnostní riziko) a soubory vytvořené v adresářích s touto sadou bitů patří do skupina vlastníků adresáře je ve výchozím nastavení (je to užitečné pro vytváření sdílených složek)
  • „sticky“ (nebo „omezené mazání“) je 1; soubory v adresářích s touto sadou bitů může smazat pouze jejich vlastník, vlastník adresáře nebo root (běžný příklad viz /tmp toho).

Podrobnosti najdete na manuálu chmod stránky . Všimněte si, že při tom všem ignoruji další bezpečnostní funkce, které mohou změnit oprávnění uživatelů k souborům (SELinux, soubor 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í systém. (Toto je uvedeno na stránce chmod.) V systému, který jsem to testoval (s coreutils 8.23 na ext4 souborový systém se systémem Linux kernel 3.16.7-ckt2), chování je následující. U souboru jsou speciální bity vždy vymazány, pokud nejsou výslovně nastaveny, takže chmod 0777 je ekvivalentní chmod 777 a oba příkazy vymaže speciální bity a dát všem úplná oprávnění k souboru. U adresáře nejsou speciální bity nikdy zcela vymazány pomocí čtyřmístného číselného tvaru, takže ve skutečnosti je chmod 0777 ekvivalentní chmod 777 ale je to zavádějící, protože některé speciální kousky zůstanou tak, jak jsou. (Předchozí verze této odpovědi se pokazila.) K vymazání speciálních bitů 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.

Na výstupu ls -l se místo x záznam: suid je s nebo S místo uživatele x je sgid s nebo S místo skupiny x a„ lepkavé “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 označuje, že je nastaven pouze speciální bit.

Různé formy chmod

Kvůli chování popsanému výše je použití úplný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 povolení; jinak jsou bity vymazány, pokud manipulujete se souborem, zachovány, pokud manipulujete s adresářem. chmod 2750 tedy 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žívání numerických režimů místo textových příkazů ([ugo][=+-][rwxXst]) je pravděpodobně spíše případem zvyku a cílem příkazu. Jakmile jste zvyklí používat číselné režimy, je často snazší určit celý režim tímto způsobem; a je užitečné myslet na oprávnění pomocí numerických režimů, protože je může používat mnoho dalších příkazů (install, mknod … ).

Některé textové varianty mohou přijít vhod: pokud chcete jednoduše zajistit, aby soubor mohl spustit kdokoli, chmod a+x to udělá bez ohledu na to, co ostatní oprávnění jsou. Podobně +X přidá oprávnění ke spuštění, pouze pokud je jedno z oprávnění ke spuštění již nastaveno nebo pokud je soubor adresář; to může být užitečné pro globální obnovení oprávnění bez nutnosti zvláštních souborů v. adresářů. chmod -R ug=rX,u+w,o= je tedy ekvivalentní použití chmod -R 750 na všechny adresáře a spustitelné soubory a chmod -R 640 na všechny ostatní soubory.

Komentáře

  • Ostatní odpovědi byly sice docela dobré, ale zodpovězením této otázky jste strávili nějaký čas. Díky.
  • V adresářích * BSD se chovají, jako by jejich bit sgid byl vždy nastaven, bez ohledu na jeho skutečnou hodnotu. Ve FreeBSD lze bit suid nakonfigurovat tak, aby fungoval analogicky s sgid (tj. Soubory a podadresáře vytvořené uvnitř budou mít stejného vlastníka jako adresář ), za předpokladu, že to podporuje základní souborový systém, a je připojen pomocí možnosti suiddir.
  • +X přidá oprávnění ke spuštění, pouze pokud je jedno z oprávnění ke spuštění již nastaveno nebo pokud je soubor adresářem “ děkuji vám @ stephen-kitt chybí dokumentace “ je již nastavena “ dokumentace mě opravdu vrhla na smyčku!

Odpověď

Takže oprávnění v Linuxu jsou velmi důležitá. Pokusím se udělat krátké vysvětlení.

Pro části souborového režimu

Každý soubor Unix má sadu oprávnění, která určují, zda můžete soubor číst, zapisovat nebo spouštět. Spuštěním ls -l se zobrazí oprávnění. Zde je příklad takového zobrazení:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile 

Připojuji obrázek částí režimu souboru:

zde zadejte popis obrázku

Typ se může lišit. Například:

  • d (adresář)
  • c (znakové zařízení)
  • l (symbolický odkaz)
  • p (pojmenovaný potrubí)
  • s (soket)
  • b (blokovat zařízení)
  • D (dveře, u systémů Linux běžné, ale byly přeneseny)

Chcete-li nastavit některá oprávnění pro všechny adresáře, můžete použít atribut R, například:

chmod -R 777 /some/directory/ 

Pro chmod 777 vs 0777

Příkaz chmod obvykle očekává vstup být osmičkovým číslem, počáteční nula odkazuje na hodnotu lepivého / sgid / suid bitového tripletu. V C by to ale znamenalo rozdíl, protože 777 by byl přeložen do 01411 (osmičkový), čímž by se nastavil lepkavý bit (viz chmod(2) man page), číst oprávnění pro vlastníka a spustitelný bit pro skupinu a další (což je docela podivná kombinace).

EDIT 1

Našel jsem další obrázek o oprávnění Linuxu a připojím ho, abych lépe porozuměl: Oprávnění k souborům UNIX

Komentáře

  • Ohledně 777 vs 0777 se mýlíte. Obě jsou osmičková (desetinné místo v každém případě nemá smysl v tomto případě), ale ve čtyřmístném tvaru první číslice nastavuje speciální bity (lepkavé & setuid).
  • @orion Občas je to ve skutečnosti pravda, např v kódu podobném C chmod(777) by byl ve skutečnosti ekvivalentem běhu chmod 1411 (tj. chmod s argumentem 1411).
  • … který v případě syscall (nebo jeho wrapperu) a binárního souboru se stejným názvem může být trochu matoucí.
  • Python Master Race vyřešil tento zpětný problém zákazem všech “ čísel „, které začínají 0 , nutí uživatele, aby byl explicitní, pokud chce něco jiného než desítkové, např hex: 0x1FF, binary: 0b111111111 nebo octal: 0o777. PYTHON POWER
  • Zdroj obrázku?

Odpověď

d znamená, že se jedná o adresář, pokud máte soubor, je to - a pokud se jedná o odkaz, najdete l. Nelze jej nastavit / deaktivovat.

Pokud používáte 0777 jako oprávnění, dáváte plnou kontrolu (čtení + zápis + spuštění) každému uživateli / skupině systému. Je to líný způsob řešení problémy, když máte uživatele / skupiny, které nemají přístup k adresářům / souborům.

Například pokud vypsáte obsah adresáře a získáte toto:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so je soubor vlastněný kořenem uživatele a kořenem skupiny. Vlastník má přístup ke čtení a zápisu, skupina má pouze přístup ke čtení a kterýkoli jiný uživatel má přístup ke čtení. To lze přeložit jako 644.

Pokud to změním na 777, bude to vypadat takto:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so

Odpověď

Po zodpovězení mé otázky zde a provedení průzkumu o výsledku jsem našel článek, který to všechno velmi dobře vysvětluje. Rád bych zde sdílel některé části tohoto článku pro budoucí použití.

Zobrazení oprávnění

Chcete-li použít chmod ke změně oprávnění souboru nebo adresáře, musíte nejprve vědět, jaké jsou aktuální režim přístupu je. Obsah adresáře v terminálu si můžete prohlédnout cd do tohoto adresáře a poté použít:

$ ls -l 

Přepínač -l je důležitý, protože použití ls bez něj zobrazí pouze názvy souborů nebo složek v adresáři.

Níže je uveden příklad použití ls -l v mém domovském adresáři:

total 128 drwxr-xr-x 2 peter users 4096 Jul 5 21:03 Desktop drwxr-xr-x 6 peter users 4096 Jul 5 17:37 Documents drwxr-xr-x 2 peter users 4096 Jul 5 13:45 Downloads drwxr-xr-x 2 peter users 4096 Jun 24 03:36 Movies drwxr-xr-x 2 peter users 4096 Jun 24 03:38 Music drwxr-xr-x 2 peter users 4096 Jun 26 00:09 Pictures -rw-r--r-- 1 peter users 354 Jul 6 17:15 chmodtest 

Co znamenají sloupce

První sloupec je typem každého souboru:

  • - označuje normální soubor.
  • d označuje adresář, tj. složku obsahující další soubory nebo složky.
  • p označuje pojmenovanou rouru (aka FIFO) ).
  • l označuje symbolický odkaz.

Povolení jsou následující písmena, tento první sloupec je nás bude nejvíce zajímat. Druhým je, kolik odkazů je v souboru, můžeme bezpečně to ignorovat. Třetí sloupec má dvě hodnoty / názvy: První (v mém příkladu „peter“) je jméno uživatele, který vlastní soubor. Druhá hodnota (v tomto příkladu „uživatelé“) je skupina, do které vlastník patří (Přečtěte si více o skupinách).

Další sloupec je velikost souboru nebo adresáře v bajtech a informace po něm jsou data a časy, kdy byl soubor nebo adresář naposledy upraven, a samozřejmě název souboru nebo adresáře.

Co znamenají oprávnění

První tři písmena, za první - nebo d jsou oprávnění, která vlastník má. Další tři písmena jsou oprávnění platná pro skupinu. Poslední tři písmena jsou oprávnění, která platí pro všechny ostatní.

Každá sada tří písmen se skládá z r w a x. r je vždy na první pozici, w je vždy na druhé pozici a x je vždy na třetí pozici. r je oprávnění ke čtení, w je oprávnění k zápisu a x je provedení povolení. Pokud je na místě jednoho z těchto písmen pomlčka (-), znamená to, že povolení není uděleno, a pokud je dopis přítomen, pak je uděleno.

Složky

V případě složek lze bity režimu interpretovat takto:

  • r (číst) stojí pro schopnost číst obsah daného adresáře
  • w (write) znamená schopnost psát obsah daného adresáře (vytvářet nové soubory, složky; přejmenovávat, mazat existující soubory, složky) právě tehdy, pokud je nastaven spouštěcí bit. Jinak toto oprávnění nemá smysl.
  • x (spustit) znamená možnost vstoupit do daného adresáře pomocí příkazu cd a přistupovat k souborům a složkám v tomto adresáři.

Změna oprávnění pomocí příkazu chmod

chmod je příkaz v systému Linux a dalších operačních systémech podobných systému Unix. Umožňuje vám změnit oprávnění (nebo režim přístupu) k souboru nebo adresáři.

Oprávnění můžete změnit dvěma různými způsoby: – Textově založená chmod – Na základě čísel chmod

Textová metoda

Chcete-li změnit režim oprávnění nebo přístupu k souboru, použijeme příkaz chmod v terminál. Níže je uvedena obecná struktura příkazu:

chmod who=permissions filename 

Kde je Who z libovolného rozsahu písmen a každý označuje, komu udělíte oprávnění . Jsou následující:

u - The user that owns the file. g - The group the file belongs to. o - The other users i.e. everyone else. a - all of the above - use this instead of having to type ugo. 

Oprávnění jsou stejná, jak již bylo uvedeno (r, w a x).

Příkaz chmod nám umožňuje přidávat a odečítat oprávnění ze stávající sady pomocí + nebo – of =. To se liší od výše uvedených příkazů, které v zásadě přepisují oprávnění (tj. změnit oprávnění z r-- na rw- , stále musíte zahrnout r a w za = do chmod příkaz. Pokud jste zmeškali r, bylo by odebráno r oprávnění, protože se přepisují pomocí =. Usin g + a – tomu se vyhněte přidáním nebo odebráním aktuální sady oprávnění).

Číselná metoda

chmod může také nastavit oprávnění pomocí čísel.

Používání čísel je další metoda, která vám umožňuje upravovat oprávnění pro všechny tři vlastníky, skupiny a další současně. Tato základní struktura kódu je tato:

chmod xxx file/directory 

Kde xxx je 3místné číslo, kde každá číslice může být cokoli od 1 do 7. Platí první číslice pro oprávnění pro vlastníka platí druhá číslice pro oprávnění pro skupinu a třetí číslice platí pro oprávnění pro všechny ostatní.

V tomto číselném zápisu mají hodnoty r, w a x své vlastní číslo value:

r=4 w=2 x=1 

Chcete-li přijít s třímístným číslem, musíte zvážit, jaká oprávnění chcete mít pro vlastníka, skupinu a uživatele, a poté celkem jejich hodnoty vzrostly. Řekněme například, že jsem chtěl udělit vlastníkovi adresáře oprávnění ke čtení a zápisu a spuštění, a chtěl jsem seskupit a všechny ostatní, aby právě četli a prováděli oprávnění. Přišel bych s číselnými hodnotami takto:

Owner: rwx = 4+2+1=7 Group: r-x = 4+0+1=5 (or just 4+1=5) Other: r-x = 4+0+1=5 (or just 4+1=5) Final number = 755 $ chmod 755 filename 

Toto je ekvivalent použití následujícího:

chmod u=rwx filename chmod go=rx filename 

Většina složek / adresářů je nastavena na 755, aby umožňovala čtení a zápis a provádění vlastníkovi, ale odepírá zápis všem ostatním, a soubory jsou obvykle 644, což umožňuje čtení a zápis pro vlastníka, ale pouze čtení pro všechny ostatní si přečtěte poslední poznámku o nedostatku oprávnění x u nespouštěcích souborů – zde je to stejné řešení.

Komentáře

  • Pouhé kopírování textu z jiného článku je – přinejmenším – hrubé. Možná také porušení autorských práv. Pokud se nejedná pouze o kopírování, nebo jste opravdu použili malé části (díky principu fair use jsou šetrné k autorským právům), přidejte prosím alespoň odkaz na článek, na který odkazujete / citujete.

Odpověď

Pro otázky d

Toto vám řekne typ souboru Unix. Ve výchozím nastavení má Unix pouze 3 typy souborů. Jsou to:

  • - – běžný soubor
  • d – adresářový soubor
  • Speciální soubor (s 5 podtypy):
    • b – Blokovat soubor
    • c – Soubor znakového zařízení
    • p – Pojmenovaný soubor potrubí nebo jen soubor potrubí
    • l – soubor symbolických odkazů
    • s – soubor zásuvky

Přečtěte si více zde: Typy souborů v systému Linux / Unix jsou podrobně vysvětleny

0777 vs 777

Je zadán lepivý bit nebo ne. Když je nastaven lepivý bit adresáře, souborový systém zachází se soubory v těchto adresářích zvláštním způsobem, takže soubor může přejmenovat nebo odstranit pouze vlastník souboru, vlastník adresáře nebo uživatel root. Bez lepivého bitu set, libovolný uživatel s oprávněním k zápisu a spouštění adresáře může přejmenovat nebo mazat obsažené soubory bez ohledu na vlastníka souboru.

0777 nastaví oprávnění k 777 souborům a sticky bit na 0 – žádné speciální režimy.

777 nastavuje oprávnění souboru 777, aniž by změnil sticky bit.

Přečtěte si více: lepivý bit a chmod

Komentáře

  • Lepší: ale stále nenabízí nic, co by ostatní odpovědi ‚ již nepokryly …
  • ( 1) Existují tři základní typy souborů: jednoduché soubory, adresáře a všechno ostatní. Co? Odkud to berete? Ve velkém schématu věcí jsou jednoduché soubory a adresáře velmi podobné. Pojmenované kanály a symbolické odkazy jsou spíš jako obyčejné soubory a adresáře, než jako soubory zařízení nebo sokety. (2) Myslíte si, že chmod 777 nevymaže setuid, setgid a lepkavé bity? Vyzkoušejte to.
  • Unix má 7 typů souborů, ne 3.

Odpověď

Dvě související věci, které jsem vždy považoval za matoucí a výše jsem se jich nedotkl, jsou:


I) co „ 1 “ dělá:

V chmod : each „1“ en má oprávnění, např. chmod 777 cs všechny, ale pozor, protože
v umask : each „1“ dis má oprávnění, např. umask 777 dis umí všechny.


II ) soubor „vlastníci“ vs.file „users“ :

Jinými slovy, existují uživatelé, kteří „vlastní“ a uživatelé, kteří „používají“ .

Každý soubor je vlastněn současně dvěma entitami:

  • jeden konkrétní, uživatel a
  • jeden, konkrétní skupina (jednoho nebo více uživatelů).

Proto lze každý soubor použitý konkrétním uživatelem třemi způsoby:

1) Přímo jako uživatel, který vlastní soubor,
2) přímo v jako člen skupiny, která soubor vlastní, a
3 ) případně jako někdo jiný.


Jinak se odpovědi výše, odvádějte skvělou práci! Děkuji vám všem.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *