104.5 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
104 Eszközök, Linux fájlrendszerek, Fájlrendszer-hierarchia szabvány |
Fejezet: |
104.5 Fájl jogosultságok és tulajdonjogok kezelése |
Lecke: |
1/1 |
Bevezetés
Többfelhasználós rendszer lévén a Linuxnak valamilyen módon nyomon kell követnie, hogy kié az egyes fájlok tulajdonjoga, és hogy egy felhasználó jogosult-e műveleteket végrehajtani egy fájlon. Ennek célja, hogy biztosítsa azon felhasználók magánéletét, akik esetleg bizalmasan szeretnék kezelni a fájljaik tartalmát, valamint hogy biztosítsa az együttműködést azáltal, hogy bizonyos fájlokat több felhasználó számára is elérhetővé tesz.
Ez egy háromszintű jogosultsági rendszeren keresztül történik. Minden lemezen lévő fájl egy felhasználó és egy felhasználói csoport tulajdonában van, és háromféle jogosultsággal rendelkezik: egy a tulajdonosnak, egy a fájlt birtokló csoportnak és egy mindenki másnak. Ebben a leckében megtanuljuk, hogyan kérdezhetjük le egy fájl jogosultságait, mit jelentenek ezek a jogosultságok, és hogyan manipulálhatjuk őket.
Fájlokra és mappákra vonatkozó információk lekérdezése
Az ls
parancs bármely mappa tartalmának listázására használható. Ebben az alapformában csak a fájlneveket kapjuk meg:
$ ls Another_Directory picture.jpg text.txt
De minden egyes fájlról sokkal több információ áll rendelkezésre, beleértve a fájltípust, a méretet, a tulajdonjogot és egyebeket. Ahhoz, hogy ezeket az információkat láthassuk, az ls
-től kell kérni egy “hosszú formátumú” listázást az -l
paraméter használatával:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
A fenti kimenet minden egyes oszlopának jelentése van. Nézzük meg a lecke szempontjából fontos oszlopokat.
-
A lista első oszlopa a fájl típusát és jogosultságait mutatja. Például az
drwxrwxr-x
esetén:-
Az első karakter (
d
), jelzi a fájl típuást. -
A következő három karakter (
rwx
), jelzi a fájl tulajdonosának (más néven user vagyu
) jogosultságait. -
A következő három karakter (
rwx
), jelzi a fájlt tulajdonló csoport (más néven group vagyg
) jogosultságait. -
Az utolsó három karakter (
r-x
), jelzi mindenki más (más néven others vagyo
) jogosultságait.
-
Tip
|
Gyakran hallani azt is, hogy az others jogosultságkészletet world (világi) jogosultságokként emlegetik, mint “Mindenki másnak a világon ezek a jogosultságai vannak”. |
-
A harmadik és negyedik oszlopok a tulajdonosi információkat mutatják: a fájlt birtokló felhasználót és csoportot.
-
A hetedik és utolsó oszlop a fájl nevét mutatja.
A második oszlop az adott fájlra mutató hardlinkek számát jelzi. Az ötödik oszlop a fájlméretet mutatja. A hatodik oszlop a fájl utolsó módosításának dátumát és időpontját mutatja. Ezek az oszlopok azonban nem relevánsak a jelenlegi téma szempontjából.
Mi lesz a mappákkal?
Ha megpróbálunk információt lekérdezni egy mappáról az ls -l
használatával, akkor a mappa tartalmának listája jelenik meg:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Ha ezt el szeretnénk kerülni, és magáról a mappáról szeretnénk információt lekérdezni, adjuk hozzá a ls
-hez a -d
paramétert:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Rejtett fájlok megnézése
A korábban az ls -l
segítségével lekérdezett lista nem teljes:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Van még három másik fájl is ebben a mappában, de ezek el vannak rejtve. Linuxon azok a fájlok, amelyek neve ponttal (.
) kezdődik, automatikusan el vannak rejtve. Ahhoz, hogy lássuk őket, az ls
-hez hozzá kell adnunk az -a
paramétert:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
A .thisIsHidden
fájl egyszerűen rejtett, mivel a neve .
-al kezdődik.
A .
és a ..
mappák azonban különlegesek. A "." az aktuális mappára mutató mutató. A `..
pedig a szülő mappára mutat, arra, amelyikben az aktuális mappa található. A Linuxban minden mappa legalább ezt a két mappát tartalmazza.
Tip
|
Az |
Fájltípusok megértése
Azt már korábban említettük, hogy az ls -l
mindenkori kimenetének első betűje a fájl típusát írja le. A három leggyakoribb fájltípus a következő:
-
(normál fájl)-
Egy fájl bármilyen típusú adatot tartalmazhat, és segíthet az adatok kezelésében. A fájlok módosíthatók, áthelyezhetők, másolhatók és törölhetők.
d
(mappa)-
Egy mappa más fájlokat vagy mappákat tartalmaz, és segít a fájlrendszer rendszerezésében. Technikailag a mappa a fájl egy speciális fajtája.
l
(szimbolikus link)-
Ez a “fájl” egy mutató (pointer) egy másik fájlra vagy mappára, bárhol a fájlrendszerben.
Ezeken kívül van még három másik fájltípus, amelyeket legalább ismerni kellene, de ennek a leckének a keretein kívül esnek:
b
(blokkeszköz)-
Ez a fájl egy virtuális vagy fizikai eszközt jelöl, általában lemezeket vagy más típusú tárolóeszközöket, például az első merevlemezt, amelyet a
/dev/sda
reprezentálhat. c
(karakteres eszköz)-
Ez a fájl egy virtuális vagy fizikai eszközt jelöl. A terminálok (mint például a fő terminál a
/dev/ttyS0
-n) és a soros portok gyakori példái a karakteres eszközöknek. s
(socket)-
A socketek “csatornaként” szolgálnak, amelyek információt továbbítanak két program között.
Warning
|
Ne módosítsuk a blokkeszközök, karakteres eszközök vagy socketek engedélyeit, hacsak nem tudjuk biztosan, mit csinálunk. Ez megakadályozhatja a rendszer működését! |
Jogosultságok megértése
Az ls -l
kimenetén a fájljogosultságok közvetlenül a fájltípus után jelennek meg, három, egyenként három karakterből álló csoportként, az r
, w
és x
sorrendben. Hamarosan megtudjuk, ezek mit jelentenek. Ne feledjük, hogy a -
(kötőjel) az engedélyek hiányát jelenti.
Fájlok jogosultságai
r
-
A read rövidítése, oktális értéke
4
(hamarosan lesz szó az oktális értékekről). Ez egy fájl megnyitásának és tartalmának olvasására vonatkozó engedélyt jelent. w
-
A write rövidítése, oktális értéke
2
. Ez a fájl szerkesztésének vagy törlésének engedélyezését jelenti. x
-
Az execute rövidítése, oktális értéke
1
. Ez azt jelenti, hogy a fájl futtatható futtatható programként vagy szkriptként.
Így például egy rw-
jogosultságú fájl olvasható és írható, de nem futtatható.
Mappák jogosultságai
r
-
A read rövidítése, oktális értéke
4
. Ez a mappa tartalmának, például a fájlneveknek az olvasására való jogosultságot jelenti. De ez nem jelenti maguknak a fájloknak az olvasási engedélyét. w
-
A write rövidítése, oktális értéke
2
. Ez a mappában lévő fájlok létrehozásának vagy törlésének engedélyezését jelenti.Ne feledjük, hogy ezeket a változtatásokat nem végezhetjük el csak write jogosultsággal, hanem execute jogosultságra (
x
) is szükség van a mappa megváltoztatásához. x
-
Az execute rövidítése, és oktális értéke
1
. Ez a mappába való belépés engedélyét jelenti, de a benne lévő fájlok listázását nem (ehhez azr
szükséges).
A mappákról szóló utolsó rész kissé zavarosnak tűnhet. Képzeljük el például, hogy van egy Another_Directory
nevű mappánk, a következő jogosultságokkal:
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Képzeljük el azt is, hogy ebben a mappában van egy hello.sh
nevű shell szkript:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Ha mi vagyunk a carol
felhasználó, és megpróbáljuk listázni az Another_Directory
mappa tartalmát, hibaüzenetet kapunk, mivel a felhasználónak nincs olvasási joga a mappához:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
A carol
felhasználónak azonban van futtatási jogosultsága, ami azt jelenti, hogy beléphet a mappába. Ezért carol
felhasználó hozzáférhet a mappában lévő fájlokhoz, amennyiben rendelkezik a megfelelő jogosultságokkal az adott fájlhoz. Tegyük fel, hogy a felhasználónak teljes jogosultsága (rwx
) van a hello.sh
szkripthez. Ekkor lehet futtatni a szkriptet, még akkor is, ha nem tudja elolvasni az azt tartalmazó mappa tartalmát, ha ismerjük a teljes fájlnevet:
$ sh Another_Directory/hello.sh Helló LPI Világ!
Mint már említettük, a jogosultságokat sorrendben adjuk meg: először a fájl tulajdonosának, majd a tulajdonos csoportnak, végül a többi felhasználónak. Amikor valaki megpróbál valamilyen műveletet végrehajtani a fájlon, az engedélyek ellenőrzése ugyanígy történik.
Először a rendszer ellenőrzi, hogy az aktuális felhasználóé-e a fájl, és ha ez igaz, akkor csak az első jogosultságok első csoportját alkalmazza. Ellenkező esetben a rendszer ellenőrzi, hogy az aktuális felhasználó tagja-e annak a csoportnak, amelyik a fájl tulajdonosa. Ebben az esetben csak a második jogosultságkészletet alkalmazza. Minden más esetben a rendszer a harmadik jogosultságkészletet alkalmazza.
Ez azt jelenti, hogy ha az aktuális felhasználó a fájl tulajdonosa, akkor csak a tulajdonosi jogosultságok érvényesek, még akkor is, ha a csoport vagy más engedélyek megengedőbbek, mint a tulajdonos jogosultságai.
Fájl engedélyek módosítása
A chmod
parancsot egy fájl engedélyeinek módosítására használjuk, és legalább két paramétert igényel: az első leírja, hogy milyen engedélyeket kell megváltoztatni, a második pedig arra a fájlra vagy mappára mutat, ahol a változtatás megtörténik. Ne feledjük, hogy csak a fájl tulajdonosa vagy a rendszergazda (root) módosíthatja a fájl jogosultságait.
A megváltoztatható jogosultságok kétféleképpen, vagy “módban” írhatók le.
Az első, az úgynevezett szimbolikus mód (symbolic mod) finomabb ellenőrzést biztosít, lehetővé téve egyetlen jogosultság hozzáadását vagy visszavonását anélkül, hogy a jogosultságkészlet többi elemét módosítaná. A másik mód, az úgynevezett octal mode (oktális mód), könnyebben megjegyezhető és gyorsabban használható, ha egyszerre szeretnénék beállítani az összes jogosultság értékét.
Mindkét mód ugyanahhoz a végeredményhez vezet. Így például az alábbi parancsok:
$ chmod ug+rw-x,o-rwx text.txt
és
$ chmod 660 text.txt
pontosan ugyanazt a kimenetet fogják eredményezni, egy fájlt az alábbi beállított jogosultságokkal:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Lássuk, hogyan működnek az egyes módok.
Szimbolikus mód
Amikor a szimbolikus módban leírjuk, hogy mely jogosultságokat szeretnénk megváltoztatni, az első karakter(ek) jelzi(k), hogy kinek a jogosultságai lesznek megváltoztatva: a felhasználóé (u
), a csoporté (g
), másoké (o
) és/vagy mindenkié (a
).
Ezután meg kell adnunk a parancsnak, hogy mit tegyen: megadhatunk egy jogosultságot (+
), visszavonhatunk egy engedélyt (-
), vagy beállíthatjuk egy adott értékre (=
).
Végül meg kell adni, hogy milyen jogosultságon akarunk cselekedni: olvasás (r
), írás (w
) vagy futtatás (x
).
Képzeljük el például, hogy van egy text.txt
nevű fájlunk a következő jogosultságkészlettel:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Ha a fájlt birtokló csoport tagjainak szeretnénk írási jogosultságot adni, akkor a g+w
paramétert használjuk. Egyszerűbb, ha így gondolkodunk: “A csoport (g
) számára adjunk (+
) írási engedélyt (w
)”. A parancs tehát a következő lenne:
$ chmod g+w text.txt
Nézzük meg az eredményt az ls
segítségével:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Szeretnénk eltávolítani ugyanazon fájl tulajdonosának az olvasási jogosultságait? Gondoljunk erre a következőképpen: “A felhasználótól (u
) vonjuk vissza (-
) az olvasási engedélyeket (r
)”. Tehát a paraméter u-r
, így:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Mi van akkor, ha a jogosultságokat pontosan rw-'-ként akarjuk beállítani mindenki számára? Akkor gondoljunk erre a következőképpen: “Mindenki számára (`a
), állítsuk be pontosan (=
) az olvasást (r
), az írást (w
), és ne legyen futtatás (-
)”. Tehát:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Természetesen egyszerre több jogosultságot is lehet módosítani. Ebben az esetben vesszővel (,
) kell őket elválasztani:
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
A fenti példa a következőképpen olvasható: “A felhasználó (u
) számára adjunk (+
) olvasási, írási és végrehajtási (rwx
) jogosultságokat, a csoporttól (g
) pedig vonjuk vissza (-
) a végrehajtási jogosultságot (x
).”.
A chmod
egy mappán futtatva csak a mappa jogosultságait módosítja. A chmod
rendelkezik rekurzív móddal is, ami akkor hasznos, ha a “egy mappában és annak almappáiban lévő összes fájl engedélyeit” akarjuk megváltoztatni. Ennek használatához a -R
paramétert a parancs neve után, a módosítandó jogosultságok előtt kell megadni:
$ chmod -R u+rwx Another_Directory/
Ez a parancs a következőképpen olvasható: “Rekurzívan (-R
), a felhasználó (u
) számára olvasási, írási és végrehajtási (rwx
) engedélyeket ad (+
)”.
Warning
|
Legyünk óvatosak és gondoljuk meg kétszer is, mielőtt a |
Oktális mód
Oktális módban a jogosultságokat más úton adjuk meg: egy három számjegyű oktális értékként, 8-as számrendszerben.
Minden jogosultsághoz tartozik egy érték, az alábbi sorrendben: először az olvasás (r
), ami a 4
, majd az írás (w
), ami a 2
és végül a futtatás (x
), ami pedig az 1
. Ha nincs jogosultság, használjuk a nulla (0
) értéket. Tehát az rwx
jogosultság 7
(4+2+1
) lenne, az r-x
pedig 5
(4+0+1
).
A három számjegyből az első a felhasználó (u
) jogosultságait reprezentálja, a második a csoportét (g
) és a harmadik mindenki másét (o
). Ha egy fájl jogosultságait az alábbira szeretnénk beállítani: rw-rw----
, az oktális érték 660
lesz:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Ettől függetlenül az oktális mód szintaxisa ugyanaz, mint a szimbolikus mód esetén, az első paraméter reprezentálja a megváltoztatni kívánt jogosultságokat, a második paraméter pedig arra a fájlra vagy mappára mutat, ahol a változtatásokat végre szeretnénk hajtani.
Tip
|
Ha egy jogosultsági érték páratlan, a fájl biztosan futtatható! |
Melyik szintaxist használjuk? Az oktális mód akkor ajánlott, ha a jogosultságokat egy adott értékre, például 640
-re (rw- r-- ---
) akarjuk állítani.
A szimbolikus mód hasznosabb, ha csak egy adott értéket akarunk megfordítani, függetlenül a fájl aktuális jogosultságaitól. Például a felhasználó számára a chmod u+x script.sh
segítségével hozzáadhatjuk a végrehajtási engedélyeket anélkül, hogy figyelembe vennénk, vagy akár csak megérintenénk a csoport és mások aktuális engedélyeit.
Fájl tulajdonjogának megváltoztatása
A chown
parancs arra való, hogy megváltoztassuk egy fájl vagy mappa tulajdonjogait. A szintaxis nagyon egyszerű:
chown USERNAME:GROUPNAME FILENAME
Vegyük például a text.txt
nevű fájlt:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
A fájl tulajdonosa a carol
felhasználó, és a csoport is carol
. Most megváltoztatjuk a fájlt birtokló csoportot egy másik csoportra, például a students
csoportra:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Ne feledjük, hogy a fájlokat birtokló felhasználónak nem kell a fájlokat birtokló csoporthoz tartoznia. A fenti példában a carol
felhasználónak nem kell a students
csoport tagjainak lennie.
A felhasználói vagy csoportos engedélyek elhagyhatók, ha nem szeretnénk megváltoztatni őket. Tehát, ha csak a fájlt birtokló csoportot szeretnénk megváltoztatni, akkor a chown :students text.txt
parancsot használjuk. Ha csak a felhasználót szeretnénk megváltoztatni, a parancs a következő lenne: chown carol: text.txt
vagy csak chown carol text.txt
. Alternatívaként használhatjuk a chgrp students text.txt
parancsot is.
Hacsak nem mi vagyunk a rendszergazda (root), nem változtathatjuk meg egy fájl tulajdonjogát egy másik felhasználóra vagy csoportra, amelyhez nem tartozik. Ha megpróbáljuk, az Operation not permitted
(Művelet nem engedélyezett) hibaüzenetet kapjuk.
Csoportok lekérdezése
Mielőtt megváltoztatnánk egy fájl tulajdonjogát, hasznos lehet tudni, hogy milyen csoportok léteznek a rendszerben, mely felhasználók tagjai egy csoportnak, és mely csoportokhoz tartozik egy felhasználó.
Ha meg szeretnénk nézni, hogy milyen csoportok vannak a rendszerben, használjuk a getent group
parancsot. A kimenet ehhez hasonló lesz (a kimenet rövidítve van):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Ha tudni szeretnénk, hogy egy felhasználó melyik csoporthoz tartozik, adjuk meg a felhasználónevet a groups
paramétereként:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Ha a fordítottját szeretnénk (azaz mely felhasználók tartoznak egy csoporthoz), használjuk a groupmems
parancsot. A -g
paraméter megadja a csoportot, az -l
pedig felsorolja a csoport összes tagját:
# groupmems -g cdrom -l carol
Tip
|
A |
Alapértelmezett jogosultságok
Végezzünk el egy kísérletet! Nyissunk meg egy terminálablakot, és hozzunk létre egy üres fájlt a következő paranccsal:
$ touch testfile
Most nézzük meg a fájl jogosultságait. Ezek eltérőek lehetnek a saját rendszerünk esetén, de tegyük fel, hogy így néznek ki:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
A jogosultságok rw-r—r--
: olvasás és írás a felhasználónak, és olvasás a csoportnak és mindenki másnak, vagyis oktális módban 644
. Most próbáljunk meg létrehozni egy mappát:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
A jogosultságok most rwxr-xr-x
: olvasás, írás és futtatás a felhasználónak, olvasás és futtatás a csoportnak és mindenki másnak, vagy 755
oktális módban.
Nem számít, hogy a fájlrendszerben hol van, minden létrehozott fájl vagy mappa ugyanazokat a jogosultságokat kapja. Gondolkodjunk el azon, hogy honnan származnak!
Ezek a user mask vagy umask
-ból származnak, amely minden létrehozott fájl alapértelmezett jogosultságát beállítja. Az aktuális értékeket a umask
paranccsal ellenőrizhetjük:
$ umask 0022
De ez nem úgy néz ki, mint az rw-r—r--
, vagy akár a 644
. Talán a -S
paraméterrel kellene próbálkoznunk, hogy szimbolikus módban kapjunk kimenetet:
$ umask -S u=rwx,g=rx,o=rx
Ezek ugyanazok a jogosultságok, amelyeket a tesztmappánk kapott a fenti példák egyikében. De miért van az, hogy amikor létrehoztunk egy fájlt, a jogosultságok másak voltak?
Nos, nincs értelme alapértelmezés szerint globális végrehajtási engedélyeket beállítani mindenkinek bármilyen fájlhoz, nem igaz? A mappáknak szükségük van a végrehajtási engedélyekre (különben nem lehet megnyitni őket), de a fájloknak nem, tehát nem kapnak ilyeneket. Ezért rw-r—r--
.
Az alapértelmezett jogosultságok megjelenítése mellett a umask
az aktuális shell munkamenetre vonatkozó jogosultságok megváltoztatására is használható. Például, ha az alábbi parancsot használjuk:
$ umask u=rwx,g=rwx,o=
Minden új mappa az rwxrwx---
és minden fájl a rw-rw----
jogosultságot fogja örökölni (mivel nem kapnak végrehajtási jogot). Ha megismételjük a fenti példákat (a testfile
és a testdir
létrehozását), majd megnézzük a jogosultságokat, az alábbit kapjuk:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
Ha pedig a umask
-ot az -S
(szimbolikus mód) paraméter nélkül ellenőrizzük, akkor a következőt kapjuk:
$ umask 0007
Az eredmény nem tűnik ismerősnek, mert a használt értékek eltérőek. Íme egy táblázat az egyes értékekkel és azok jelentésével:
Érték | Fájl-jogosultságok | Mappa-jogosultságok |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Látható, hogy a 007
megfelel az rwxrwx---
-nek, pontosan úgy, ahogy kértük. Az első nulla figyelmen kívül hagyható.
Speciális jogosultságok
A felhasználói, csoportos és egyéb olvasási, írási és végrehajtási engedélyeken kívül minden fájlnak három további speciális jogosultsága lehet, amelyek megváltoztathatják egy mappa működését vagy egy program futását. Ezek szimbolikus vagy oktális módban adhatók meg, és a következők:
Sticky Bit
A sticky (ragadós) bit, más néven restricted deletion flag oktális értéke 1
, és szimbolikus módban egy t
jelöli a mindenki más jogosultságain belül. Ez csak a mappákra vonatkozik, a normál fájlokra nincs hatása. Linuxon megakadályozza, hogy a felhasználók eltávolítsanak vagy átnevezzenek egy fájlt egy mappában, kivéve, ha az adott fájl vagy mappa a tulajdonukban van.
Azon mappák esetében, amelyeknél a sticky bit be van állítva, egy t
jelenik meg az x
helyén az others jogosultságai között az ls -l
kimenetén:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
Oktális módban a speciális engedélyek 4 számjegyű jelöléssel kerülnek megadásra, ahol az első számjegy jelöli az adott speciális engedélyt. Például az Another_Directory
mappához tartozó sticky bit (1
érték) beállításához oktális módban, 755
jogosultsággal, a parancs a következő lenne:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Set GID
A Set GID, más néven SGID vagy Set Group ID bit, oktális értéke 2
, és szimbolikus módban a group engedélyeknél egy s
jelöli. Ez futtatható fájlokra vagy mappákra alkalmazható. Fájlok esetén a folyamatot a fájl tulajdonában lévő csoport jogosultságaival futtatja. Ha mappákra alkalmazzuk, akkor minden alatta létrehozott fájl vagy mappa a szülő mappa csoportját örökli.
Az SGID bitet tartalmazó fájlok és mappák esetén az ls -l
kimenetén a group engedélyeknél az x
helyett egy s
jelenik meg:
$ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Ha szimbolikus módban szeretnénk SGID-engedélyeket adni egy fájlhoz, a parancs a következő:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
A következő példa segít jobban megérteni az SGID hatását egy mappára. Tegyük fel, hogy van egy Sample_Directory
nevű mappánk, amely a carol
felhasználó és a users
csoport tulajdonában van, a következő jogosultsági struktúrával:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Most lépjünk át ebbe a mappába, és a touch
paranccsal hozzunk létre egy üres fájlt benne. Az eredmény a következő lesz:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Amint látjuk, a fájl a carol
felhasználó és a carol
csoport tulajdonában van. De ha a mappa SGID jogosultsággal lenne beállítva, az eredmény más lenne. Először is adjuk hozzá az SGID bitet a Sample_Directory
mappához, és ellenőrizzük az eredményeket:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
A csoportjogosultságoknál az s
jelzi, hogy az SGID bit be van állítva. Most lépjünk át ebbe a mappába, és hozzunk létre egy újabb üres fájlt a touch
paranccsal:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
A fájl tulajdonosa a users
csoport. Ez azért van, mert az SGID bit miatt a fájl a szülő mappa csoporttulajdonosát örökölte, ami a users
.
Set UID
A SUID, más néven Set User ID oktális értéke 4
, és szimbolikus módban a user engedélyeknél egy s
jelöli. Csak fájlokra vonatkozik, mappákra nincs hatása. A viselkedése hasonló az SGID bithez, de a folyamat a fájl tulajdonában lévő user jogosultságaival fog futni. A SUID bitet tartalmazó fájlok esetén az ls -l
kimenetén az x
helyett egy s
jelzi a felhasználó jogosultságait:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Egy paraméterhez több speciális engedélyt is kombinálhatunk. Tehát, ha az SGID (2
érték) és SUID (4
érték) értéket akarjuk beállítani oktális üzemmódban a test.sh
szkripthez 755
jogosultsággal, akkor a következőket kell beírnunk:
$ chmod 6755 test.sh
És az eredmény az alábbi lesz:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Ha a terminálunk támogatja a színeket, márpedig manapság a legtöbb támogatja, akkor az |
Gyakorló feladatok
-
Hozzunk létre egy
emptydir
nevű mapát azmkdir emptydir
parancs segítségével! Majd azls
használatával listázzuk azemptydir
mappa jogosultságait! -
Hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Achmod
szimbolikus módban történő használatával, adjunk futtatási jogokat azemptyfile
fájl tulajdonosának és vegyük el az írási és futtatási jogosultságokat mindenki mástól! Csak achmod
parancsot használjuk! -
Mik lennének egy fájl alapértelmezett jogosultságai, ha az
umask
érték027
-re van állítva? -
Képzeljük el a
test.sh
nevű shell szkriptet az alábbi jogosultságokkal és tulajdonjogokkal:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Mik a tulajdonos jogosultságai a fájlon?
-
Az oktális jelölést használva, mi lenne a
chmod
szintaxisa a fájlnak adott speciális jogosultság “visszavonásához”?
-
-
Vegyük az alábbi fájlt:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Milyen típusú fájl az
sdb1
? Ki tud bele írni? -
Vegyük az alábbi 4 fájlt:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Írjuk le a megfelelő jogosultságokat minden fájlhoz és mappához, az oktális mód 4 számjegyű jelölésével!
Another_Directory
foo.bar
HugeFile.zip
Sample_Directory
Gondolkodtató feladatok
-
Próbáljuk ki ezt egy terminálban: hozzounk létre egy üres fájlt
emptyfile
néven atouch emptyfile
paranccsal! Most “nullázzuk” a fájl jogosultságait achmod 000 emptyfile
paranccsal! Mi történik, ha azemptyfile
jogosultságait úgy változtatjuk meg, hogy csak egy értéket adunk meg achmod
-nak oktális módban, példáulchmod 4 emptyfile
? És ha kettőt használunk, mint achmod 44 emptyfile
? Mit tudhatunk meg arról, hogy achmod
hogyan olvassa a numerikus értéket? -
Tekintsük meg az ideiglenes mappa (
/tmp
) engedélyeit egy Linux rendszerben:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
A felhasználónak, csoportnak és mindenki másnak teljes jogosultságai vannak. De törölhet-e egy sima felhasználó bármilyen fájlt ebből a mappából? Miért van ez így?
-
A
test.sh
nevű fájl a következő jogosultságokkal rendelkezik:-rwsr-xr-x
. Ez azt jelenti, hogy a SUID bit be van állítva. Most futtassuk a következő parancsokat:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Mit csináltunk? Mit jelent a nagybetűs
S
? -
Hogyan hozhatnánk létre egy
Box
nevű mappát, ahol az összes fájl automatikusan ausers
csoport tulajdonában van, és csak az a felhasználó törölheti, aki létrehozta őket?
Összefoglalás
Ebben a leckében megtanultuk, hogyan használhatjuk az ls
-t a fájljogosultságokról szóló információk lekérdezésére (és dekódolására), hogyan szabályozhatjuk vagy változtathatjuk meg, hogy ki hozhat létre, törölhet vagy módosíthat egy fájlt a chmod
segítségével, mind oktális, mind szimbolikus módban, hogyan módosíthatjuk a fájlok tulajdonjogát a chown
és chgrp
segítségével, és hogyan kérdezhetjük le és változtathatjuk meg a fájlok és mappák alapértelmezett jogosultsági maszkját a umask
segítségével.
A leckében az alábbi parancsokról volt szó:
ls
-
Fájlok listázása, opcionálisan olyan részletekkel, mint például a jogosultságok.
chmod
-
Egy fájl vagy mappa jogosultságainak módosítása.
chown
-
Egy fájl vagy mappa tulajdonos felhasználójának és/vagy csoportjának módosítása.
chgrp
-
Egy fájl vagy mappa tulajdonosi csoportjának módosítása.
umask
-
A fájlok és mappák alapértelmezett jogosultsági maszkjának lekérdezése vagy beállítása.
Válaszok a gyakorló feladatokra
-
Hozzunk létre egy
emptydir
nevű mapát azmkdir emptydir
parancs segítségével! Majd azls
használatával listázzuk azemptydir
mappa jogosultságait!Adjuk a
-d
paramétert azls
-hez, hogy a mappa tartalmának listázása helyett a mappa fájlattribútumait láthassuk. A válasz tehát a következő:ls -l -d emptydir
Bónuszpont, ha a két paramétert egybeolvasztottuk:
ls -ld emptydir
. -
Hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Achmod
szimbolikus módban történő használatával, adjunk futtatási jogokat azemptyfile
fájl tulajdonosának és vegyük el az írási és futtatási jogosultságokat mindenki mástól! Csak achmod
parancsot használjuk!Gondolkodjunk így:
-
“A fájlt tulajdonló felhasználónak (
u
) adjunk (+
) futtatási (x
) jogokat”, tehátu+x
. -
“A csoporttól (
g
) és mindenki mástól (o
), vegyük el (-
) az írási (w
) és futtatási (x
) jogokat”, tehátgo-wx
.A két jogosultságkészlet összekapcsolásához vesszőt teszünk közéjük. A végeredmény tehát a következő:
chmod u+x,go-wx emptyfile
-
-
Mik lennének egy fájl alapértelmezett jogosultságai, ha az
umask
érték027
-re van állítva?A jogosultságok:
rw-r-----
-
Képzeljük el a
test.sh
nevű shell szkriptet az alábbi jogosultságokkal és tulajdonjogokkal:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Mik a tulajdonos jogosultságai a fájlon?
A tulajdonos jogosultsága (az
ls -l
kimenetén a 2-tól a 4. karakterig) azrwx
, tehát a válasz: “olvasni, írni és futtatni a fájlt”. -
Az oktális jelölést használva, mi lenne a
chmod
szintaxisa a fájlnak adott speciális engedély “visszavonásához”?“Visszavonhatjuk” a speciális jogosultságokat azzal, ha egy 4. számjegyet, a
0
-t átadjuk achmod
-nak. Az aktuális jogosultság755
, tehát a parancschmod 0755
.
-
-
Vegyük az alábbi fájlt:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Milyen típusú fájl az
sdb1
? Ki tud bele írni?Az
ls -l
kimenetének első karaktere a fájl típusát mutatja. Ab
egy blokkeszköz, általában egy (belső vagy külső) lemez, amely a géphez van csatlakoztatva. A tulajdonos (root
) és adisk
csoport bármely felhasználója írhat rá. -
Vegyük az alábbi 4 fájlt:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Írjuk le a megfelelő jogosultságokat minden fájlhoz és mappához, az oktális mód 4 számjegyű jelölésével!
A megfelelő jogosultságok, oktális módban az alábbiak:
Another_Directory
1755
.1
a sticky bit,755
a szokásos jogosultságok (rwx
a felhasználónak,r-x
a csoportnak és mindenki másnak).foo.bar
0044
. Nincs speciális jogosultság (így az első számjegy0
), nincs jogosultság a felhasználónak (---
) és csak olvasás (r—r--
) a csoportnak és mindenki másnak.HugeFile.zip
0664
. Nincs speciális jogosultság, tehát az első számjegy0
.6
(rw-
) a felhasználónak és a csoportnak,4
(r--
) mindenki másnak.Sample_Directory
2755
.2
az SGID bit,7
(rwx
) a felhasználónak,5
(r-x
) a csoportnak és mindenki másnak.
-
Próbáljuk ki ezt egy terminálban: hozzounk létre egy üres fájlt
emptyfile
néven atouch emptyfile
paranccsal! Most “nullázzuk” a fájl jogosultságait achmod 000 emptyfile
paranccsal! Mi történik, ha azemptyfile
jogosultságait úgy változtatjuk meg, hogy csak egy értéket adunk meg achmod
-nak oktális módban, példáulchmod 4 emptyfile
? És ha kettőt használunk, mint achmod 44 emptyfile
? Mit tudhatunk meg arról, hogy achmod
hogyan olvassa a numerikus értéket?Ne feledjük, hogy “nulláztuk” az
emptyfile
jogosultságait. Tehát a kezdeti állapota a következő lesz:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Most próbáljuk ki az első parancsot,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Látjuk? Az others jogosultságai megváltoztak. És mi történik, ha 2 számjeggyel próbálkozunk, mint pl.
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Most a group és others jogosultságok voltak érintettek. Ebből arra következtethetünk, hogy oktális módban a
chmod
“visszafelé” olvassa az értéket, a legkevésbé jelentős számjegytől (others) a legjelentősebbig (user). Ha egy számjegyet adunk át, akkor az others jogosultságait módosítjuk. Két számjeggyel a group és others, három számjeggyel a user, group és others, négy számjeggyel pedig a user, group, others és a speciális jogosultságokat módosítjuk. -
Tekintsük meg az ideiglenes mappa (
/tmp
) engedélyeit egy Linux rendszerben:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
A felhasználónak, csoportnak és mindenki másnak teljes jogosultságai vannak. De törölhet-e egy sima felhasználó bármilyen fájlt ebből a mappából? Miért van ez így?
A
/tmp
egy úgynevezett world writeable mappa, ami azt jelenti, hogy bármelyik felhasználó írhat bele. De nem akarjuk, hogy egy felhasználó mások által létrehozott fájlokat piszkáljon, ezért a sticky bit be van állítva (amit at
jelez az others jogosultságoknál). Ez azt jelenti, hogy egy felhasználó törölheti a/tmp
állományokat, de csak a saját maga által létrehozottakat. -
A
test.sh
nevű fájl a következő jogosultságokkal rendelkezik:-rwsr-xr-x
. Ez azt jelenti, hogy a SUID bit be van állítva. Most futtassuk a következő parancsokat:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Mit csináltunk? Mit jelent a nagybetűs
S
?Eltávolítottuk a fájl tulajdonosának végrehajtási jogosultságait. Az
ls -l
kimenetén azs
(vagyt
) veszi át azx
helyét, így a rendszernek meg kell mutatnia, hogy a felhasználónak van-e végrehajtási jogosultsága vagy sem. Ezt úgy teszi, hogy megváltoztatja a különleges karakterek esetét.A kisbetűs
s
az első jogosultsági csoportban azt jelenti, hogy a fájl tulajdonosa rendelkezik végrehajtási jogosultsággal, és a SUID bit be van állítva. A nagybetűsS
azt jelenti, hogy a fájl tulajdonosa nem rendelkezik (-
) végrehajtási jogokkal, és a SUID bit be van állítva.Ugyanez mondható el az SGID-ről is, a kisbetűs
s
a második jogosultsági csoportban azt jelenti, hogy a fájl tulajdonosának a csoportja rendelkezik végrehajtási jogosultsággal, és az SGID bit be van állítva. A nagybetűsS
azt jelenti, hogy a fájl tulajdonosának csoportja nem rendelkezik (-
) végrehajtási jogokkal, és az SGID bit be van állítva.Ez igaz a sticky bitre is, amelyet a harmadik jogosultsági csoportban az
t
jelöl. A kisbetűst
azt jelenti, hogy a sticky bit be van állítva, és mindenki másnak végrehajtási joga van. A nagybetűsT
azt jelenti, hogy a sticky bit be van állítva, és mindenki másnak nincs futtatási jogosultságuk. -
Hogyan hozhatnánk létre egy
Box
nevű mappát, ahol az összes fájl automatikusan ausers
csoport tulajdonában van, és csak az a felhasználó törölheti, aki létrehozta őket?Ez egy többlépcsős folyamat. Az első lépés a mappa létrehozása:
$ mkdir Box
Azt akarjuk, hogy minden fájl, amelyet ebben a mappában hozunk létre, automatikusan a
users
csoporthoz legyen rendelve. Ezt úgy érhetjük el, hogy ezt a csoportot állítjuk be a mappa tulajdonosának, majd beállítjuk az SGID bitet. Biztosítanunk kell azt is, hogy a csoport bármely tagja írhasson ebbe a mappába.Mivel nem érdekel minket, hogy milyen a többi jogosultság, és csak a speciális biteket akarjuk “átfordítani”, érdemes a szimbolikus módot használni:
$ chown :users Box/ $ chmod g+wxs Box/
Vegyük figyelembe, hogy ha az aktuális felhasználó nem tartozik a
users
csoporthoz, akkor a fenti parancsok előtt asudo
parancsot kell használni, hogy a változtatást root-ként hajtsuk végre.Most az utolsó rész következik, annak biztosítása, hogy csak az a felhasználó törölhesse a fájlt, aki létrehozta azt. Ezt úgy érhetjük el, hogy a mappában beállítjuk a sticky bitet (amit egy
t
jelez). Ne feledjük, hogy ez a beállítás a mindenki más engedélyeinél (o
) van beállítva.$ chmod o+t Box/
A
Box
mappa jogosultságai a következők kell, hogy legyenek:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Természetesen az SGID-et és a sticky bitet megadhatjuk csak egy
chmod
paranccsal:$ chmod g+wxs,o+t Box/
Bónusz, ha erre is gondoltunk.