A UNIX engedélyek és fájltípusok megértése

Sosem értettem, hogy a mai napig miként működött a chmod. egy oktatóanyag, amely nagy dolgot magyarázott el nekem.

Például azt olvastam, hogy három különböző engedélycsoportot kapott:

  • tulajdonos (u)
  • csoport (g)
  • mindenki (o)

E három csoport alapján most már tudom, hogy:

  • Ha a fájl a felhasználó tulajdonában van, akkor a felhasználói engedélyek határozzák meg a hozzáférést .
  • Ha a fájl csoportja megegyezik a felhasználó csoportjával, akkor a csoport engedélye határozza meg a hozzáférést.
  • Ha a felhasználó nem a fájl tulajdonosa, és nem a csoportban, akkor a másik engedélyt használják.

Azt is megtudtam, hogy a következő engedélyeket kapta:

  • read (r)
  • írás (w)
  • végrehajtás ()

Létrehoztam egy könyvtárat az újonnan megszerzett ismereteim tesztelésére:

mkdir test 

Ezután Végeztem néhány tesztet:

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

Miután egy ideig hülyéskedtem, azt hiszem, végre elakadtam chmod és az engedély megadásának módja ezzel a paranccsal.


De …

Még mindig van néhány kérdésem:

  • Mit jelent a kiinduló d jelöli?
  • Mit nevezünk és használunk a benne lévő résszel, és milyen egyéb értékeket tartalmazhat ez?
  • Hogyan állíthatom be és törölhetem?
  • Mi az értéke ennek a d -nek? (Mivel csak 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1 van)
  • Miért használják az emberek néha a 0777 a 777 helyett az engedélyek beállításához?

De mivel nem kellene több kérdést feltennem, megpróbálom feltenni egy kérdés.

UNIX alapú rendszerekben, például az összes Linux disztribúcióban, az engedélyek vonatkozásában mit jelent az első rész (d) és mi az használja az engedélyek ezen részét?

Megjegyzések

  • Kérjük, legközelebb próbáljon csak egy kérdést feltenni, több kérdés általában rossz a hivatkozás szempontjából és szinte soha nem szólítottam meg mindet egyszerre.
  • @Kiwy ‘ sajnálom, azt hittem, hogy ‘ nem így, mert ugyanazt a témát érinti. Ha akarod, javasolhatsz egy jobb címet a kérdésemnek, hogy javítsam ‘ referenciáját.
  • Egyébként a ” értéke A d ” 040000 – a fejlécfájlokban megtalálható S_IFDIR néven. A fájlmód beállításakor nem használja ‘, de a stat() függvény valóban visszaadja a 040750 értéket a .
  • @jamesqf Tulajdonképpen, most, hogy megértettem, hogy az oktális kódok hogyan térképeződnek fel, ‘ számomra egyszerűbb így gondolkodni .
  • @Peter: nincsenek hülye kérdések – csak hülyék, akik nem tanulnak ‘, mert ‘ újra félek kérdezni.

Válasz

Három részben válaszolok a kérdéseire: fájltípusok, engedélyek, és használjon eseteket a chmod különböző formáihoz.

Fájltípusok

Az első karakter a ls -l output a fájltípust képviseli; A d azt jelenti, hogy ez egy könyvtár. Nem állítható be és nem állítható be, a fájl létrehozásának módjától függ. A fájltípusok teljes listáját a ls dokumentációban találja; azok, amelyekkel valószínűleg találkozni fog,

  • -: „rendes” fájl, bármilyen programmal létrehozva, amely képes fájlokat írni
  • b: blokk speciális fájl, általában lemez vagy partíciós eszközök hozhatók létre a mknod
  • c: karakteres speciális fájl, létrehozható a mknod címmel is (lásd például: /dev)
  • d: könyvtár, létrehozható a mkdir
  • l: szimbolikus link, létrehozható a ln -s
  • p: pipe névvel, létrehozható a mkfifo
  • s: socket segítségével, létrehozható a nc -U
  • D: ajtó , amelyet néhány szerver-folyamat hozott létre a Solaris-on / openindiana.

