A Linuxban a fájlokhoz való hozzáférést a fájljogosultságok, attribútumok és a tulajdonjogok segítségével kezeljük. Ez biztosítja, hogy csak az engedélyezett felhasználók és folyamatok férhessenek hozzá a fájlokhoz és könyvtárakhoz.
Ez az útmutató azt mutatja be, hogyan használhatjuk a chmod
parancsot a fájlok és könyvtárak hozzáférési jogosultságainak módosítására.
Linux File Permissions #
Mielőtt továbbmennénk, ismertessük a Linux alapvető jogosultsági modelljét.
A Linuxban minden fájlhoz tulajdonost és csoportot rendelünk, és három különböző felhasználói osztály számára rendelünk hozzá hozzáférési jogosultságokat:
- A fájl tulajdonosa.
- A csoport tagjai.
- Mások (mindenki más).
A fájl tulajdonjogát a chown
és chgrp
paranccsal lehet megváltoztatni.
Az egyes osztályokhoz háromféle fájljogosultság tartozik:
- Az olvasási jog.
- Az írási jog.
- A végrehajtási engedély.
Ez a fogalom lehetővé teszi annak meghatározását, hogy mely felhasználók számára engedélyezett a fájl olvasása, a fájlba való írás vagy a fájl végrehajtása.
A fájlengedélyek a ls
paranccsal tekinthetők meg:
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type
Az első karakter mutatja a fájltípust. Ez lehet hagyományos fájl (-
), könyvtár (d
), szimbolikus hivatkozás(l
) vagy bármilyen más speciális fájltípus.
A következő kilenc karakter a fájljogosultságokat mutatja, három, egyenként három karakterből álló hármas. Az első triplett a tulajdonosi jogosultságokat, a második a csoportos jogosultságokat, az utolsó triplett pedig a mindenki más jogosultságokat mutatja. Az engedélyek a fájl típusától függően eltérő jelentéssel bírhatnak.
A fenti példában (rw-r--r--
) azt jelenti, hogy a fájl tulajdonosának olvasási és írási engedélyei vannak (rw-
), a csoportnak és a többieknek csak olvasási engedélyei (r--
).
A három jogosultsági triplett mindegyike az alábbi karakterekből építhető fel, és különböző hatást vált ki, attól függően, hogy egy fájlra vagy egy könyvtárra van-e beállítva:
Az engedélyek hatása a fájlokra
Az engedély | Karakter | A fájlra vonatkozó jelentés |
---|---|---|
Elolvasás | - |
A fájl nem olvasható. Nem tudja megtekinteni a fájl tartalmát. |
r |
A fájl olvasható. | |
Write | - |
A fájl nem módosítható vagy módosítható. |
w |
A fájl módosítható vagy módosítható. | |
Végrehajtás | - |
A fájl nem hajtható végre. |
x |
A fájl végrehajtható. | |
s |
Ha a user triplában található, akkor a setuid bitet beállítja. Ha a group triplettben található, akkor a setgid bitet állítja be. Ez azt is jelenti, hogy a x jelző be van állítva.Ha a setuid vagy a setgid jelző be van állítva egy futtatható fájlban, a fájl a fájl tulajdonosának és/vagy csoportjának jogosultságaival kerül végrehajtásra. |
|
S |
Az s jelzővel megegyező, de a x jelző nincs beállítva. Ezt a jelzőt ritkán használják a fájlokban. |
|
t |
Ha a others triplában található, akkor a sticky bitet állítja.Ez azt is jelenti, hogy a x jelző be van állítva. Ez a flag haszontalan a fájlokon. |
|
T |
Az, mint a t , de a x flag nincs beállítva. Ez a flag haszontalan a fájlokon. |
A jogosultságok hatása a könyvtárakra (mappákra)
A Linuxban a könyvtárak olyan speciális fájltípusok, amelyek más fájlokat és könyvtárakat tartalmaznak.
Jogosultság | Karakter | Megjelenítés a könyvtárakon |
---|---|---|
Read | - |
A könyvtár tartalma nem jeleníthető meg. |
r |
A könyvtár tartalma megjeleníthető. (pl. A könyvtáron belüli fájlok listázása a ls segítségével lehetséges.) |
|
Write | - |
A könyvtár tartalma nem módosítható. |
w |
A könyvtár tartalma módosítható. (pl. létrehozhat új fájlokat, törölhet fájlokat ..stb.) |
|
Futtatás | - |
A könyvtár nem módosítható. |
x |
A könyvtárban a cd segítségével lehet navigálni. |
|
s |
Ha a user triplában található, akkor a setuid bitet állítja be. Ha a group triplettben található, akkor a setgid bitet állítja be. Ez azt is jelenti, hogy a x jelző be van állítva. Ha a setgid flag be van állítva egy könyvtáron, a benne létrehozott új fájlok a könyvtár csoport azonosítóját (GID) öröklik a fájlt létrehozó felhasználó elsődleges csoport azonosítója helyett.setuid nincs hatással a könyvtárakra. |
|
S |
Az s -hez hasonló, de a x flag nincs beállítva. Ez a flag használhatatlan a könyvtárakon. |
|
t |
Ha a others triplában található, akkor a sticky bitet állítja.Ez azt is jelenti, hogy a x flag be van állítva. Ha a sticky bit be van állítva egy könyvtárban, akkor csak a fájl tulajdonosa, a könyvtár tulajdonosa vagy a rendszergazdai felhasználó törölheti vagy nevezheti át a könyvtárban lévő fájlokat. |
|
T |
Az t -hoz hasonló, de a x flag nincs beállítva. Ez a jelző könyvtárak esetén használhatatlan. |
A chmod #
használataA chmod
parancs általános formája a következő:
chmod MODE FILE...
A chmod
parancs lehetővé teszi egy fájl engedélyeinek módosítását szimbolikus vagy numerikus módban, illetve egy referenciafájl segítségével. A módokat a cikk későbbi részében részletesebben ismertetjük. A parancs egy vagy több, szóközzel elválasztott fájlt és/vagy könyvtárat fogadhat el argumentumként.
A fájl engedélyeit csak a root, a fájl tulajdonosa vagy a sudo jogosultságokkal rendelkező felhasználó módosíthatja. Legyen különösen óvatos a chmod
használatakor, különösen, ha rekurzív módon módosítja az engedélyeket.
Szimbolikus (szöveges) módszer #
A chmod
parancs szintaxisa a szimbolikus mód használatakor a következő formátumú:
chmod perms… FILE...
A zászlók első csoportja (), a users flags, meghatározza, hogy mely felhasználói osztályok engedélyei módosulnak a fájlhoz.
-
u
– A fájl tulajdonosa. -
g
– A csoporthoz tartozó felhasználók. -
o
– Minden más felhasználó. -
a
– Minden felhasználó, megegyezik augo
-vel.
Ha a users jelzőt elhagyjuk, az alapértelmezett a
lesz, és az umask által beállított jogosultságokat nem érinti.
A zászlók második csoportja (), a műveleti zászlók határozzák meg, hogy a jogosultságokat el kell-e távolítani, hozzáadni vagy beállítani:
-
-
A megadott jogosultságokat eltávolítja. -
+
A megadott jogosultságokat hozzáadja. -
=
A jelenlegi jogosultságokat a megadott jogosultságokra módosítja. Ha a=
szimbólum után nem ad meg engedélyeket, akkor a megadott felhasználói osztály összes engedélyét eltávolítja.
A jogosultságok (perms...
) explicit módon is beállíthatók a nulla vagy a következő betűk közül egy vagy több használatával: r
, w
, x
, X
, s
és t
. Használjon egyetlen betűt a u
, g
és o
halmazból, amikor az egyik felhasználói osztályból egy másik felhasználói osztályba másolja a jogosultságokat.
Az egynél több felhasználói osztály () jogosultságainak beállításakor vesszővel (szóköz nélkül) válassza el a szimbolikus módokat.
Az alábbiakban néhány példa a chmod
parancs szimbolikus módban történő használatára:
-
A csoport tagjainak engedélyt ad a fájl olvasására, de írásra és futtatásra nem:
chmod g=r filename
-
Vonja meg a végrehajtási engedélyt minden felhasználó számára:
chmod a-x filename
-
A többi felhasználó írási engedélyének visszavonása:
chmod -R o-w dirname
-
A fájl tulajdonosának kivételével minden felhasználó olvasási, írási és végrehajtási engedélyének visszavonása:
chmod og-rwx filename
Ez a következő formában is megvalósítható:
chmod og= filename
-
A fájl tulajdonosának olvasási, írási és végrehajtási engedélyt, a fájl csoportjának olvasási engedélyt, az összes többi felhasználónak pedig semmilyen engedélyt nem adhat:
chmod u=rwx,g=r,o= filename
-
Adja hozzá a fájl tulajdonosának jogosultságait azokhoz a jogosultságokhoz, amelyekkel a fájl csoportjának tagjai rendelkeznek:
chmod g+u filename
-
Adja hozzá a sticky bitet egy adott könyvtárhoz:
chmod o+t dirname
Numerikus módszer #
A chmod
parancs szintaxisa numerikus módszer használata esetén a következő formátumú:
chmod NUMBER FILE...
A numerikus mód használatakor mindhárom felhasználói osztály (tulajdonos, csoport és mindenki más) jogosultságait egyszerre állíthatja be.
A NUMBER
lehet három- vagy négyjegyű szám.
Háromjegyű szám használata esetén az első számjegy a fájl tulajdonosának, a második a fájl csoportjának, az utolsó pedig az összes többi felhasználónak az engedélyeit jelöli.
Az egyes írási, olvasási és végrehajtási engedélyek a következő számértékkel rendelkeznek:
-
r
(olvasás) = 4 -
w
(írás) = 2 -
x
(végrehajtás) = 1 - nincs engedély = 0
Egy adott felhasználói osztály engedélyeinek számát az adott csoport engedélyeinek értékeinek összege jelenti.
A fájl jogosultságainak számszerű megállapításához egyszerűen számítsa ki az összes felhasználói osztályra vonatkozó összegeket. Ha például a fájl tulajdonosának olvasási, írási és végrehajtási engedélyt, a fájl csoportjának olvasási és végrehajtási engedélyt, az összes többi felhasználónak pedig csak olvasási engedélyt szeretne adni, akkor a következőket kell tennie:
- Tulajdonos: rwx=4+2+1=7
- Csoport: r-x=4+0+1=5
- Mások: r-x=4+0+0+0=4
A fenti módszerrel a 754
számhoz jutunk, ami a kívánt jogosultságokat jelenti.
A setuid
, setgid
és sticky bit
zászlók beállításához négyjegyű számot használunk.
A négyjegyű szám használatakor az első számjegy a következő jelentéssel bír:
- setuid=4
- setgid=2
- sticky=1
- no changes = 0
A következő három számjegy jelentése ugyanaz, mint a háromjegyű szám használatakor.
Ha az első számjegy 0, akkor elhagyható, és az üzemmód 3 számjeggyel ábrázolható. A numerikus mód 0755
ugyanaz, mint a 755
.
A numerikus mód kiszámításához egy másik módszert is használhatunk (bináris módszer), de ez egy kicsit bonyolultabb. A legtöbb felhasználó számára elegendő, ha tudja, hogyan kell kiszámítani a numerikus módot a 4, 2 és 1 használatával.
A fájl jogosultságait numerikus jelölésben a stat
paranccsal ellenőrizheti:
stat -c "%a" filename
644
Itt van néhány példa arra, hogyan használhatja a chmod
parancsot numerikus módban:
-
A fájl tulajdonosának olvasási és írási, a csoporttagoknak és az összes többi felhasználónak csak olvasási engedélyt ad:
chmod 644 dirname
-
A fájl tulajdonosának olvasási, írási és végrehajtási, a csoporttagoknak olvasási és végrehajtási, az összes többi felhasználónak pedig semmilyen engedélyt:
chmod 750 dirname
-
Egy adott könyvtárnak olvasási, írási és végrehajtási engedélyeket, valamint egy sticky bitet ad:
chmod 1777 dirname
-
A fájl tulajdonosának olvasási, írási és végrehajtási engedélyeket ad, az összes többi felhasználónak pedig nem ad engedélyeket egy adott könyvtárhoz:
chmod -R 700 dirname
Hivatkozási fájl használata #
A --reference=ref_file
opció lehetővé teszi, hogy a fájl jogosultságai megegyezzenek a megadott hivatkozási fájl (ref_file
) jogosultságaival.
chmod --reference=REF_FILE FILE
A következő parancs például a file1
engedélyeit a file2
chmod --reference=file1 file2
A fájl engedélyeinek rekurzív módosítása #
Az adott könyvtár alatti összes fájlra és könyvtárra történő rekurzív működéshez használja a -R
(--recursive
) opciót:
chmod -R MODE DIRECTORY
Például a /var/www
könyvtár alatti összes fájl és alkönyvtár engedélyeinek 755
-re történő módosításához a következőt kell használni:
chmod -R 755 /var/www
Szimbolikus hivatkozásokon való működés #
A szimbolikus hivatkozások mindig 777
engedélyekkel rendelkeznek.
Az alapértelmezés szerint a szimlinkek jogosultságainak megváltoztatásakor a chmod
megváltoztatja a link által mutatott fájl jogosultságait.
chmod 755 symlink
Valószínűleg a cél tulajdonjogának megváltoztatása helyett egy “nem férhet hozzá a ‘szimlinkhez’: Permission denied” hiba.
A hiba azért fordul elő, mert a legtöbb Linux disztribúciónál a symlinkek alapértelmezés szerint védettek, és a célfájlokon nem lehet operálni. Ez az opció a /proc/sys/fs/protected_symlinks
pontban van megadva. A 1
azt jelenti, hogy engedélyezve, a 0
pedig letiltva. Javasoljuk, hogy ne kapcsolja ki a symlinkek védelmét.
Fájljogosultságok tömeges módosítása #
Néha előfordulnak olyan helyzetek, amikor tömegesen kell megváltoztatni a fájlok és könyvtárak jogosultságait.
A leggyakoribb forgatókönyv az, hogy rekurzívan megváltoztatja a weboldal fájljának jogosultságait 644
-re és a könyvtár jogosultságait 755
-re.
A numerikus módszerrel:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
A szimbolikus módszerrel:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;
A find
parancs megkeresi a /var/www/my_website
alatti fájlokat és könyvtárakat, és minden egyes talált fájlt és könyvtárat átad a chmod
parancsnak az engedélyek beállításához.
Következtetés #
A chmod
parancs megváltoztatja a fájl engedélyeit. Az engedélyek szimbolikus vagy numerikus módban is beállíthatók.
Az chmod
parancsról bővebben a chmod manpage oldalon olvashat.