3. gyakorlat

Jogosultságokról bővebben

Emlékeztető: rwxrwxrwx, r=4, w=2, x=1

chmod parancs

"Jelölések"

  • u - user
  • g - group
  • o - other
  • a - all
  • + - jog hozzáadása
  • - - jog elvétele
  • = - direkt megadása a jogoknak

Lehetőségek

  • chmod u-w alma
    chmod g+wx alma
    chmod u+x,g-x alma
  • chmod g=rwx alma
    chmod a=r alma
    chmod u=rwx,g=rx alma
  • chmod 644 alma
    chmod 523 alma

Rekurzív jogmódosítás: '-R' opció

Három további attribútum:

  • sticky-bit
    • jele: 't'
    • Futattható file esetén, azt jelenti, hogy a program terminálása után a rendszer megpróbálja a programot a memóriában tartani. Régen volt jelentősége, ma már az op.rendszerek alapból végeznek optimalizálást (damand paging), illetve a fizikai memóra mérete is jóval nagyobb.
    • Könyvtár esetén azt jelenti, hogy hiába van 'w' jogom az egész könyvtárra, csak a saját tulajdonomban lévő fileokat törölhetem/módosíthatom.
  • set-UID, set-GID
    • Csak futtatható program esetén van értelme haszálni, de scriptre nem lehet!
    • A jelentésük az, hogy a futó program a file tulajdonos, illetve a csoport jogaival fog futni, függetlenül attól, hogy ki indította el. Fontos, hogy ez csak a program futásának idejére lépnek érvénybe ezek a "módosítások"
    • Jó példa: passwd program (manapság már nem így oldják meg)
touch f1
chmod u=rwxs,g=rx,o= f1 # set-UID (figyeljük meg az "o= " formát)
chmod 4750 f1 # ugyanaz, mint a fenti
-rwsr-x---  1 spala progterv 0 2006-02-10 18:53 f1
touch f2
chmod g=srwx f2 # set-GID
chmod 2xxx f2
-rw-rwsr--  1 spala progterv 0 2006-02-10 18:58 f2
rm f1; touch f1
chmod 6750 alma -> set-UID és set-GID
-rwsr-s---  1 spala progterv 0 2006-02-10 19:18 f1

umask

egy újonnan létrehozott filenak alapból milyen jogok legyenek beállítva

0022 : az első jegy a set-UID,set-GID, az utolsó 3 pedig a user/group/other jogok

Számolás: 777 - 022 = 755 ("Hivatalosan": igazi_mask = mask & 0777)

Az 'x' jog sosem kerül beállításra!

umask -S

Attribútumok

  • Az előzőleg ismertetett jogosultságokon túl léteznek még az adott filerendszerhez tartozó ún. attribútumok.
  • Ezek az "rwx-es jogok"-nál erősebbek, azaz ha egy file például megváltoztathatatlan (immutable), akkor hiába van rá w jogunk.
  • lsattr
  • lsattr alma
  • chattr [+-=]mode alma
    ahol mode lehet i (megváltoztathatatlan),a (csak hozzáfűzni lehet), A (no atime update), T (top of directory hiearchy)

Linkek

Link: Több névvel hivatkozunk ugyanarra

Softlink (szimbolikus link, symlink)

  • egy kis file, ami úgy viselkedik mint egy mutató (hivatkozás)
  • olyan, mint egy parancsikon
  • bármit csinálunk vele, a kernel automatikusan az eredeti fileon hajtja végre, kivéve pl a törlést
  • bármire létre lehet hozni
  • két filerendszer között is
  • directoryk között
  • az eredeti file jogai számítanak

Hardlink

  • az eredeti és a link megkülönböztethetetlen -> ugyanaz az inode-szám tartozik mindkettőhöz
  • könyvtárra nem lehet
  • filerendszerek között nem lehet

Illusztárció: Symlink és hardlink

ln parancs
ln [-s] letezo_file uj_file

I/O átirányítás

Néha szeretnénk azt megcsinálni, hogy egy program kimenetét egy file-ba vagy egy másik program bemenetére irányítsuk.

Bevezetés

cat ('-n' - minden sort számoz, '-b' - csak a nemüres sorokat)

more (csak lefele, '+num' - kezdő sor)

less (előre/hátra) parancsok

Standard file-leírók

  • stdin (0)
  • stdout (1)
  • stderr (2)
  • 3-tól 9-ig szabadon használhatók

Kimenet átirányítása

ls -l > lista
ls -l /etc >> lista
cat test1 test2 > test3

Vigyázzunk, a 'célállomány' tartalmát a shell törli még mielőtt végrehajtaná a parancsot!! pl. sort f1 > f1 NE!!!
A legtöbb shellben van védelmi mehanizmus, bash-ban: noclobber. A .bashrc állományba helyezzük el a következő sort: 'set -o noclobber'

Bemenet átirányítása

parancs < bemenet

mail spala@mail.inf.elte.hu < to_do.txt

Hibacsatorna átirányítása

parancs 2> error.log

rm -r d1 2> /dev/null

parancs <bemenet >>kimenet 2>hiba.log

Egyéb lehetőségek

ls >dirlist 2>&1
ls 2>&1 >dirlist
Fontos a sorrend!
Az első esetben először az stdout-ot állítja át a dirlist állományra, utána az stderr-t az stdout-ra, azaz a dirlist-re. A második esetben először átállítja az stderr-t a kimenetre (képernyő), aztán az stdout-ot átirányítja a dirlist állományra. Azaz a hibaüzenetek a képernyőn jelennek meg, a többi pedig a dirlist állományba kerül.

echo "Ez egy hibaüzenet!" 1>&2
echo "Ez egy hibaüzenet!" >&2
Ugyanaz a kettő!

Átvezetés

ls -l > tmpfile
more < tmpfile
[nézelődés]
rm tmpfile

Gyakorló feladatok

  • Hozz létre egy 'gyak' nevű könyvtárak a saját home könyvtáradban!
  • Másold át a /usr/share/pixmaps könyvtárból az összes 'xpm' "kiterjesztésű" filet!
  • Listázd ki a fileokat fordított sorrendben!
  • Változtasd meg a legnagyobb file jogait 640-ra
  • Lenne értelme beállítani a set-UID bitet erre az állományra?
  • Töröld le a 'gyak' könytárat és a tartalmát!
  • Hogy teheted meg ezt egyetlen utasítással?
  • Csinálj egy symlinket a saját könyvtáradban a /var/tmp könyvtárra! Ellenőrizd, hogy valóban működik-e!
  • Csinálj egy másik symlinket a saját könyvtáradban az előbb létrehozott linkre. Ellenőrizd, hogy működik-e!
  • Töröld le az először létrehozott linket és kérj egy file listát a könyvtáradról! Mi történt a második linkkel?
  • Irányítsd át a 'date' parancs kimenetét a 'datum' nevű fileba.
  • Fűzd hozzá a 'datum'-hoz, ennek a filenak az ls -l sorát.
  • Add ki az alábbi parancsokat és határozd meg milyen üzenetek kerülnek az stdout-ra és az stderr-ra?
    cat nonexistentfile
    file /sbin/ifconfig