Engedélyek

chmod 0777 az összes engedély engedélyezésére szolgál egy chmod futtatásban, a változtatások és a stb.Mind a négy számjegy egy oktális érték, amely az engedélyek halmazát jelenti:

  • suid, sgid és „ragadós” (lásd alább)
  • felhasználói engedélyek
  • csoportengedélyek
  • „egyéb” engedélyek

Az oktális értéke az engedélyek összegeként kerül kiszámításra:

  • az „olvasás” értéke 4
  • az „írás” értéke 2
  • az „végrehajtása” értéke 1

Az első számjegy esetében:

  • suid 4; Az ezzel a bitkészlettel rendelkező bináris fájlok tulajdonos felhasználóként futnak (általában root)
  • sgid 2; Az ezzel a bitkészlettel rendelkező bináris fájlok tulajdonosi csoportként működnek (ezt használták a játékokhoz, így a magas pontszámokat meg lehetett osztani, de gyakran biztonsági kockázatot jelent, ha a játékok sérülékenységeivel kombinálják), és az ezzel a bitkészlettel rendelkező könyvtárakban létrehozott fájlok a a könyvtár tulajdonoscsoportja alapértelmezés szerint (ez hasznos a megosztott mappák létrehozásához)
  • a „ragadós” (vagy „korlátozott törlés”) értéke 1; Az ezzel a bitkészlettel rendelkező könyvtárakban lévő fájlokat csak a tulajdonosuk, a könyvtár tulajdonosa vagy a root törölheti (egy általános példát lásd: /tmp)

A részletekért lásd: a chmod kezelési oldalt . Ne feledje, hogy mindezek mellett figyelmen kívül hagyok más biztonsági szolgáltatásokat, amelyek megváltoztathatják a felhasználók fájlokra vonatkozó engedélyeit (SELinux, fájl ACL-ek …).

A speciális biteket a fájl típusától függően másként kezelik (normál fájl vagy könyvtár) és az alapul szolgáló rendszer. (Ezt a chmod manpage említi.) A rendszeren ezt teszteltem (coreutils 8.23-mal egy ext4 fájlrendszer, a Linux kernel 3.16.7-ckt2 futtatásával), a viselkedés a következő. Egy fájl esetében a speciális bitek mindig törlődnek, hacsak nincs kifejezetten beállítva, így a chmod 0777 egyenértékű a chmod 777, és mindkét parancs törli a speciális biteket és mindenkinek adjon teljes engedélyt a fájlra. Egy könyvtár esetében a speciális bitek soha nem kerülnek teljesen kitörlésre a négyjegyű numerikus forma segítségével, így valójában a chmod 0777 is egyenértékű a chmod 777 de félrevezető, mivel a speciális bitek egy része megmarad. (Ennek a válasznak egy korábbi verziója rosszul tette ezt.) A könyvtárak speciális bitjeinek törléséhez a u-s, g-s és / vagy o-t kifejezetten vagy megad egy negatív számértéket, így a chmod -7000 törli a könyvtár összes speciális bitjét.

A ls -l kimenetben suid, sgid és „ragadós” jelenik meg a x bejegyzés: suid is s vagy S a felhasználó x helyett a sgid s vagy S a csoport x helyett, a„ ragadós ”pedig t vagy T mások x helyett. Kisbetû azt jelzi, hogy mind a speciális, mind a futtatható bit be van állítva; egy nagybetű azt jelzi, hogy csak a speciális bit van beállítva.

A chmod különféle formái

A fent leírt viselkedés miatt a teljes négy számjegy használata a chmod zavaró lehet (legalábbis kiderült, hogy összezavarodtam). Ez akkor hasznos, ha speciális biteket, valamint engedély biteket szeretne beállítani; ellenkező esetben a bitek törlődnek, ha egy fájlt manipulál, és megőrződik, ha egy könyvtárat manipulál. Tehát chmod 2750 biztosítja, hogy legalább sgid és pontosan u=rwx,g=rx,o=; de az chmod 0750 nem feltétlenül törli a speciális biteket.

