Fájlokra vonatkozó jogok megváltoztatása – chmod
Az előbb megismert két parancs kapcsolói érvényesek itt is. Rekurzív működést idézhetünk elő a “-r” kapcsolóval. Az “-f” megadásával pedig a hibaüzenetek elhallgatását kérhetjük.
A “Fájlok: jogosultságok” alfejezetben kiveséztük a jogokat, most pedig megtanuljuk, hogyan kell beállítani. Emlékezzünk, hogy a jogokat hármas csoportba tudjuk osztani:
- tulajdonosra vonatkozó jogok (read, write, execute)
- csoportra vonatkozó jogok (read, write, execute)
- összes többi felhasználóra vonatkozó jogok (read, write, execute)
Megtanultuk kiszámolni is a jogokat. Így könnyen belátható, hogy ha azt akarjuk beállítani, hogy a tulajdonos olvashassa, írhassa és futtathassa (rwx = 4+2+1 = 7), a csoport csak olvashassa és futtathassa (r-x = 4+1 = 5), a többi felhasználó pedig csak olvashassa (r = 4) a fájlt, akkor azt a következő paranccsal érhetjük el:
root@bash# chmod 754 /tmp/proba root@bash#
Foglalkoztunk a SUID (4), a SGID (2) és a Sticky (1) bitekkel is. Gyakorlásképpen állítsuk be a SGID és a Sticky bitet az előző példánál maradva:
root@bash# chmod 3754 /tmp/proba root@bash#
Azonban, aki nem a számolgatás híve, a jogokat megadhatja betűjelekkel is. Tudni kell, hogy a tulajdonosra az “u“, a csoportra a “g“, a többi felhasználóra az “o“, mindháromra pedig az “a” betűvel hivatkozhatunk. Jogot hozzáadni a “+” (plusz), elvenni a “–” (minusz) jellel lehet. Ha a “=” (egyenlőség) jelet használjuk, akkor a meglevő jogok törlődnek és csak a megadott jogok lesznek érvényesek a továbbiakban.
Ennyi bevezető után lássunk pár példát! Állítsuk be a jogokat úgy, hogy csak a tulajdonos legyen képes a fájlt írni, a csoport pedig futtatni:
root@bash# chmod u=w,g=x,o= /tmp/chmod_probafile root@bash#
Ezután, adjuk hozzá az olvasási jogot mind a három csoporthoz:
root@bash# chmod a+r /tmp/chmod_probafile root@bash#
Most vegyük el a futtatási jogot a csoporttól, miközben a tulajdonoshoz hozzáadjuk:
root@bash# chmod u+x,g-x /tmp/chmod_probafile root@bash#
A csak a tulajdonosra vonatkozó jogok megadását egyszerűsíthetjük annyival, hogy nem adjuk meg, kire vonatkozik a hozzáadott vagy elvett illetve egyenlővé tett jog, ekkor ugyanis alapértelmezettként a tulajdonosra fog vonatkozni. Adjunk a tulajdonosnak írási jogot:
root@bash# chmod +w /tmp/chmod_probafile root@bash#
Állítsuk be, hogy a tulajdonos csak olvasni és futtatni tudja a fájlt:
root@bash# chmod =rx /tmp/chmod_probafile root@bash#
Végül lássunk még egy könnyítést. Mind a három csoport összes jogának elvételére használhatjuk a következő megadást:
root@bash# chmod = /tmp/chmod_probafile root@bash#
A következő példában felhasználjuk azt a lehetőséget, hogy lemásolhatjuk egyik csoport jogait egy másik csoportéra. Állítsuk be, hogy a csoport ugyanolyan jogokkal rendelkezzen, mint a tulajdonos:
root@bash# chmod g=u /tmp/chmod_probafile root@bash#
A SUID, a SGID és a Sticky biteknél hasonlóan működik:
root@bash# chmod u+s,g+s,o+t /tmp/chmod_probafile root@bash#
Utolsóként pedig említsünk meg egy érdekességet, amit számokkal nem tudunk megtenni, illetve csak több lépéses módszerrel. Ez pedig nem más, mint a „X” (nagy x) jog. Ugyanúgy a futtatási jogot jelenti, azonban ha a “+” vagy “=” jellel akarunk futtatási (execute, x) jogot ráadni egy fájlra azzal a feltétellel, hogy csak akkor kerüljön rá a jog, ha már valamelyik csoport birtokolja a futtatási jogot. Induljunk ki a következő állapotból:
root@bash# chmod u=rw,g=,o= /tmp/chmod_probafile root@bash# ls –lak /tmp/chmod_probafile -rw------- 1 jonci jonci 0 nov 27 16:30 /tmp/chmod_probafile root@bash#
Végére egy kis érdekesség: próbáljunk futtatási jogot adni a tulajdonosnak a „X” (nagy x) jog megadásával, majd adjunk futtatási jogot a csoportnak „x” (kis x) jog megadásával, végül pedig próbáljuk meg újra a tulajdonosnak adni „X” (nagy x) jogot:
root@bash# chmod u+X /tmp/chmod_probafile root@bash# ls –lak /tmp/chmod_probafile -rw------- 1 jonci jonci 0 nov 27 16:30 /tmp/chmod_probafile root@bash# chmod g+x /tmp/chmod_probafile root@bash# ls –lak /tmp/chmod_probafile -rw---x--- 1 jonci jonci 0 nov 27 16:30 /tmp/chmod_probafile root@bash# chmod u+X /tmp/chmod_probafile root@bash# ls –lak /tmp/chmod_probafile -rwx--x--- 1 jonci jonci 0 nov 27 16:30 /tmp/chmod_probafile root@bash#