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
a777
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
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 amknod
-
c
: karakteres speciális fájl, létrehozható amknod
címmel is (lásd például:/dev
) -
d
: könyvtár, létrehozható amkdir
-
l
: szimbolikus link, létrehozható aln -s
-
p
: pipe névvel, létrehozható amkfifo
-
s
: socket segítségével, létrehozható anc -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ábanroot
) -
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 asuid
bit konfigurálható úgy, hogy asgid
-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 asuiddir
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:
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:
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 achmod 1411
futtatásának felelne meg (azaz achmod
parancs argumentummal1411
). - … 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.
S_IFDIR
néven. A fájlmód beállításakor nem használja ‘, de astat()
függvény valóban visszaadja a 040750 értéket a .