Számparancsok használata szövegparancsok helyett ([ugo][=+-][rwxXst]) valószínűleg inkább a szokás esete és a parancs célja. Miután megszokta a numerikus módok használatát, gyakran egyszerűbb a teljes módot csak így megadni; és hasznos, ha numerikus módok segítségével gondolunk a jogosultságokra, mivel sok más parancs is felhasználhatja őket (install, mknod … ).

Bizonyos szövegváltozatok jól jöhetnek: ha csak azt akarja biztosítani, hogy egy fájlt bárki végrehajthasson, a chmod a+x ezt meg fogja tenni, függetlenül attól, hogy a többi engedély. Hasonlóképpen, +X csak akkor adja hozzá a végrehajtási engedélyt, ha az egyik végrehajtási engedély már be van állítva, vagy a fájl könyvtár; ez hasznos lehet a jogosultságok globális visszaállításához anélkül, hogy speciális eseteket tartalmazó fájlokat kellene v. Így a chmod -R ug=rX,u+w,o= egyenértékű azzal, hogy az chmod -R 750 alkalmazást minden könyvtárra és futtatható fájlra, és chmod -R 640 az összes többi fájl.

Megjegyzések

  • Bár a többi válasz nagyon jó volt, valóban töltött egy kis időt erre a kérdésre. Köszönet.
  • A * BSD könyvtárak úgy viselkednek, mintha a sgid bitjük mindig be lett volna állítva, függetlenül annak tényleges értékétől. A FreeBSD-n a suid bit konfigurálható úgy, hogy a sgid -hez hasonlóan működjön (azaz a belül létrehozott fájloknak és alkönyvtáraknak ugyanaz a tulajdonosuk lesz, mint a könyvtárnak ), feltéve, hogy az alapul szolgáló fájlrendszer ezt támogatja, és a suiddir opcióval van felszerelve.
  • +X csak akkor adja hozzá a végrehajtási engedélyt, ha az egyik végrehajtási engedély be van állítva , vagy ha a fájl könyvtár ” köszönöm Ön @ stephen-kitt, akiből hiányzik a ” már be van állítva ” dokumentáció, tényleg egy hurkot vetett rám!

Válasz

Tehát a Linux engedélyei nagyon fontosak. Megpróbálok rövid magyarázatot adni.

Egy fájl mód

Minden Unix fájl rendelkezik egy jogosultsággal, amely meghatározza, hogy el tudja-e olvasni, írni vagy futtatni a fájlt. Az ls -l futtatása megjeleníti az engedélyeket. Íme egy példa egy ilyen megjelenítésre:

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

Csatolok egy fájlt egy fájl mód darabjairól:

írja ide a kép leírását

A típus eltérő lehet. Például:

  • d (könyvtár)
  • c (karaktereszköz)
  • l (szimbolikus link)
  • p (megnevezve cső)
  • s (socket)
  • b (blokkoló eszköz)
  • D (ajtó, Linux rendszeren nem gyakori, de portolt)

Ha az összes könyvtárhoz engedélyeket szeretne beállítani, használhatja az R attribútumot, például:

chmod -R 777 /some/directory/ 

chmod 777 vs 0777 esetén

A chmod parancs általában a bemenetet várja hogy oktális szám legyen, az elõzõ nulla a ragacsos / sgid / suid bithármas értékére utal. C-ben azonban változást hozna, mivel a 777 01411 -re (oktálisra) fordítaná, ezzel beállítva a ragacsos bitet (lásd a chmod(2) man oldal), a tulajdonos és a futtatható bit olvasási engedélyei a csoport és mások számára (ami meglehetősen furcsa kombináció).

1 SZERKESZTÉS

Más képet találtam a Linux engedélyeiről, és csatolom, hogy könnyebben megértsem: UNIX fájlengedélyek

