5.3 Lecke 1
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
5 Biztonság és Fájlokkal Kapcsolatos Jogosultságok |
Fejezet: |
5.3 Fájl Jogosultságok és Tulajdonjogok Menedzselése |
Lecke: |
1/1 |
Bevezetés
Többfelhasználós rendszerként a Linuxnak valamilyen módon nyomon kell tudnia követni, hogy ki birtokolja az egyes fájlokat és hogy a felhasználó végezhet-e műveleteket az adott fájlon. Ennek célja azon felhasználók privát szférájának a biztosítása, akik a fájljaik tartalmát bizalmasan akarják kezelni, valamint azáltal, hogy több felhasználó számára elérhetővé tesz bizonyos fájlokat, lehetőséget ad az együttműködésre.
Ez egy háromszintű jogosultsági rendszeren keresztül történik: a lemezen minden fájl egy felhasználó és egy felhasználói csoport tulajdona, és háromféle jogosultsággal rendelkezik: egy a tulajdonosának, egy a csoportnak, aki tulajdonolja a fájlt és egy mindenki másnak. Ebben a leckében megtanuljuk, hogyan kell lekérni egy fájl jogosultságait és hogyan kell azokat manipulálni.
Információ Lekérése Fájlokról és Mappákról
Az ls
parancsot használjuk egy mappa tartalmának kilistázására. Ebben az alapvető formában a fájlneveket látjuk:
$ ls Another_Directory picture.jpg text.txt
Azonban sokkal több információ érhető el minden fájlról, beleértve a típusát, méretét, tulajdonosát, stb. Hogy lássuk ezeket az információkat, az ls
-t egy “hosszú lista” formátumban kell látnunk, a -l
paramétert használva:
$ 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 oszlopának jelentése van:
-
Az első oszlop a listában a fájl típusát és az engedélyeit mutatja.
Például a
drwxrwxr-x
esetén:-
Az első karakter — a
d
— jelzi a fájl típusát. -
A következő három karakter — az
rwx
— jelzi a fájl tulajdonosának jogosultságait a fájlon, más néven user vagyu
. -
A következő három karakter — az
rwx
— jelzi a fájlt birtokló csoport engedélyeit, máv néveng
. -
Az utolsó három karakter — az
r-x
— jelzi mindenki más jogosultságait, más néven others vagyo
.
-
-
A második oszlop jelzi az adott fájlra mutató hard linkek számát. Mappa esetén ez az almappák számát jelenti, plusz egy link önmagához (
.
) és a szülőmappához (..
). -
A harmadik és a negyedik oszlopok a tulajdonjogra vonatkozó információk: a felhasználó és a csoport, aki birtokolja a fájlt.
-
Az ötödik oszlop a fájl mérete bájtokban.
-
A hatodik oszlop a pontos dátum és idő, vagy időbélyeg, azt jelöli, amikor a fájl utoljára módosítva lett.
-
A hetedik és egyben utolsó oszlop a fájl neve.
Ha szeretnénk a fájlméreteket “emberileg olvasható” formátumban látni, adjuk hozzá a -h
paramétert az ls
-hez. Az egy kilobájtnál kisebb fájlok méretét bájtban fogja kiírni. Az egy kilobájtnál nagyobb, de egy megabájtnál kisebb fájlok mérete után egy K
kerül, jelezve, hogy a méret kilobájtban értendő. Ugyanez vonatkozik a megabájt (M
) és gigabájt (G
) méretű fájlokra is:
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 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 -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Ha csak bizonyos fájlokról szeretnénk információt kapni, adjuk hozzá ezeket a fájlokat az ls
-hez:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Mi a helyzet a Mappákkal?
Ha megpróbálunk információt szerezni egy mappáról az ls -l
segítségével, az ehelyett ki fogja listázni a mappa tartalmát:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Hogy ezt elkerüljük és valóban magáról a mappáról kapjunk információt, adjuk a -d
paramétert az ls
-hez:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Rejtett Fájlok Láthatósága
Az ls -l
használatával korábban lekért jegyzék 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 három másik fájl is a mappában, de azok rejtettek. Linux esetében azok a fájlok, amelyeknek a neve ponttal (.
) kezdődik, automatikusan rejtettek. Ahhoz, hogy lássuk őket, a -a
paramétert kell az ls
-hez adnunk:
$ 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 azért rejtette, mert a neve .
-al kezdődik.
A .
és ..
mappák azonban különlegesek. A .
egy aktuális mappára mutató pointer, míg a ..
a szülő mappára (a mappa, ami az aktuális mappát tartalmazza) mutató pointer. A Linuxban minden mappa tartalmazza legalább ezt a két speciális mappát.
Tip
|
Több paramétert is kombinálhatunk az |
Fájltípusok Értelmezése
Már említettük, hogy minden ls -l
kimenetében az első karakter a fájl típusa. A három leggyakoribb fájltípus:
-
(normál fájl)-
Fájl, ami bármilyen típusú adatot tartalmazhat. A fájlok módosíthatók, áthelyezhetők, másolhatók és törölhetők.
d
(mappa)-
A mappa más fájlokat vagy mappákat tartalmaz és segít rendszerezni a fájlrendszert. Technikailag a mappák speciális típusú fájlok.
l
(soft link)-
Ez a “file” egy pointer, ami egy másik fájlra vagy mappára mutat valahol máshol a fájlrendszerben.
Ezeken felül még három másik fájltípus van, amelyekről legalább tudnunk kell, de nem tartoznak ezen lecke hatáskörébe:
b
(blokkeszköz)-
Ez a fájl egy virtuális vagy fizikai eszközt jelöl, általában lemezeke vagy más tárolóeszközöket. Például az első merevlemez a rendszerben
/dev/sda
néven jelenik meg. c
(karaktereszköz)-
Ez a fájl egy virtuális vagy fizikai eszközt jelöl. A terminálok (mint a főterminál a
/dev/ttyS0
-on) és a soros portok gyakori példái a karaktereszközöknek. s
(socket)-
A socketek “csatornaként” továbbítanak információt két program között.
Warning
|
Ne változtassuk meg blokkeszközök, karaktereszközök vagy socketek bármely jogosultságát, kivéve, ha biztosan tudjuk, mit csinálunk! Ez meghibásodást okozhat a rendszer működésében! |
Jogosultságok Értelmezése
Az ls -l
kimenetében a fájl jogosultságai rögtön a fájl típusa után szerepelnek, három csoport három karakterrel, rendre r
, w
és x
. Itt láthatjuk, mit jelentenek. Jegyezzük meg, hogy a kötőjel -
egy bizonyos engedély hiányát jelenti.
Fájlok Jogosultságai
r
-
Az olvasást (read) jelzi és oktális értéke
4
(semmi probléma, az oktálokat hamarosan megbeszéljük). Ez a jogosultság azt jelenti, hogy megnyithatjuk a fájlt és elolvashatjuk a tartalmát. w
-
Az írást (write) jelzi és az oktális értéke
2
. Ez a jogosultság azt jelenti, hogy szerkeszthetjük vagy törölhetjük a fájlt. x
-
A futtathatóságot (execute) jelzi és az oktális értéke
1
. Ez azt jelenti, hogy a fájl futtatható vagy szkript.
Tehát például egy rw-
jogosultságú fájl olvasható és írható, de nem futtatható.
Mappák Jogosultságai
r
-
Az olvasást (read) jelzi és az oktális értéke
4
. Ez azt jelenti, hogy megnézhetjük a mappa tartalmát, például a fájlneveket, de nem jelenti, hogy magukat a fájlokat is olvashatjuk. w
-
Az írást (write) jelzi és az oktális értéke
2
. Ez azt jelenti, hogy van jogosultságunk létrehozni vagy törölni fájlokat a mappában, vagy megváltoztatni a nevüket, jogosultságaikat és tulajdonosaikat. Ha egy felhasználónak írási joga van egy mappán, a felhasználó megváltoztathatja a mappa bármely fájljának a jogosultságát, még akkor is, ha a felhasználónak nincsenek jogosultságai a fájlon vagy a fájl egy másik felhasználó tulajdona. x
-
A futtathatóságot (execute) jelzi és az oktális értéke
1
. Ez azt jelenti, hogy beléphetünk a mappába, de nem listázhatjuk a fájljait (ahhoz azr
jogosultság szükséges).
Az utolsó bit a mappák esetén egy kicsit összezavarhat minket. Tételezzük fel, hogy van egy Another_Directory
nevű mappánk az alábbi jogosultságokkal:
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Képzeljük el azt is, hogy a mappában van egy hello.sh
nevű shell szkriptünk az alábbi jogosultságokkal:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Ha mi vagyunk a carol
felhasználó és megpróbáljuk kilistázni az Another_Directory
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
Mivel a carol
felhasználónak van futtatási joga, beléphet a mappába. Éppen ezért a carol
felhasználó elérheti a fájlokat a mappán belül, amíg megvannak a szükséges jogosultságai az adott fájlhoz. Ebben a példában a felhasználónak minden jogosultsága megvan a hello.sh
szkripthez, tehát képes futtatni a szkriptet, még ha képtelen is a tartalmazó mappa tartalmát olvasni. Csak a teljes fájlnévre van szüksége.
$ sh Another_Directory/hello.sh Hello LPI World!
Ahogy már korábban láthattuk, a jogosultságokat sorrendben adjuk meg: először a fájl tulajdonosáét, aztán a tulajdonló csoportét, aztán a többi felhasználóét. Amikor valaki megpróbál végrehajtani egy műveletet a fájlon, a jogosultságok ugyanezen minta alapján kerülnek ellenőrzésre. Először a rendszer azt vizsgálja, hogy az aktuális felhasználó a fájl tulajdonosa-e és ha ez igaz, akkor csak az első jogosultságokat alkalmazza. Ellenkező esetben ellenőrzi, hogy az aktuális felhasználó tagja-e a fájlt tulajdonló csoportnak. Ebben az esetben a jogosultságok második készletét alkalmazza. Bármely más esetben a rendszer a jogosultságok harmadik csoportját alkalmazza. Ez azt jelenti, hogy ha az aktuális felhasználó a fájl tulajdonosa, csak a tulajdonosra vonatkozó jogosultságok lesznek érvényben, még akkor is, ha a csoport vagy az egyéb jogosultságok sokkal megengedőbbek, mint a tulajdonos jogosultságai.
Fájljogosultságok Módosítása
A chmod
parancs segítségével módosíthatjuk egy fájl jogosultságait és legalább két paraméterre van szükségünk hozzá: az első leírja, hogy mely jogosultságokat akarjuk megváltoztatni, a második pedig rámutat a fájlra vagy a mappára, amin a változtatásokat végre kell hajtani. A változtatandó jogosultságok azonban kétféleképpen, vagyis kétféle “módon” írhatóak le.
Az elsőt szimbolikus módnak nevezzük, ez aprólékos részletességű és lehetővé teszi egyetlen jogosultság módosítását a készlet többi tagjának módosítása nélkül. A másik mód a numerikus mód, ez egyszerűbben megjegyezhető és gyorsabban használható, ha az összes jogosultságot egyszerre akarjuk módosítani.
Mindkét mód ugyanarra az eredményre vezet. Példa a parancsokra:
$ chmod ug+rw-x,o-rwx text.txt
és
$ chmod 660 text.txt
pontosan ugyanazt a kimenetet eredményezi, a fájl jogosultságai az alábbiak lesznek:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Nézzük, hogyan működnek ezek a módok!
Szimbolikus Mód
A szimbolikus módban megváltoztatandó engedélyek leírásakor az első karakter(ek) megjelöli(k) azt, hogy kinek a jogosultságát fogjuk megváltoztatni: a felhasználóét (u
), a csoportét (g
), vagy mindenki másét(o
) és/vagy mindháromét egyszerre (a
).
Utána meg kell mondanunk a parancsnak, hogy mit tegyen: adhatunk jogosultságot (+
), visszavonhatunk jogosultságot (-
), vagy beállíthatjuk egy adott értékre (=
).
Végül meg kell határoznunk, hogy melyik jogosultságra legyen hatással: 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 az alábbi jogosultságokkal:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Ha írási jogot szeretnénk adni a fájlt tulajdonló csoport tagjainak, a g+w
paramétert kell használnunk. Egyszerűbb, ha így gondolunk rá: “A csoportnak (g
), adunk (+
) írási jogokat (w
)”. Tehát a parancs az alábbi lesz:
$ chmod g+w text.txt
Ellenőrizzük az eredményeket az ls
paranccsal:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Ha el akarjuk távolítani a tulajdonos olvasási jogosultságát ugyanarról a fájlról, gondoljunk rá így: “A felhasználótól (u
) megvonjuk (-
), az olvasási jogokat(r
)”. Tehát a paraméter u-r
:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Mi történik, ha mindenkinek pontosan az rw-
jogosultságkészletet akarunk beállítani? Gondoljunk rá így: “Mindenkinek (a
), pontosan (=
), olvasási (r
), írási (w
), jogot adunk és nem adunk futtatásit (-
)”. 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 van lehetőségünk egyszerre több jogosultság módosítására is. 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éldát így olvashatjuk: “A felhasználónak (u
), adunk (+
) olvasási, írási és futtatási (rwx
) jogokat, a csoporttól (g
) elvesszük (-
), a futtatási jogokat (x
)”.
Ha egy mappán használjuk, a chmod
csak a mappa jogosultságait módosítja. A chmod
rekurzív módja akkor hasznos, ha a jogosultságokat “az almappákra és minden fájlra a mappában” meg akarjuk változtani. Ennek használatához a -R
paramétert kell megadnunk a parancs után és a jogosultságok elé, így:
$ chmod -R u+rwx Another_Directory/
Ez a parancs így olvasható: “Rekurzívan (-R
), a felhasználónak (u
), adunk (+
) olvasási, írási és futtatási (rwx
) jogokat”.
Warning
|
Legyünk nagyon óvatosak és kétszer gondoljuk meg a |
Numerikus Mód
A numerikus módban, a jogosultságokat más módszerrel határozzuk meg: hármas numerikus értékként oktális jelöléssel, 8-as számrendszerben.
Minden jogosultsághoz tartozik egy érték, az alábbi sorrendben meghatározva: először az olvasás (r
), ami 4
, aztán az írás (w
), ami 2
és végül a futtatás (x
), ami az 1
. Ha nincs jogosultság, a nullát (0
) használjuk. Az rwx
jogosultság tehát 7
(4+2+1
) és az r-x
pedig 5
(4+0+1
).
Az első számjegy a felhasználó (u
), a második a csoport (g
), a harmadik pedig mindenki más (o
) jogosultságait reprezentálja. Ha meg akarjuk változtatni egy fájl jogosultságait rw-rw----
-ra, 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
Ezen felül a numerikus 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 és a második a fájlt vagy mappát, amin végre akarjuk hajtani a módosításokat.
Tip
|
Ha egy jogosultság értéke páratlan, a fájl biztosan futtatható! |
Melyik szintaxist használjuk? A numerikus mód akkor előnyös, ha a jogosultságot egy meghatározott értékre akarjuk megváltoztatni, például 640
(rw- r-- ---
).
A szimbolikus mód sokkal hasznosabb, ha csak egy bizonyos értéket akarunk megváltoztatni, a fájl jogosultságai helyett. Például adhatunk a felhasználónak futtatási jogot csak a chmod u+x script.sh
használatával anélkül, hogy hozzá kellene érnünk a csoport és mindenki más jogosultságaihoz.
A Fájl Tulajdonosának Megváltoztatása
A chown
paranccsal változtathatjuk meg egy fájl vagy mappa tulajdonosát. A szintaxis meglehetősen egyszerű:
chown username:groupname filename
Ellenőrizzük például a text.txt
fájlt:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
A felhasználó, aki a fájl tulajdonosa, az carol
és a csoport is carol
. Most módosítsuk a fájlt tulajdonló csoportot egy másikra, mint például a students
:
$ 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ájlt tulajdonló felhasználónak nem kell a fájlt tulajdonló csoporthoz is tartoznia! A fenti példában carol
nem kell, hogy a students
csoport tagja legyen. Ahhoz azonban, hogy módosíthassa a tulajdonló csoportot, a csoport tagjává kell válnia.
A felhasználó vagy csoport kihagyható, ha nem akarjuk megváltoztatni. Változtassuk meg csak a fájlt tulajdonló csoportot a chown :students text.txt
segítségével. Csak a felhasználót a chown carol text.txt
paranccsal változtathatjuk meg. Alternatív megoldásként használhatjuk a chgrp students text.txt
parancsot csak a csoport megváltoztatásához.
Ha nem vagyunk rendszergazdák (root), nem változtathatjuk meg egy másik felhasználó vagy egy olyan csoport által birtokolt fájl tulajdonjogait, aminek nem vagyunk tagja. Ha ezt megpróbáljuk, a Művelet nem engedélyezett
hibaüzenetet kapjuk.
Csoportok Lekérdezése
Mielőtt megváltoztatjuk egy fájl tulajdonjogait, hasznos lehet tudni, hogy milyen csoportok vannak a rendszerben, mely felhasználók tagjai egy csoportnak és melyik csoporthoz tartoznak felhasználók. Ezt a feladatot két parancs segítségével hajthatjuk végre, ezek a groups
és a groupmems
.
Ahhoz, hogy megnézzük, milyen csoportok vannak a rendszerben, csak írjuk be a groups
parancsot:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
Ha tudni akarjuk, hogy melyik csoporthoz tartozik egy felhasználó, adjuk meg a felhasználónevet paraméterként:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Hogy visszafelé hajtsuk ezt végre, azaz megjelenítve, hogy mely felhasználók tartoznak egy csoporthoz, a groupmems
parancsot kell használnink. A -g
paraméterrel határozzuk meg a csoportot, a -l
pedig kilistázza az összes tagját:
$ sudo groupmems -g cdrom -l carol
Tip
|
A |
Speciális Jogosultságok
A felhasználó, csoport vagy mindenki más olvasási, írási és futtatási jogain kívül minden fájlnak van három speciális jogosultsága, amelyek megváltoztathatják egy mappa működését vagy egy program futását. Szimbolikus és numerikus módon is megadhatók és ezek az alábbiak:
Sticky Bit
A sticky bit, másnéven restricted deletion flag, oktális értéke 1
, szimbolikus módban pedig más engedélyeken belül egy t
jelöli . Csak mappákon használható és a Linux megakadályozza, hogy a felhasználók eltávolítsanak vagy átnevezzenek egy fájlt a mappában, hacsak nem a fájl vagy mappa tulajdonosairól van szó.
Az ls -l
kimeneténél a sticky bit-tel ellátott mappák esetén egy t
van az x
helyén mindenki más jogosultságainál:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
Numerikus módban a speciális jogosultságokat “4 számjegyű jelöléssel” adják meg, az első számjegy a cselekvésre vonatkozó külön engedélyt jelenti. Például, a sticky bit (1
) beállításához a Another_Directory
mappára numerikus módban, a 755
jogosultsággal, az alábbi parancs szükséges:
$ 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, SGID vagy Set Group ID bit, oktális értéke 2
és szimbolikus módban az s
reprezentálja a csoport jogosultságainál. Ezt futtatható fájlokon vagy mappákon használhatjuk. Futtatható fájlok esetén a fájl végrehajtásából eredő folyamat hozzáférést biztosít a fájlt birtokló csoport privilégiumaihoz. Mappák esetén minden alatta létrehozott fájl vagy mappa örökli a csoportot a szülő mappától.
Az ls -l
kimeneténél az SGID bittel ellátott fájlok vagy mappák esetén egy s
van az x
helyén a csoport jogosultságainál:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Ha egy fájlhoz szimbolikus módban SGID jogosultságokat szeretnénk adni, az alábbi parancsot kell használnunk:
$ 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éldával jobban megérthetjük az SGID hatásait egy mappán. Tételezzük fel, hogy van egy Sample_Directory
nevű mappánk, amit a carol
nevű felhasználó és a users
nevű csoport birtokol, a következő jogosultság-struktúrával:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Lépjünk be ebbe a mappába és a touch
paranccsal hozzunk létre egy üres fájlt benne. Az eredmény az alábbi lesz:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Láthatjuk, hogy a fájl tulajdonosa a carol
nevű felhasználó és a carol
nevű csoport. De ha a mappán be van állítva az SGID jogosultság, az eredmény más lesz. Először adjuk hozzá az SGID bitet a Sample_Directory
mappához és nézzük meg 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 csoportengedélyek között az s
jelzi, hogy az SGID bit be van állítva. Most lépjünk be a mappába és ismét hozzunk létre egy ü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
Láthatjuk, hogy a fájlt a users
nevű csoport birtokolja. Ez azért van, mert az SGID bit miatt a fájl örökli a szülőmappa csoporttulajdonosát, ami a users
.
Set UID
A SUID, vagy Set User ID oktális értéke 4
és szimbolikus módban az s
reprezentálja a felhasználó jogosultságainál. Csak fájloknál használható és a viselkedése hasonló az SGID bithez, de a processz a fájlt tulajdonló felhasználó jogaival fut majd. Az ls -l
kimeneténél a SUID bittel ellátott fájlok esetén egy s
van az x
helyén a felhasználó jogosultságainál:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Ha összeadjuk őket, kombinálhatjuk a speciális jogosultságokat egy paraméterben. Tehát az SGID (2
) és a SUID (4
) numerikus módban történő beállításához a test.sh
szkripthez a 755
jogosultságokkal, a következőt kell begépelnünk:
$ chmod 6755 test.sh
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 (és napjainkban a legtöbb támogatja), akkor az |
Gyakorló Feladatok
-
Hozzunk létre egy
emptydir
nevű mappát azmkdir emptydir
paranccsal! Most azls
használatával listázzuk azemptydir
mappa jogosultságait! -
Hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Most achmod
és a szimbolikus jelölés segítségével adjunk azemptyfile
fájl tulajdonosának futtatási jogot, és távolítsuk el mindenki más írási és futtatási jogát! Csak achmod
parancsot használjuk! -
Milyen jogosultságai lesznek a
text.txt
nevű fájlnak achmod 754 text.txt
parancs lefuttatása után? -
Tételezzük fel, hogy a
test.sh
fájl egy shell szkript az alábbi jogosultságokkal és tulajdonjogokkal:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Mik a fájl tulajdonosának a jogai?
-
Ha a
john
nevű felhasználó futtatja a szkriptet, akkor mely felhasználói jogosultságok alapján fog futni? -
A numerikus jelölést használva melyik a chmod helyes szintaxisa egy fájl speciális jogosultságainak “eltávolítá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
? Kinek van joga az írásához? -
Vegyük a következő 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 fájlokhoz és mappákhoz tartozó jogosultságokat a numerikus 4 számjegyű jelölést használva!
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Gondolkodtató Feladatok
-
Próbáljuk ki ezt a terminálban: hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Most “nullázzuk” a fájl jogosultságait achmod 000 emptyfile
paranccsal. Mi fog történni, ha megváltoztatjuk azemptyfile
jogosultságait egyetlen egy értékkel achmod
numerikus módjában, mint például achmod 4 emptyfile
? Mi történik, ha kettőt használunk, mint példáulchmod 44 emptyfile
? Mit tanulhatunk meg arról, ahogy achmod
a numerikus értékeket olvassa? -
Le tudunk futtatni egy fájlt, amihez van futtatási, de nincs olvasási jogunk (
--x
)? Miért vagy miért nem? -
Vegyük a Linux rendszer ideiglenes mappájának
/tmp
jogosultságait:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
A felhasználóknak, csoportoknak és mindenki másnak teljes jogai vannak. De törölheti-e egy átlagos felhasználó bármelyik fájlt a mappában? Miért van ez?
-
A
test.sh
nevű fájlnak az alábbi jogosultságai vannak:-rwsr-xr-x
, azaz a SUID bit be van állítva. Futtassuk az alábbi 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 hozhatunk létre egy
Box
nevű mappát, ahol az összes fájlt automatikusan ausers
nevű csoport birtokol és csak az a felhasználó törölheti, aki létrehozta őket?
Összefoglalás
Többfelhasználós rendszerként a Linux számára szükséges, hogy nyomon tudja követni, ki birtokolja és ki férhet hozzá egyes fájlokhoz. Ezt egy háromszintű jogosultsági rendszer kezeli és ebben a leckében megtanultuk, hogyan működik ez a rendszer.
Ebben a leckében megtanultuk, hogyan kaphatunk információkat a jogosultságokról az ls
segítségével, hogyan szabályozhatjuk vagy módosíthatjuk, ki hozhat létre, törölhet vagy módosíthat fájlt a chmod
segítségével, mind numerikus, mind szimbolikus jelöléssel és hogyan változtathatjuk meg a fájlok tulajdonjogait a chown
és a chgrp
parancsokkal.
A leckében az alábbi parancsokról beszéltünk:
ls
-
Fájlok listázása, opcionálisan olyan részletekkel, mint a jogosultságok.
chmod
-
Fájl vagy mappa jogosultságának megváltoztatása.
chown
-
Egy fájlt vagy mappát birtkoló felhasználó és/vagy csoport megváltoztatása.
chgrp
-
Egy fájlt vagy mappát birtokló csoport megváltoztatása.
Válaszok a Gyakorló Feladatokra
-
Hozzunk létre egy
emptydir
nevű mappát azmkdir emptydir
paranccsal! Most azls
használatával listázzuk azemptydir
mappa jogosultságait!A
-d
paraméter hozzáadása azls
parancshoz láthatóvá teszi egy mappa fájlattribútumait, a tartalmának kilistázása helyett. Ezért a válasz:ls -l -d emptydir
Bónusz, ha a két paramétert egyben adtuk meg, azaz
ls -ld emptydir
. -
Hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Most achmod
és a szimbolikus jelölés segítségével adjunk azemptyfile
fájl tulajdonosának futtatási jogot, és távolítsuk el mindenki más írási és futtatási jogát! Csak achmod
parancsot használjuk!Gondolkozzunk az alábbi módon:
-
“A felhasználónak, aki birtokolja a fájlt (
u
) adunk (+
) futtatási (x
) jogokat”, tehátu+x
. -
“A csoporttól (
g
) és más felhasználóktól (o
), elvesszük (-
) az írási (w
) és futtatási (x
) jogokat”, tehátgo-wx
.A jogosultságok két csoportját kombinálhatjuk, ha vesszőt rakunk közéjük. A végleges megoldás tehát:
chmod u+x,go-wx emptyfile
-
-
Milyen jogosultságai lesznek a
text.txt
nevű fájlnak achmod 754 text.txt
parancs futtatása után?Ne feledjük el, hogy numerikus jelölésben minden számjegy három jogosultság halmazát jelöli, mindegyiknek van egy megfelelő értéke: az olvasás értéke
4
, az írás értéke2
, végrehajtás értéke1
és ha nincs megadva engedély, ez az érték0
. Egy számjegy értékét úgy kapjuk meg, hogy minden engedélyhez hozzáadjuk a megfelelő értékeket. A7
az4+27+
lesz vagy pedigrwx
, az5
érték4+0+1
lesz, vagyisr-x
, és a4
, ami csak olvasást jelentr--
. Atext.txt
engedélyei a következők lennének:rwxr-xr--
-
Tételezzük fel, hogy a
test.sh
fájl egy shell szkript az alábbi jogosultságokkal és tulajdonjogokkal:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Mik a fájl tulajdonosának a jogai?
A tulajdonos jogai (a 2.-tól a 4. karakterig az
ls -l
kimenetében) azrwx
, tehát a válasz: “olvasni, írni és futtatni a fájlt”. -
Ha a
john
nevű felhasználó futtatja a szkriptet, melyik felhasználó jogosultságaival fog futni?Vegyük figyelembe a csoport jogosultságait. Ezek az
r-s
, ami azt jelenti, hogy be van állítva az SGID bit. A fájlt tulajdonló csoport aroot
, tehát a szkript, még ha egy átlagos felhasználó is indítja, a felhasználó jogaival fog futni. -
A numerikus jelölést használva melyik a chmod helyes szintaxisa egy fájl speciális jogosultságainak “eltávolításához” ?
“Eltávolíthatjuk” a speciális jogosultságokat egy negyedij számjegy, a
0
átadásával achmod
futtatásakor. Az aktuális jogosultságok a755
, tehát a parancs achmod 0755
kell, hogy legyen.
-
-
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
? Kinek van joga az írásához?Az
ls -l
kimenetének első karaktere a fájl típusa. Ab
egy blokkeszköz, általában egy az eszközhöz csatlakoztatott lemez (külső vagy belső). A tulajdonos (root
) és adisk
csoport tagjai írhatják. -
Vegyük a következő 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 fájlokhoz és mappákhoz tartozó jogosultságokat a numerikus 4 számjegyű jelölést használva!
A numerikus jelölést használva a jogosultságok a következők:
Another_Directory
-
Válasz:
1755
1
a sticky bit,755
az átlagos jogosultságok (rwx
a felhasználóknak,r-x
a csoportoknak és mindenki másnak). foo.bar
-
Válasz:
0044
Nincsenek speciális jogosultságok (tehát az első számjegy
0
), a felhasználóknak nincsenek jogosultságai (---
) és csak olvasási jog (r—r--
) a csoportoknak és mindenki másnak. HugeFile.zip
-
Válasz:
0664
Nincsenek speciális jogosultságok, tehát az első számjegy
0
.6
(rw-
) a felhasználóknak és csoportoknak,4
(r--
) mindenki másnak. Sample_Directory
-
Válasz:
2755
2
az SGID bit,7
(rwx
) a felhasználónak,5
(r-x
) a csoportoknak és mindenki másnak.
Válaszok a Gondolkodtató Feladatokra
-
Próbáljuk ki ezt a terminálban: hozzunk létre egy
emptyfile
nevű üres fájlt atouch emptyfile
paranccsal! Most “nullázzuk” a fájl jogosultságait achmod 000 emptyfile
paranccsal. Mi fog történni, ha megváltoztatjuk azemptyfile
jogosultságait egyetlenegy értékkel achmod
numerikus módjában, mint például achmod 4 emptyfile
? Mi történik, ha kettőt használunk, mint példáulchmod 44 emptyfile
? Mit tanulhatunk meg arról, ahogy achmod
a numerikus értékeket olvassa?Ne feledjük, hogy “kinulláztuk” az
emptyfile
jogosultságait. Tehát a kezdeti állapota az alábbi:---------- 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
Mindenki más jogosultságai megváltoztak. Mi történik, ha két számjeggyel próbálkozunk, mint a
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Most a csoport és mindenki más jogai érintettek. Ebből arra következtethetünk, hogy a
chmod
“visszafelé” olvassa be az értékeket, vagyis a legkevésbé jelentős számjegytől (mindenki más) a legjelentősebbig (felhasználó) felé haladva. Ha átadunk egy számjegyet, módosítjuk mindenki más engedélyeit. Két számjeggyel módosíthatjuk a csoport és mindenki más engedélyeit, hárommal a felhasználó, a csoport és mindenki más, néggyel pedig a felhasználó, a csoport, mindenki más engedélyeit valamint a speciális engedélyeket. . -
Le tudunk futtatni egy fájlt, amihez van futtatási, de nincs olvasási jogunk (
--x
)? Miért vagy miért nem?A válasz egyértelműnek tűnik: ha van futtatási jogunk, a fájlnak futnia kellene. Azonban olvasási jog nélkül a rendszer nem tudja megnyitni a fájlt és kiolvasni a tartalmát a futáshoz. Emiatt olvasási jog nélkül akkor sem tudunk futtatni egy fájlt, ha van futtatási jogunk.
-
Vegyük a Linux rendszer ideiglenes mappájának
/tmp
jogosultságait:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
A felhasználóknak, csoportoknak és mindenki másnak teljes jogai vannak. De törölheti-e egy átlagos felhasználó bármelyik fájlt a mappában? Miért van ez?
A
/tmp
mappát egy mindenki által írható mappának nevezzük, tehát bármelyik felhasználó írhat bele. Azonban azt nem akarjuk, hogy egy felhasználó módosíthassa a másik által létrehozott fájlokat, így a sticky bit be van állítva (amint azt at
jelzi mindenki más engedélyeinél). Ez azt jelenti, hogy egy felhasználó törölheti a fájlokat a/tmp
-ből, de csak akkor, ha ő hozta azokat létre. -
A
test.sh
nevű fájlnak az alábbi jogosultságai vannak:-rwsr-xr-x
, azaz a SUID bit be van állítva. Futtassuk az alábbi 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
?Elvettük a futtatási jogokat a fájl tulajdonosától. Az
s
(vagyt
) átveszi azx
helyét azls -l
kimenetén, tehát a rendszernek valahogy jeleznie kell, hogy van-e a felhasználónak futtatási joga. Ezt a speciális karakter típusának megváltoztatásával teszi.A kisbetűs
s
a jogosultságok első csoportjánál azt jelenti, hogy a fájl tulajdonosának futtatási joga van és be van állítva a SUID bit. A nagybetűsS
azt jelenti, hogy a fájl tulajdonosának nincs (-
) futtatási joga és be van állítva a SUID bit.Ugyanez elmondható az SGID-ről is. A kisbetűs
s
a jogosultságok második csoportjánál azt jelenti, hogy a fájlt tulajdonló csoportnak futtatási joga van a fájlon és az SGID bit be van állítva. A nagybetűsS
azt jelenti, hogy a fájlt tulajdonló csoportnak nincs (-
) futtatási joga és be van állítva az SGID bit.Ez igaz a joogosultságok harmadik csoportjánál levő
t
által jelölt sticky bitre is. A kisbetűst
azt jelenti, hogy mindenki másnak futtatási joga van és be van állítva a sticky bit. A nagybetűsT
azt jelenti, hogy másoknak nincs futtatási joga és be van állítva a sticky bit. -
Hogyan hoznánk létre egy
Box
nevű mappát, ahol az összes fájlt automatikusan ausers
nevű csoport birtokol és csak az a felhasználó törölheti, aki létrehozta őket?Ez egy többlépéses folyamat. Az első lépés a mappa létrehozása:
$ mkdir Box
Azt akarjuk, hogy minden, ebben a mappában létrehozott fájl automatikusan a
users
csoporthoz tartozzon. Ezt úgy tehetjük meg, hogy ezt a csoportot tesszük a mappa tulajdonosává és beállítjukaz SGID bitet. Arról is meg kell bizonyosodnunk, hogy a csoport bármelyik tagja írhatja a mappát.Mivel más felhasználók jogosultságai most nem számtanak és csak a speciáis biteket akarjuk “megfordítani”, logikusnak tűnik a szimbolikus mód használata:
$ chown :users Box/ $ chmod g+wxs Box/
Vegyük figyelembe, hogy ha az aktuális felhasználó nem tagja a
users
csoportnak, asudo
parancsot kell használnunk, hogy a fenti változtatásokat rootként hajtsuk végre.Az utolsó rész az, hogy biztos legyen, hogy a felhasználó, aki létrehozta a fájlt, törölni is tudja. Ezt a sticky bit (jelölése a
t
) beállításával érhetjük el a mappán. Ne feledjük, hogy ezt mindenki más (o
) jogosultságainál állíthatjuk be!$ 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 a SGID-et és a sticky bitet megadhatjuk egy
chmod
parancsban:$ chmod g+wxs,o+t Box/
Pluszpont, ha így csináltuk.