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 chgrpparanccsal 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 lsparanccsal 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 filenameEz 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 statparanccsal 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 findparancs 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.