Megjegyzések

  • Tévedsz a 777 és 0777 modellekkel kapcsolatban. Mindkettő oktális (a tizedesnek amúgy sincs értelme ebben az esetben), de négy karakteres formában az első számjegy állítja be a speciális biteket (ragacsos & setuid).
  • @orion Esetenként valóban igaz, például egy C-szerű kódban a chmod(777) valójában a chmod 1411 futtatásának felelne meg (azaz a chmod parancs argumentummal 1411).
  • … amely a syscall (vagy annak burkolója) és az azonos nevű bináris esetén kissé zavaró.
  • A Python Master Race megoldotta ezt a visszafelé mutató problémát azáltal, hogy betiltotta az összes 0-val kezdődő ” számot ” , a felhasználó egyértelművé tételére kényszeríti a tizedesjegyektől eltérő dolgot, pl hex: 0x1FF, bináris: 0b111111111 vagy oktális: 0o777. PYTHON ERŐ
  • Képforrás?

Válasz

d azt jelenti, hogy ez egy könyvtár, ha van egy fájlod, akkor ez -, és ha link, akkor egy l. Nem állítható be / nem állítható vissza.

Ha a 0777-et használja engedélyként, akkor a rendszer minden felhasználójának / csoportjának teljes ellenőrzést (olvasás + írás + végrehajtás) ad. Ez egy lusta megoldás problémák, amikor olyan felhasználók / csoportok vannak, amelyek nem férhetnek hozzá könyvtárakhoz / fájlokhoz.

Például, ha felsorolja egy könyvtár tartalmát, és ezt kapja meg:

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

preloadable_libintl.so a felhasználói gyökér és a csoportgyökér tulajdonosa. A tulajdonos olvasási és írási, a csoport csak olvasási és minden más felhasználó olvasási hozzáféréssel rendelkezik. Ez 644-re fordítható.

Ha 777-re változtatom, így fog kinézni:

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

Válasz

Miután itt megválaszoltam a kérdésemet, és kutattam az eredmény kapcsán, találtam egy cikket, amely nagyon jól megmagyarázza az egészet. Szeretném megosztani a cikk néhány részét itt a későbbi hivatkozások céljából.

Engedélyek megtekintése

A chmod használatához egy fájl vagy könyvtár engedélyeinek megváltoztatásához először tudnia kell, hogy mi a jelenlegi a hozzáférés módja az. Megtekintheti a terminál könyvtárának tartalmát cd segítségével az adott könyvtárba, majd használhatja:

$ ls -l 

A -l kapcsoló fontos, mert az ls használata nélkül csak a fájlok vagy mappák nevét jeleníti meg a könyvtárban.

Az alábbiakban bemutatunk egy példát a ls -l használatra a saját könyvtáramban:

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 

Mit jelentenek az oszlopok

Az első oszlop az egyes fájlok típusa:

  • - egy normál fájlt jelöl.
  • d egy könyvtárat jelöl, azaz egy mappát, amely más fájlokat vagy mappákat tartalmaz.
  • p egy megnevezett csövet (más néven FIFO) jelöl. ).
  • l szimbolikus linket jelöl.

Az ezt követő betűk az engedélyek, ez az első oszlop az, ami a legjobban érdekelni fogja. A második az, hogy hány link van egy fájlban nyugodtan hagyja figyelmen kívül. A harmadik oszlopnak két értéke / neve van: Az első (példámban “peter”) annak a felhasználónak a neve, akinek a fájlja van. A második érték (a példában a “felhasználók”) az a csoport, amelyhez a tulajdonos tartozik (További információ a csoportokról).

A következő oszlop a fájl vagy könyvtár mérete bájtokban, és az ezt követő információk azok a dátumok és időpontok, amikor a fájlt vagy könyvtárat utoljára módosították, és természetesen a fájl vagy könyvtár neve.

Mit jelentenek az engedélyek

Az első három betű, az első után - vagy d a tulajdonos jogosultságai. A következő három betű a csoportra vonatkozó engedélyek. Az utolsó három betű a mindenki másra vonatkozó engedélyek.

