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ísto777
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
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 (obvykleroot
) -
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 bitsuid
nakonfigurovat tak, aby fungoval analogicky ssgid
(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žnostisuiddir
. - “
+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:
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:
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ěhuchmod 1411
(tj.chmod
s argumentem1411
). - … 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.
S_IFDIR
. ‚ jej nepoužíváte při nastavování režimu souboru, ale funkcestat()
ve skutečnosti vrátí hodnotu 040750 prodrwxr-x---
.