A három betűből álló készlet r w és x. r mindig az első, w mindig a második, és x mindig a harmadik pozícióban van. r az olvasási engedély, w az írási engedély, és a x a végrehajtás engedély. Ha kötőjel (-) van e betűk egyikén, az azt jelenti, hogy az engedélyt nem adják meg, és ha a levél megvan, akkor megadják.

Mappák

Mappák esetén a módbitek a következőképpen értelmezhetők:

  • r (olvas) áll az adott könyvtár tartalomjegyzékének olvasására való képességért
  • w (write) az adott könyvtár tartalomjegyzékének megírásának képességét jelenti. (új fájlokat, mappákat hozhat létre; átnevezheti, törölheti a meglévő fájlokat, mappákat) csak akkor, ha a bit végrehajtása be van állítva. Egyébként ez az engedély értelmetlen.
  • x (végrehajtás) azt a képességet jelenti, hogy beléphetünk az adott könyvtárba cd paranccsal, és elérhetjük az adott könyvtár fájljait, mappáit.

Engedélyek megváltoztatása a chmod paranccsal

chmod egy parancs Linuxban és más Unix-szerű operációs rendszerekben. Lehetővé teszi egy fájl vagy könyvtár engedélyeinek (vagy hozzáférési módjának) megváltoztatását.

Az engedélyeket kétféle módon módosíthatja: – Szövegalapú chmod – Számalapú chmod

Szöveges módszer

A fájl engedélyeinek vagy hozzáférési módjának megváltoztatásához a chmod parancsot használjuk a egy terminál. Az alábbiakban bemutatjuk a parancs általános felépítését:

chmod who=permissions filename 

Hol van bárki egy betűtartományból, és mindegyik jelzi, hogy kinek ad engedélyt . Ezek a következők:

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. 

Az engedélyek megegyeznek a már tárgyaltakkal (r, w és x).

A chmod parancs lehetővé teszi a meglévő halmaz engedélyeinek hozzáadását és kivonását a + vagy – használatával =. Ez különbözik a fenti parancsoktól, amelyek lényegében újraírják a jogosultságokat (azaz a r-- engedély megváltoztatásáról rw- , akkor is be kell foglalnia a r -t, valamint a w -t a = után a chmod parancs. Ha elmulasztotta a r parancsot, akkor a r engedélyt elveszi. a =. Usin segítségével írják újra g + és – kerülje ezt úgy, hogy hozzáadja vagy eltávolítja az engedélyek jelenlegi készletét)

Számmódszer

chmod számok segítségével is beállíthat engedélyeket.

A számok használata egy másik módszer, amely lehetővé teszi mind a három tulajdonos, csoport és mások engedélyeinek szerkesztését egyszerre. A kód ezen alapstruktúrája a következő:

chmod xxx file/directory 

Ahol az xxx háromjegyű szám, ahol minden számjegy 1 és 7 között lehet. Az első számjegy érvényes a tulajdonos engedélyeire a második számjegy a csoport engedélyeire vonatkozik, a harmadik számjegy pedig az összes többi engedélyére vonatkozik.

Ebben a számjellemzőben az r, w és x értékeknek saját számuk van. érték:

r=4 w=2 x=1 

Háromjegyű szám előállításához meg kell fontolnia, hogy a tulajdonosnak, a csoportnak és a felhasználónak milyen engedélyekkel kell rendelkeznie, majd összesen értékeik fel. Tegyük fel például, hogy meg akartam adni egy könyvtár írási és írási és végrehajtási jogosultságait, és csoportosítani akartam mindenkit, hogy csak olvasási és végrehajtási jogosultságokkal rendelkezzenek. A következő numerikus értékekkel állnék elő:

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 

Ez egyenértékű a következők használatával:

chmod u=rwx filename chmod go=rx filename 

A legtöbb mappa / könyvtár 755-re van állítva, hogy lehetővé tegye az olvasást, az írást és a végrehajtást a tulajdonos számára, de megtagadja az írást mindenki mástól, és a fájlok általában 644-es értékűek, hogy lehetővé tegyék az olvasást és az írást a tulajdonos számára, de csak az olvasást mindenki másnak olvassa el az utolsó megjegyzést az x engedélyek hiányáról a nem futtatható fájlokkal – itt ugyanaz a megállapodás.

Megjegyzések

  • A szöveg másolása egy másik cikkből – legalábbis – durva. Talán szerzői jogi megsértés is. Ha nem csak másolja, vagy valóban apró alkatrészeket használt (a tisztességes használatnak köszönhetően szerzői jog-barát), akkor kérjük, legalább adjon hozzá egy hivatkozást a hivatkozott / idézett cikkhez.

Válasz

A d kérdésre

Ez megadja a Unix fájltípust. Alapértelmezés szerint a Unixnak csak 3 fájltípusa van. Ezek a következők:

  • - – Rendszeres fájl
  • d – Könyvtárfájl
  • Speciális fájl (5 altípussal):
    • b – Fájl blokkolása
    • c – Karakter eszközfájl
    • p – Elnevezett pipafájl vagy csak pipafájl
    • l – Szimbolikus hivatkozási fájl
    • s – Socket fájl

További információ itt: A Linux / Unix fájltípusai részletesen kifejtve

0777 vs 777

Ragadós bit megadva vagy sem. Ha egy könyvtár ragadós bitje van beállítva, akkor a fájlrendszer az ilyen könyvtárak fájljait különleges módon kezeli, így csak a fájl tulajdonosa, a könyvtár tulajdonosa vagy a root felhasználó nevezheti át vagy törölheti a fájlt. Ragadó bit nélkül set, minden felhasználó, aki rendelkezik a könyvtár írási és végrehajtási jogosultságaival, átnevezheti vagy törölheti a fájlokat, függetlenül a fájl tulajdonosától.

0777 777 fájlengedélyt állít be , és a ragacsos bit 0-ra – nincs speciális mód.

777 777 fájlengedélyeket állít be a ragacsos bit megváltoztatása nélkül.

További információ: ragadós bit és chmod

Megjegyzések

  • Jobb: de még mindig nem kínál semmit, amit a többi válasz még nem érintett volna ‘ …
  • ( 1) Három alapvető fájltípus létezik: sima fájlok, könyvtárak és minden más. Mit? Ezt honnan veszed? A dolgok nagyszerű sémájában a sima fájlok és könyvtárak meglehetősen hasonlóak. Az elnevezett csövek és szimbolikus hivatkozások inkább hasonlítanak a sima fájlokra és könyvtárakra, mint az eszközfájlokra vagy a foglalatokra. (2) Úgy gondolja, hogy a chmod 777 nem törli a setuid, setgid és ragacsos biteket? Próbálja ki.
  • A Unix-nak 7 fájltípusa van, nem pedig 3.

Válasz

Két kapcsolódó dolog, amit mindig is zavarosnak találtam, és amelyeket fentebb nem érintettem:


I) micsoda “ 1 “:

chmod : mindegyik “1” hu engedélyt szüntet, pl. chmod 777 en ables mindent, de figyeljen, mert
a umask : mindegyik “1” dis engedélyt töröl, pl. umask 777 dis mind ables.


II ) fájl “tulajdonosok” vs.fájl “felhasználók” :

Más szavakkal, vannak azok a felhasználók, akik “rendelkeznek” , és felhasználók, akik “.

Minden fájl tulajdonában van, egyszerre két entitás:

  • egyetlen, egyedi felhasználó , és
  • egyetlen, egyedi csoport (egy vagy több felhasználó).

Ezért minden fájl egy adott felhasználó az -t háromféle módon használta:

1) közvetlenül, mint a fájl,
2) közvetlenül a fájlban, a fájlt birtokló csoport tagjaként,

3 ), esetleg másként.


Egyébként , válaszoljon fent, nagyszerű munkát végezzen! Köszönöm mindenkinek.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük