Linux rendszergazdai jegyzet
Barhács Oktatóközpont 2002.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A Unix/Linux tulajdonságai Pár szó a Unix világról A Unix nem egy új operációs rendszer. Elég régóta (informatikai mértékkel mérve nagyon régóta) stabilan és egyre növekvő arányban jelen van a számítástechnikai világban. Hosszú ideig az egyetemi, kutatói szférában volt egyeduralkodó, és mostanában egyre újabb és újabb területeket (banki, vállalati, adatfeldolgozó szféra) hódít meg. Legfőbb ereje dinamikusságában, alkalmazkodóképességében rejlik: képes ugyanazt a környezetet nyújtani mind a multiprocesszoros mainframe, mind az otthoni 386-os PC-je előtt ülő felhasználónak. Manapság, amikor az otthoni számítógépek teljesítménye, illetve a velük szemben támasztott igények, a végzendő feladatok már egyre közelebb kerülnek az egykori „nagygépek” szintjéhez, egyre inkább szükség van egy olyan környezetre, amely képes hardvertől, platformtól függetlenül mindenhol ugyanazt nyújtani: a számítástechnikai világ „utolérte” a Unixot. A Unix típusú rendszerek 32 vagy 64 bitesek, többfeladatosak, többfelhasználósak (a kezdetektől!), időosztásosak, így a mai követelményeknek teljes mértékben megfelelnek. A Unix egyedülállóan széles architektúra-réteget „fed le”: amíg a Linux a PC kategóriájú gépeket célozza meg, az IBM nagygépein az OS/390 alatt mainframe kategóriájú számítógépen lehet Unix-ot használni. Jelenleg a valós terület azonban a középgépek kategóriájába esik: multiprocesszoros RISC alapú számítógépek 1 GByte körüli RAM-mal, és néhány 100 GB háttértárolóval. A PC kategóriájú gépek esetén több, meglehetősen felhasználóbarát operációs rendszer is „küzd” a piacért (Windows NT/2000/XP), a mainframe piacot pedig még a „klasszikus” OS uralja. A Unix használható nagyteljesítményű munkaállomások operációs rendszereként, de kiszolgáló feladatokat is elláthat - ehhez a rendszer paramétereit meglehetősen széles határok között kell (és lehet) konfigurálni.
A Unix rövid története A Unix meglehetősen régi dolog. Első változatát 1969-ben készítette Ken Thomson és Dennis Ritchie az AT&T Bell Laboratóriumában, egy PDP-7 típusú számítógépre. A rendszer magját 1973-ban átírták C nyelvre, ennek köszönheti a Unix mind a mai napig legnagyobb előnyét, a könnyű hordozhatóságot. Az AT&T kezdetben ingyen az amerikai egyetemek rendelkezésére bocsátotta a Unix forráskódját, így tíz éven belül százezer fölé emelkedett a működő Unix rendszerek száma (ne felejtsük, ez még a „hőskorszakban” volt - a 80-as évek elején százezer számítógép még hatalmas nagy szám volt). A gyors terjedésnek azonban jelentkeztek a hátulütői is: nem volt egységes ellenőrzése senkinek sem a forráskód, a rendszer egysége felett, így számos (helyi módosításokon alapuló) változat alakult ki, amelyek közül a két legjelentősebb a Berkeley egyetemen kifejlesztett BSD Unix, amely jelenleg a 4.6-os verziónál tart, illetve az AT&T „hivatalos” változata a System V (System Five, amely az 5. Változatnál -release- tart, rövidítve SVR5), amelyet a Unix System Laboratories fejleszt tovább (az USL-t egyébként a Novell vásárolta fel). Ezen fő változatok mellett számos kisebb-nagyobb alváltozat van forgalomban még napjainkban is.
2.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Amint a Unix egyre népszerűbbé kezdett válni a kereskedelmi szférában, egyre több cég ismerte fel egy egységes Unix szabvány fontosságát, és több egységesítő, szabványosító bizottság és csoportosulás kezdett dolgozni. Az USL köré tömörülő cégek az SVR4 mögé sorakoztak fel, a BSD irányból érkezők pedig az OSF (Open Systems Foundation) ajánlását, az OSF/1-et támogatják. Időközben független (nem az érdekelt cégek támogatásával létrejött) bizottságok is próbálták valamennyire egységesíteni a BSD és System V ajánlásokat, és az IEEE kidolgozta (az ANSI és az ISO támogatásával) a „POSIX” (Portable Operating System Interface (x)) ajánlást, amely igyekszik egyesíteni a két fő szabványt. 1993-ban a Novell átruházta a Unix védjeggyel kapcsolatos jogait az X/Open konzorciumra, amely lényegében a világ összes jelentősebb gyártó és felhasználó szervezetét tömöríti, így tulajdonképpen többé-kevésbé függetlennek mondható. Fontos megjegyezni a „UNIX” és a „Unix” terminológia közötti különbséget: a szakmában meghonosodott szokás szerint „UNIX”-szal jelölik az „igazi”, az USL licensszel rendelkező, USL forráskódból származó rendszereket, míg a „Unix” jelölés általában jelöl mindenféle „Unix típusú” rendszert, amelyek a „józan ész” alapján Unixnak mondhatók, függetlenül attól, hogy van-e valami közük az USL-hez vagy sem. Újabban lehetővé vált, hogy bármely gyártó - függetlenül attól, hogy USL forrásból származik-e a rendszere vagy sem - kérje az X/Open-t, hogy egy szoftverspecifikáció és teszt alapján (ezt nevezik SPEC 11.70-nek) minősítse termékét „igazi” Unix-nak, a UNIX védjegy viselésére jogosultnak, azonban ez a specifikáció annyira új még, hogy mindezidáig egy cég sem kért ilyen minősítést. A közeljövőben azonban, amint a cégek befejezik termékeik hozzáigazítását a specifikációhoz, tömegesen várható az egységes szabványnak megfelelő Unix rendszerek megjelenése. Természetesen, mivel a Unix nagyon könnyen hordozható, már elég korán megszülettek az Intel-PC alapú Unixok is, először csak oktatási célokra (pl. a már 286-oson működő XENIX), majd megjelentek a már komoly munkára is képes PC-s Unix verziók, melyeknek kereskedelmi ára 500 és 2000 $ között van. A Linux kialakulása A lehetőség Amikor a Unix még csak az egyetemi és akadémiai szférában volt közismert, kialakult körülötte egy hatalmas programkörnyezet: minden egyetem, kutatóintézet elkészítette saját megoldásait a felmerülő számítástechnikai problémáira (a szövegszerkesztéstől, táblázatkezeléstől kezdve a mindenféle apró segédprogramon keresztül a különböző fordítóprogramokig), és mivel ezek az intézmények non-profit szervezetek voltak, elkészült szoftvereiket publikussá tették. Forráskódban, C nyelven adták közre ezeket a programokat, az egyre inkább a terebélyesedő Hálózat segítségével, és a C nyelv és az egységes környezet miatt minden Unix felhasználó lefordíthatta, használhatta, módosíthatta és továbbfejleszthette őket szinte teljes szabadsággal.
3.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Ennek a folyamatnak az eredményeként alakult meg Richard Stallman kezdeményezésére az FSF (Free Software Foundation) alapítvány, melynek célja egy szabadon (forráskódban is) ingyen hozzáférhető szoftverkörnyezet biztosítása bárki számára, illetve ennek részeként a GNU project (GNU is Not Unix), amely pedig egy minél teljesebb Unix rendszert kíván létrehozni és biztosítani. Ennek jogi megfogalmazása a GPL (GNU General Public Licence). GPL alá eső szoftvert bárki készíthet, amennyiben megfelel bizonyos feltételeknek, és jogi (copyright) probléma esetén számíthat az FSF segítségére. GPL alá eső szoftvert bárki használhat, sőt módosíthatja is azt, amennyiben amikor a szoftvert továbbadja, továbbadja annak teljes forráskódját is, esetleges módosításai feltüntetésével. GPL szoftverért pénzt kérni nem szabad, viszont fel lehet számítani a másolással, terjesztéssel, installálással konfigurálással stb. kapcsolatos költségeket. A szoftver módosításáért sem szabad pénzt kérni - GPL forrás módosítva is GPL forrás marad. Linus Torvalds operációs rendszert ír Megvolt tehát a GNU környezet: fordítók, segédprogramok, és a szabadon terjeszthető XFree grafikus felület, egy olyan operációs rendszer mag hiányzott csak, amely bizonyítottan szabad (nem tartalmaz copyright alá eső USL vagy BSD kódot). Ennek megírását kezdte el helsinki egyetemista korában Linus Torvalds, hogy aztán több száz segítőjével együtt létrehozza azt, amit ma Linuxként ismerünk: egy teljes, szabad operációs rendszert bárki 386-os PC-jére. Bár Linus Torvalds egyedül kezdett hozzá operációs rendszere elkészítéséhez, ma már a Linux oly sokfelé ágazott és akkorára nőtt (ma már talán ez a legtöbb PC-s hardvert támogató szoftver, és átírása más architektúrákra - Sun, MIPS, DEC Alpha, 68000 stb. folyamatban van), hogy Linus maga már leginkább csak koordinálja a fejlesztéseket. A Linux jogi értelemben nem Unix tehát, leghelyesebb volna Unix-klónnak nevezni, és nem is követi szigorúan egyik szabványt sem: sok BSD-s és SYSV jellemvonást egyesít magában. Legközelebb a független POSIX-hoz áll, mind a mai napig a Linux tekinthető a legteljesebb POSIX implementációnak. Maga a Linux, illetve a Linuxon futó szoftverek legnagyobb része a GPL alá esik. Az Internet közössége felkarolja a fejlesztést Szót kell ejtenünk még egy fontos dologról, ami nélkül a Linux operációs rendszer nem születhetett volna meg: ez pedig az Internet világhálózat, amely összekötötte a fejlesztőket, és amelyen mindig bárki számára ingyen hozzáférhetők az egyes Linux változatok. A Unix és az Internet mindig is szorosan kötődött egymáshoz: az első IP (Internet Protocol) implementációkat BSD Unix rendszerekre készítették, a Unixot nyíltsága, jól bővíthetősége miatt választották a fejlesztők. Az Internetbe kötött gépek legnagyobb része Unix alatt fut, az Internet szolgáltatásait maximálisan csak Unix alatt tudjuk kihasználni. Manapság talán ez a Unix (Linux) rendszerek gyors terjedésének fő oka. A Linux az Interneten született: bár támogat más hálózati protokollokat is, igazán egyszerűen Internetes környezetbe illeszthető. Mi a továbbiakban, a könnyű beszerezhetősége és támogatottsága miatt a Linux operációs rendszeren keresztül mutatjuk be a Unix jellemzőit. 4.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A Unix típusú rendszerek belső felépítése A Unix magja, a kernel A továbbiakban figyelmünket a Unix magjára összpontosítjuk (első közelítésben a „klasszikus” System V kernelt vizsgáljuk, de a Linux kernel felépítése is ennek megfelelő). A kernel a hardver és a felhasználói programok „között” helyezkedik el, elfedve az architektúrák különbözőségét. Ez a modul teljesen elfedi a hardvert, és a konkrét rendszertől független „virtuális gépet” nyújt a rendszer további részei felé. A kernel feladata a rendszer erőforrások (valamilyen szempont szerint) optimális kihasználásának biztosítása. A kernel mérete, összetettsége igen széles határok között mozoghat (ma léteznek sok MByte méretű és néhány Kbyte méretű kernelek is). A kernel felépítése A kernelt három fő rétegre oszthatjuk. A hardver réteggel a hardver meghajtók rétege tart kapcsolatot, a felhasználói programokkal pedig (a különböző tárgykódkönyvtárakon keresztül) a rendszerhívási felület. A kernel középső rétege a legfontosabb számunkra, amely két, egymással egyenrangú részből áll: - A fájl alrendszerből, amelynek a fő feladata a logikai fájl (amit a rendszer kernel „fölötti” része lát) és a fizikai eszközök közötti kapcsolat megteremtése. Mivel a Unix filozófia szerint a különböző I/O eszközöket fájlokon keresztül látjuk, ez az alrendszer felelős a perifériák kezeléséért is. - A folyamat alrendszerből, amelynek feladata a rendszer folyamatainak működtetése (folyamatok indítása, ütemezése, virtuális memória kezelés megvalósítása). Felhasználói programok
Rendszerhívási felület Fájl alrendszer puffer cache Karakter Blokk Eszközmeghajtók
folyamat
ütemező
vezérlési
memóriakezelő
alrendszer
IPC
Hardver meghajtók
Hardver 5.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Héjszerkezetű felépítés A kernel, teljesen elfedi a gép hardver jellemzőit a felhasználó és a programozó elől. Az egyes szintek további szintekre bonthatók. A tárgykódkönyvtárak (RTL-Run Time Library) rendszere segíti a programok kommunikációját a rendszermaggal, és a többi folyamattal, hatékonyabbá teszi a memória kihasználást (a Windows rendszerben ugyanez a funkció a DLL-ken keresztül van megvalósítva). A kernelt megkerülve a hardvert nem lehet elérni, így a rendszer folyamatos ellenőrzése alatt tarthatja az erőforrás felhasználást.
A parancsértelmező vagy shell Egy Unix/Linux rendszermag szigorúan véve nem tartalmaz felhasználó-interakciót: a kernel csupán arra képes, hogy futtasson más programokat, illetve hozzáférést biztosítson a rendszer erőforrásaihoz - ezen szolgáltatásait azonban programozói szinten, ún. rendszerhívások (system calls, vagy röviden syscalls) formájában kínálja. Már a rendszer indításakor szükség van tehát egy (illetve több) programra, amely biztosítja a bejelentkezés lehetőségét, illetve bejelentkezéskor is minden felhasználó számára el kell indítani egy programot, amely lehetővé teszi a felhasználó számára, hogy a rendszerrel kommunikáljon, más programokat indítson el stb. Ez a program a parancsértelmező vagy shell (szokás - elég szerencsétlenül burokprogramnak is fordítani), amely nem tesz mást, minthogy olvassa a felhasználó billentyűzetéről érkező parancsokat, és ezeket a kernel számára emészthető rendszerhívásokká alakítja, a végeredményről pedig a képernyőn tájékoztatja a felhasználót. A Unix/Linux hosszú története során a sokféle fejlesztő és felhasználó ízlését tükrözvén, többféle shell program alakult ki, a legelső, az ősi „sh”, a Bourne által megírt shell, amely egyfajta közös nevezőt jelent, mivel minden Unix/Linux rendszer tartalmazza. További shellek: - Az sh továbbfejlesztett és C programozók ízlésvilágához igazított változata a „csh”, - a sokféle funkciót magában foglaló Korn shell, a „ksh”, - valamint a csh kényelmi és kiterjesztett funkciókkal jól megpakolt változata a „tcsh”, - és végül a Linux rendszereken általánosan használt „bash”, a Bourne Again Shell, amely az sh egyik, alaposan továbbfejlesztett változata. 6.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A shell lehetőségei nem merülnek ki csupán interaktív parancs-futtatásban: mindegyik shell-nek egy saját kis programnyelve van, amelyben interpretált kis programocskákat (ún. shell script-eket) írhatunk, melyek az MS-DOS parancsállományaihoz hasonlatosak, ám annál jóval több lehetőséggel bírnak. Futásidejű dinamikusan csatolt könyvtárak Többfeladatos működés esetén, amikor egyszerre több program tartózkodik a fizikai memóriában, hasznos a Unix/Linuxban használt „osztott könyvtár” (shared library) mechanizmus, vagy más néven a dinamikus (futásidejű) programösszefűzés (RTLrun time library: futásidejű tárgykódkönyvtár). Alapötlete az, hogy mivel mindegyik program C-ben íródott és ugyanabban a környezetben fordult le, ezért valószínűleg lesz néhány olyan függvény (például a képernyőkezelő könyvtári függvények), amelyeknek kódja minden programban ugyanaz, és felesleges minden programmal együtt a memóriába tölteni őket, elég csak egyszer. A programok tudják, hol keressék a memóriában ezeket a függvényeket. Így minden programba elég egy „csonk”-nak (stub) nevezett programrészlet beépítése, amelyik a dinamikus linker (futásidejű programszerkesztő) segítségével gondoskodik a megfelelő függvény megtalálásáról, illetve memóriába töltéséről, amennyiben az még nem lenne betöltve.
Csomagstruktúra és függőségek A Unix/Linux rendszerekben a felhasználói (és a rendszer adminisztrálásához szükséges egyéb) programokat ún. csomagokban (packages) terjesztik. Ez egy speciális telepítőkészlet típus, amely a megfelelő segédprogramok jelenléte esetén kibontja magát és elhelyezi az állományokat a megfelelő könyvtárakban. A csomagok között függőségek (dependencies) léphetnek fel, ha egy program olyan dinamikusan betöltendő könyvtárat, vagy segédprogramot kíván használni, ami egy másik csomag része. A csomagkezelő szoftverek érzékelik ezeket a függőségeket, jelzik a függőségi problémát és megjelölik a hiányzó komponenseket. A telepítés ilyen esetben sikertelen, bár a felhasználó minden rendszerben átkapcsolhat erőltetett (force) üzemmódba, de a függőségi problémát ez ritkán oldja fel.
Kernelek, disztribúciók, verziók Folyamatosan fejlődő szoftver Mivel a Linux rendkívül gyorsan fejlődik, (hetente, de néha két-háromnaponta is jelenik meg új verzió), szükséges talán már itt az elején kis rendet tenni a verziószámok dzsungelében. Legelőször is jegyezzük meg, hogy ha „stabil” verzióról beszélünk, akkor is csak saját felelősségünkre használhatjuk a Linuxot: mivel nem áll mögötte kereskedelmi cég, nincs aki a megbízható működésért garanciát vállaljon. Ha hajlandók vagyunk áldozni rá, vásárolhatunk technikai támogatást (ún. supportot) valamely erre szakosodott cégtől - bár Linuxra szakosodott cégek jelenleg leginkább csak az USA-ban működnek - az ingyenes Linuxhoz azonban nem jár garancia.
7.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A kernel verziószámáról Linux verziószám alatt az ún. „kernel”, az operációs rendszer mag verziószámát értjük, ez a tulajdonképpeni Linux, azonban mint minden operációs rendszer esetén, önmagában ez nem jó semmire: arra való, hogy más (felhasználói) programokat futtassunk vele (rajta). A kernel verzió- számozása a következő: X.Y.Z, ahol az X a fő verziószám, ez jelenleg 2 (és még sokáig az is marad), az Y, a középső szám az alverziószám, amely ha páros, akkor az egy „stabil” béta-verziót jelent, és ha páratlan, akkor pedig alfa-verziót, amely tényleg teljesen fejlesztői változat. A harmadik szám, a Z pedig az ún. patch-level: az apróbb változtatásokat sorszámozzák ezzel. E sorok írása idején a legutolsó stabil, béta állapotú verzió száma 2.4.18 volt, a fejlesztői verzióé pedig 2.5.36. A disztribúciókról Szokás még az ún. disztribúció verziószámáról is beszélni: a disztribúció egy Linux kernelen alapuló teljes (működőképes) Unix rendszer, segédprogramokkal, alkalmazásokkal együtt. Egy disztribúció elkészítése tulajdonképpen a C forrásban meglévő programok lefordításából, könyvtárstruktúrába helyezéséből és összekonfigurálásából (vagyis a csomagfüggőségek feloldásából) áll. Sokféle disztribúció létezik, ingyenesek is és kereskedelmiek is, a legtöbb azonban ingyenes és/vagy az Internetről letölthető. Elhangzott, hogy léteznek kereskedelmi (nem ingyenes) disztribúciók is - talán ez furcsa lehet egy szabad szoftver esetén, azonban mint azt már a GPL ismertetésekor láttuk, ezek a cégek nem a Linux-ért kérnek pénzt, hanem a disztribúció összeállításáért, illetve esetleg a disztribúcióban lévő, Linux alatt futó de nem ingyenes szoftverek használatáért. A legismertebb disztribúciók: - RedHat - SuSE - Debian - Caldera - SlackWare - Mandrake A fő disztribúciók mellett számos kisebb disztribúció is létezik, melyek legtöbbje valamelyik "nagy" disztribúció átalakított változata. Minden disztribúciónak saját csomagkezelő szoftvere van, mely a csomagfüggőségek vizsgálatát végzi. A csomagkezelők természetesen csak a saját, vagy támogatott csomagtípusok ellenőrzését képesek elvégezni. A csomagokban a programok binárisra fordított formában, tömörítve találhatóak meg. A fő csomagtípusok: - RPM (RedHat Package Manager): a RedHat alapú disztribúciók szabványos csomagtípusa. - DEB (Debian Package): a Debian alapú disztribúciók szabványos csomagtípusa. - TGZ (TAR -tape archive- GNU ZIP): tömörített csomag, SlackWare alapú disztribúciók használják.
8.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A fájlrendszer Felhasználói nézőpont A fájlokat a Unix/Linux-ban felhasználói szempontból nézve a nevükkel azonosítjuk. A Unix/Linux megengedi az ún. hosszú fájlnevek használatát (a józan ész és a kezelhetőség határai általában rövidebb fájlnevek használatára kényszerítenek minket, mint a rendszer korlátai). A fájlnévben betűk, számjegyek, pont és egyéb speciális jelek is szerepelhetnek (ezekkel azonban óvatosan kell bánni). A pont karakternek nincs speciális jelentése, a rendszer a DOS-ban is ismert kiterjesztés fogalmát nem ismeri (sok alkalmazói program azonban igényli a kiterjesztések használatát). A fájlok típusáról1 a nevükben semmilyen információt nem találunk! A fájlokat a Unix/Linux alatt hierarchikus fájlrendszerbe szervezzük, egy könyvtárba vegyesen lehetnek fájlok, és újabb alkönyvtárak. A könyvtárak neve semmiben nem különbözik a fájlokétól, a könyvtárak közötti határoló jel a / (nem a \ !). A Unix/Linux rendszerben az összes blokkos háttértárolót (beleértve a CD-ROM meghajtót, cserélhető lemezes egységeket, stb.) egyetlen fájlrendszeren keresztül érhetjük el. A rendszerben általában partícióról beszélünk - minden eszköz tartalmaz egy vagy több partíciót. Példa UNIX fájlrendszerre / etc/
usr/
bin/
echo
man/
ls
man.cf
passwd
src/
var/
default/ login
man.1/
adm/
opt/
messages
Az alap fájlrendszerhez (root) a további fájlrendszereket az ún. mount (csatlakoztatási) folyamattal kapcsolhatunk hozzá. A rendszer betöltése közben konfigurációs fájl alapján mountolja a működéshez szükséges fájlrendszereket. A mai Unix/Linux rendszerek képesek, pl. a behelyezett CD-ROM automatikus detektálására és mountolására, így gyakorlatilag a mount parancs kézi használatára nincs szükség (ezt a szolgáltatást supermountnak nevezik). Mivel a fájlrendszerek futás közbeni mountolgatása nem kis veszéllyel járó folyamat, kezdeményezésére a rendszer csak a rootnak adja meg a lehetőséget2.
1
A fájl típusán Unix alatt mást értünk, mint egyéb operációs rendszerek alatt! Kivételt képez a CD-ROM és a hajlékony lemez egység, amelyet grafikus felületen keresztül nem root is ki-be pakolhat a rendszerbe (persze, csak ha senki sem hivatkozik rá...)
2
9.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Fájl típusa A fájltípus kifejezésen nem az egyéb rendszereknél megszokott típust kell értenünk, a Unix/Linux az összes adatot vagy végrehajtható programot tároló fájlt közönséges fájl típusba sorolja. A Unix/Linux alatt a következő fájltípusokat ismerjük: Típusa Rendeltetése Közönséges fájl Adatok, programok tárolására használatos fájlok Könyvtár leíró Alkönyvtárban található fájlok és alkönyvtárak nevét tartalmazó fájl (minden könyvtárhoz tartozik egy ilyen fájl) Karakteres Karakteres perifériát érhetünk el rajta keresztül (soros port, eszköz szalagos egységek, stb.) Blokkos eszköz Blokkos perifériát érhetünk el rajta keresztül (lemezegységek partíciói, stb.) Szimbolikus link Olyan fájl, melyen keresztül egy másik fájlt érhetünk el a rendszerben (a fájl a célfájl elhelyezkedését, nevét tárolja) törlésekor csak a link szűnik meg (mint a Windows-os parancsikon) FIFO Speciális fájl, amely folyamatok egymással való kommunikációjára szolgál Fájlrendszer kitüntetett pontjai A Unix/Linux rendszerekben a könyvtárszerkezet kötött struktúrájú: Könyvtár Gyökérkönyvtár (root directory) Munkakönyvtár (working directory) Alapkönyvtár (home directory) /bin /boot /dev /etc /home /lib /mnt /proc /sbin /tmp /usr /var
Szerepe a rendszerben a fájlrendszer kezdőpontja, jele: / a könyvtár, amiben éppen tartózkodunk (ez természetesen mindenkinél más lehet) a rendszergazda rendeli hozzá a felhasználóhoz, ebbe a könyvtárba dolgozhat a felhasználó (általában erre a könyvtárra minden jogot megkap), belépéskor ez lesz a munkakönyvtára. Binaries, futtatható állományok könyvtára Rendszerindításhoz szükséges információk Devices, az eszközökre mutató állományok helye Konfigurációs állományok tárolására szolgáló könyvtár A felhasználók home könyvtárait tároló könyvtár Tárgykódkönyvtárak (libraries) tárolására szolgáló könyvtár Mountolásra szolgáló könyvtár Processzkönyvtár, a kernel táblázatait és leíróit lehet ezen a könyvtáron keresztül elérni System binaries, rendszerkonfigurációs parancsok könyvtára Temporary (átmeneti) állományok tárolására szolgáló könyvtár A rendszer számára nem létfontosságú elemeket tartalmazó könyvtár (pl. felhasználói programok) Variable, a máshova nem helyezhető állományok tárolására, pl. naplóállományok. 10.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Rendszer nézőpont Bár a Unix/Linux rendszerben a fájlrendszerek a felhasználók számára transzparensek, a rendszer valójában külön-külön kezeli az összes partíciót. Az operációs rendszer a partíciók első néhány blokkját adminisztrációs célokra lefoglalja. Ezeken a területeken találjuk meg (más adatok mellett) a fájlok elhelyezkedésére, hozzáférési jogaira, stb. vonatkozó információkat. Az információkat az ún. index-node táblázatban tároljuk, amelyben minden fájlhoz tartozik egy bejegyzés. A táblázat sorait azonban nem a fájlnevek azonosítják, hanem az adott bejegyzés sorszáma, az ún. i-node érték. A rendszert a fájl neve valójában „nem érdekli”. A fájl i-node értékének és nevének összerendelése a fájl tartózkodási helyének megfelelő könyvtárat leíró fájlban történik. Ezen fájl minden rekordja egy név/index-node érték összerendelést tartalmaz. Unix/Linux alatt lehetséges, hogy ugyanazt a fájlt több helyről, különböző nevekkel érjük el (ugyanaz az i-node érték több helyen is szerepel). Minden egyes hozzáférést egy link-nek nevezünk a fájlhoz (tehát a fájl létezésének feltétele, hogy legalább egy link-je létezzen). A fájlhoz csak egy partíción belül rendelhetünk hozzá linkeket (hiszen minden partíciónak saját i-node táblája van) - így a transzparens fájlrendszer ezen a ponton már nem is annyira transzparens... Későbbiekben bevezették a „soft link” (szimbolikus link) fogalmát, amely segítségével már partíciótól függetlenül hozhatunk létre linkeket - de ennek működési módja teljességgel különböző az „igazi” linkektől, mivel a „soft link” valójában egy állomány, mely az általa mutatott állomány elérési útvonalát tartalmazza. A rendszer a fájlokról a nevén túl több, számunkra fontos információt tárol: - Fájl típusa - Biztonsági, tulajdonviszonyi kérdések - a fájl tulajdonosának azonosítója - a csoport azonosítója, melyhez a fájl tartozik - hozzáférési jogok a fájlhoz - Időadatok - a fájl utolsó olvasásának időpontja - a fájl utolsó írásának időpontja - a fájl információk (jogok, stb.) utolsó változásának időpontja
11.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Biztonsági, tulajdonviszonyi kérdések A fájlokhoz a következő hozzáférési jogokat rendelhetjük: - r: Az adott felhasználó olvashatja a fájlt. - w: Az adott felhasználó megváltoztathatja a fájl tartalmát (írhatja, törölheti). - x: A felhasználó futtathatja a fájlt. Ennek a bájtnak a jelentése a fájlt típusától és tartalmától függ: - közönséges fájl esetén - ha a fájl az adott architektúrán értelmezett bináris programot tartalmaz, akkor a programot a rendszer betölti, és elindítja. - ha a fájl nem ilyen, akkor shell script-nek tekinti, és a shell-nek adja át értelmezésre. - könyvtárak esetén keresési jogot jelent. Könyvtáraknál az r jelentése az, hogy elérhetjük a fájl megnyitásához szükséges információkat, w jelentése, hogy módosíthatjuk a könyvtárfájlt (fájl törlése, új fájl). Az x pedig azt jelenti, hogy kilistázhatjuk a könyvtár tartalmát (tehát, ha könyvtár tartalmát ki tudunk listázni, még nem biztos, hogy meg is tudjuk nyitni a benne található fájlokat - és lehet, hogy egy fájlt meg tudunk nyitni, de nem tudjuk kilistázni a könyvtár tartalmát...). - s: x helyett állhat, és azt jelenti, hogy a futás idejére a programot futtató felhasználó átveszi a fájl tulajdonosának (setuid) vagy a csoportnak (setgid) a jogait (attól függ, melyik helyen áll az s). - sticky-bit, jelentése szintén a fájl típusától függ. - közönséges, végrehajtható fájl esetén a t azt jelzi, hogy a program lefutása után nem törlődik a (virtuális) memóriából - ez régen a program következő indítását gyorsította, de a mai rendszereknél már nincs jelentősége. - könyvtár esetén azt jelzi, hogy a könyvtárban szereplő fájlokat csak a fájl tulajdonosa (vagy a root) törölheti. Fájlok és felhasználók kapcsolata, hozzáférés a fájlokhoz A Unix/Linux rendszerben a fájl többet jelent egyszerű adattárolónál, fájlokon keresztül érhetjük el a rendszer perifériáit is (sőt, a folyamatok leírói is virtuális fájlokként jelentkeznek a rendszerben) - ezért a fájlok hozzáférésének szabályozása a teljes rendszer biztonságának központi kérdése3. A rendszer minden fájljához tartozik tulajdonos azonosító, csoport azonosító és egy elérési módot leíró struktúra. Ez a struktúra (első közelítésben) 3*3 mezőből áll: Felhasználó fájl tulajdonosa tulajdonos csoport tagja egyéb felhasználó Jogok olvasás írás futtatás olvasás írás futtatás olvasás írás futtatás
3
Az erőforrásoknak ez a túlzottan egyszerű kezelési módja - a sok előnyön túl - a biztonság kérdésében meglehetősen megnehezíti a rendszer kialakítását. 12.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A fájlhoz való hozzáférési kérelmünk elbírásakor a rendszer megállapítja, hogy a 3 csoport melyikébe tartozunk, majd megvizsgálja, hogy az adott művelethez van-e engedélyünk. A csoportba tartozáskor természetesen nem csak az elsődleges csoportot veszi figyelembe a rendszer (igazából pont a fájlokhoz való hozzáférés szabályozása miatt szükséges, hogy egy felhasználó több csoportba is tartozhasson). Az itt leírt hozzáférési módok természetesen csak adat és programfájloknál igazak teljesen, speciális fájlok esetében a dolog kicsit másképp fest (de a lényeg marad). Tovább bonyolítja a dolgot, hogy a fenti 9 lehetőségen túl létezik még néhány speciális beállítás is. Ezek a beállítási lehetőségek ugyan biztonsági szempontból nagyon fontosak, de létezésük az itt leírt elveket nem módosítja (például ilyen jelölés beállításán múlik a korábban már említett lehetőség is, hogy egy adott csoport tagjai a fájlt ne csak futtathassák, de a futás idejére a fájl tulajdonosával azonos jogokkal bíró felhasználóvá - praktikusan root-tá - válhassanak). Eszközök A Unix/Linux rendszerben az eszközöket (devices) is fájlokon keresztül érjük el, mely eszközillesztő állományok a /dev könyvtárban találhatóak. Megkülönböztethetünk blokkos és karakteres eszközöket (az elérés módjától függően, ami vagy szekvenciális, mint a terminál, vagy direkt, mint a lemez). Kitüntetett eszközök: - hd: IDE merevlemez: hda az elsődleges mester merevlemez, hdb a másodlagos mester stb. A partíciókat számmal jelöljük, pl. hda1. - fd: hajlékonylemezes meghajtó 0-tól kezdjük számozni, így a DOS A: meghajtója fd0. - sd: SCSI merevlemez. - tty: terminál. - modem, cdrom, mouse: általában linkek a tényleges eszközre, pl. ttyS0 (terminálhoz kapcsolódó első soros port - Windows-ban com1).
Felhasználók Ahhoz, hogy valaki dolgozhasson a Unix/Linux rendszerben át kell esnie a bejelentkezési folyamaton. A rendszerben minden felhasználónak egyedi login-neve és hozzá tartozóan egy felhasználói azonosítója van (userid - ez egy egész szám, a rendszer ezt használja a belső azonosításra). A felhasználóknak általában jelszavuk is van (ez elméletileg nem kötelező, de erősen tanácsos). Bejelentkezéskor a felhasználónak meg kell adni a login-nevét, és ha a rendszer kéri tőle, akkor a jelszavát. A rendszer minden tevékenységünket a minket azonosító userid-del azonosítja. Fontos információ számunkra a felhasználó terminálja, amelyen keresztül bejelentkezett a rendszerbe. Mivel semmi nem tiltja meg, hogy egy felhasználó egyszerre több terminálról is bejelentkezzen, a terminál neve (egyedi azonosító a rendszerben) segít azonosítani a felhasználó által egy terminálról indított programokat (session).
13.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A rendszerben a felhasználók azonosítására két állomány szolgálhat. Az eredeti megoldás az /etc/passwd állomány használata, mely akkortól datálható, mikor még nem álltak rendelkezésre segédprogramok a felhasználók monitorozására. A passwd állományt mindenki olvashatja, de csak root jogosultsággal írható, a bejegyzések pedig tartalmazzák a felhasználó jelszavát MD5-ös standard kódolással. A másik (biztonságosabb) megoldás az /etc/shadow fájl használata, ilyenkor a passwd állomány a felhasználóknak csak a publikus adatait tartalmazza, a jelszavakat pedig a shadow állomány tartalmazza nyilvános kulcsú titkosítással. A shadow állományhoz való hozzáférés root jogosultságokat kíván meg minden esetben. Felhasználói szintek A Unix/Linux rendszerben a felhasználók kategorizálása (más rendszerekhez képest) meglehetősen szegényes: - „átlag” felhasználó - rendszergazda (root) A felhasználókat ezen felül még csoportokba sorolhatjuk, így az „átlag” felhasználók között is tehetünk különbségeket. Az „átlag” felhasználók csak a root által meghatározott erőforrásokhoz férhetnek hozzá, ezzel szemben a root-nak korlátlan hatalma van a rendszerben. A két kategória közötti éles határt elmossa a lehetőség, hogy felhasználók bizonyos programok végrehajtásának idejére root-tá válhatnak. Felhasználók csoportosítása A rendszerben definiálhatunk különböző csoportokat - ezen csoportoknak csak adminisztrációs szempontból van jelentősségük. A rendszer különböző erőforrásainak (magyarul: fájloknak) mindig van egy tulajdonosa, aki birtokolja a fájlt, és egy csoport, amihez a fájl tartozik. A fájlokhoz való hozzáférést a már látott tulajdonos/csoporttagok/egyéb felhasználók szintjén szabályozhatjuk. Egy csoportba nulla vagy több felhasználót sorolhatunk (a csoport akkor is létezik, ha egyetlen tagja sincsen), egy felhasználó egy vagy több csoportba tartozhat - amelyek közül mindig van egy ún. elsődleges csoport (ez a csoport lesz az általunk létrehozott fájlok csoportazonosítója).
A futási szintek (runlevels) A futási szintek a SYSTEM V koncepcióban jelentek meg először. Hasonlít ez a Windows-ból ismert hardverprofil beállítási lehetőséghez, de annál jóval több lehetőséget nyújt. Az alapkoncepció az, hogy mindig a feladatnak megfelelő mennyiségű háttérfolyamat induljon el, vagyis a felhasználó ki tudja választani azt a futási szintet, ami az ő pillanatnyi munkájához a legideálisabb. A legjellemzőbb futási szintek: - egyfelhasználós indítás - többfelhasználós indítás, hálózat nélkül - többfelhasználós indítás, hálózattal - grafikus indítás, hálózat nélkül - grafikus indítás hálózattal
14.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
Ehhez kapcsolódóan van még két speciális futási szint: a halt (összes folyamat lekapcsolása) és a reboot (folyamatok lekapcsolása és a gép újraindítása). Amikor a rendszer egyik futási szintről a másikra lép, beolvassa, hogy az adott szinten milyen programoknak kell a háttérben futni, és a szükségteleneket leállítja, a szükségeseket pedig elindítja. A fő állomány az /etc/inittab, mely a futási szintek definícióit tartalmazza. A ténylegesen elindítandó programok listáját egy az /etc könyvtárban a futási szint nevével megegyező alkönyvtár (pl. rc0 stb.) tartalmazza linkek formájában.
Grafikus felület: az X Window Ma a számítógép felhasználók többsége színes, grafikus, ablakorientált képernyő és egér nélkül el sem tudná képzelni a számítógép használatát. Mivel a Unix/Linux a kiszolgáló piacon túl (ahol a grafikus felület nem kifejezetten szükséges), a munkaállomás piacon is jelen van, a grafikus felhasználói felület mára kötelezővé vált. Bár nem az operációs rendszer szerves része, de mára minden Unix/Linux rendszer tartalmaz valamilyen (egymással többé-kevésbé kompatibilis) grafikus modult. Ezek a X Window Systems nevű ablakozó rendszer leszármazottai, és jelenleg éppen az egyetlen közös rendszer használatának a napja kezd felkelni (CDE - Common Desktop Environment, Egységes Munkakörnyezet). Ez a grafikus felület első ránézésre sokkal „fapadosabb” a Windows-család tagjainál, de ha egy kicsit jobban megismerjük kiderül, hogy a rendszer képességeit valójában nem nagyon lehet összehasonlítani a Windows-zal. Mi az az X Window? A Unix rendszerek híresek voltak „barátságtalanságukról”, melyet annak köszönhetnek, hogy jó ideig a fejlesztők nem érezték szükségét, hogy a felhasználók dolgát megkönnyítsék, igaz nem is átlagos felhasználóknak készült elsősorban. A változást az X Window rendszer megjelenése hozta, melynek kialakulása óta, már a Unix felhasználóknak sem kell nélkülözniük a könnyen használható, grafikus kezelői felületet. Az X Window System első széles körben használt verzióját, az X10R4-et 1986-ban a MIT-en fejlesztették ki. Az elképzelés az volt, hogy egy hálózat számára átlátszó, hálózatorientált, hierarchikus, szabványos, nyitott, eszközfüggetlen, színes grafikát támogató rendszert tervezzenek. Az X10R4 után már szinte évenként jöttek ki az új változatok, az első az X11R1 volt, ami nem volt kompatíbilis az X10-zel. Az X11R2 majd az R3 elsősorban javításokat tartalmazott az előzőekhez képest. Az X Window X11R6 kvázi szabvánnyá vált, jelenleg minden Unix ezt használja (a Linux egy ingyenes X rendszert az Xfree86-ot használ, mely kompatíbilis az X11R6-tal). Az X Window működése Az X-rendszer képernyőt kezelő része, amellyel a felhasználó közvetlenül kommunikál, a szerver; a képernyőn lévő ablakok, a képernyőhöz kapcsolódó programok pedig a kliensek. Mivel a rendszer a hálózat számára átlátszó, ezért nem feltétlenül kell egy programnak azon a gépen futnia, amelyiken az ablaka megjelenik, a kettő közötti kommunikáció a hálózaton is megvalósulhat, az ún. X-protokoll felhasználásával. 15.
Barhács OktatóKözpont
Linux rendszergazdai modul - 1. fejezet
A szabvány nem tartalmaz ablakkezelő stratégiát, tehát nem írja elő, hogy milyen ikonok legyenek az ablakkereteken, milyen egérgombnyomásra mi történjen stb. Ezek ellátása egy speciális kliens, a window-manager (ablakkezelő) feladata. Egy átlagos kliens kap egy ablakot a képernyőn, azon új ablakokat hozhat létre, önmagán belül bármit megjeleníthet, de az önmagán kívüli területeket nem változtathatja meg. A képernyő többi (klienseken kívüli) területének kezeléséért felelős a windowmanager, amely logikusan az egész képernyőt birtokolhatja. Az X Window kezel ún. virtuális desktopokat, ami azt jelenti, hogy az X Window teljes felülete, a display, megengedetten nagyobb lehet, mint a screen (a képernyő felülete), ill. hogy a display megjelenhet több képernyőn is. Window-managerből sok fajtát ismerünk, a Unixban szabvány a CDE, a Linuxban leggyakrabban a KDE felületet használjuk. Az X Window konfigurálása és indítása A Unixokban az X-es dolgokat a /usr/X11R6 könyvtárban találjuk meg, más kérdés, hogy a linkelések során ez még honnan érhető el. A futtatható állományokat ezen a könyvtáron belül, itt is a /bin könyvtárban találjuk, a konfigurációs állományokat pedig a /lib/X11 alkönyvtárban. A konfigurációs állományok legtöbbje scriptállomány, melynek szerkesztéséhez az adott shell (Linuxban a bash, AIX-ben a ksh, Irisben a csh stb.) programozását legalább alapfokon érteni kell. Az X Window kezdeti konfigurálását egy Xsetup (Linuxnál XF86Setup) programmal végezhetjük. Sajnos a Linuxnál ez a program csak arra szolgál, hogy a videókártyát és a monitort illesszük az X-szerverhez, minigépes rendszereknél egyéb beállítási lehetőségeink is vannak. Fontos tudni, hogy a (főleg a régebbi) Xsetupok nem rendelkeznek hardverdetektálással a paramétereket nekünk kell kézzel megadni. Az újabb kiadású Unixok (és itt elsősorban természetesen a Linuxról van szó), már rendelkeznek ilyennel, ezáltal a telepítés is könnyebbé válik. Az X Window-t két féle módon tudjuk indítani az egyik a Xinit-es a másik Xdm-es. A Xinit-es indítást akkor érdemes használni, ha általában karakteres felületen dolgozunk és csak néha lépün be az X Window-ba. Ilyen esetben az indítás egy openwin (Linuxnál startx) nevű script segítségével történik. Az Xdm-es indításnál már a bejelentkezés is grafikus üzemmódban történik. Ennek az indításnak a hátránya, hogy az X Windowból nem tudjuk kilépni, mivel ha a rendszer, ha lezárjuk a grafikus sessiont, azt azonnal újraindítja.
16.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A Unix/Linux használata A terminál koncepció A Unix/Linux, eltérően a PC-n eddig megszokott operációs rendszerektől, nem csak többfeladatos, ahol egy felhasználó egyidejűleg több programot futtathat (mint például a MS-Windows és az OS/2), hanem többfelhasználós is, vagyis egyidejűleg több felhasználó használhatja ugyanazt a rendszert, és mindegyikük akár több programot is futtathat. Ennek megvalósításához azonban szükség van néhány új fogalom, koncepció bevezetésére. Rögtön első problémaként jelentkezik az, hogy egy PC-nek csak egy billentyűzete, és (kevés kivételtől eltekintve) csak egy monitora van, amit értelemszerűen egyszerre csak egyvalaki használhat. A Unix/Linux filozófia minden egyes bejelentkezett felhasználóhoz hozzárendel egy úgynevezett terminált: egy terminál pedig egy billentyűzet + megjelenítő egység (leggyakrabban szöveges display) együttesét jelenti. Az adott Unixos géphez legközvetlenebbül csatolt terminált (Linux esetén a gép saját billentyűzetét és monitorát) konzol terminálnak (console terminal) nevezzük, ez abból a szempontból kitüntetett, hogy bizonyos rendszeradminisztrációs feladatok csak innét hajthatók végre. További terminálok csatolhatók még a géphez soros vonalon. Ez a legősibb Unixos megoldás, egy terminálemulációs szoftver és egy soros kábel segítségével akár kidobandó XT-inket is egyszerűen soros terminállá alakíthatjuk, illetve direkt erre a célra készült terminálokhoz manapság már fillérekért hozzájuthatunk. De köthetünk soros vonalra modemet is: ekkor a felhasználói terminál a telefonvonal „túlsó végén” lesz, távolról is elérhetővé téve rendszerünket. A hálózaton vagy grafikus felületen keresztül bejelentkezett felhasználókhoz ún. pszeudo-terminálokat rendel a rendszer, ahol is a billentyűzet és a képernyő annak a gépnek a billentyűzetéhez és képernyőjéhez rendelődik, amely előtt a felhasználó ül. A terminálok megnevezése a szakzsargonban tty (angolul betűzve ejtik), illetve a pszeudo-termináloké pty vagy ttyp, a Linux ez utóbbi megnevezést használja. Minden Unix/Linux rendszer többféle, képességeik alapján osztályozható terminált képes kezelni: mivel nem alakult ki egységes szabvány, és a nagygépek hőskorában sokféle gyártó sokféle terminált gyártott, ezért a Unix rendszereket általában felkészítik a sornyomtató típusú, sorüzemmódú, kurzor-címzésre nem képes termináloktól kezdve a modernebb, színkezelésre és akár ANSI grafikára képes terminálokig bezárólag, sokféle termináltípus kezelésére. Az egyes terminálokat gyártó és típusra utaló megnevezéssel azonosítják. Amennyiben csak konzolról használjuk gépünket, elég annyit tudni hogy a konzol terminál azonosítója „console”. Azon a problémán, hogy egy géphez csak egy monitor és egy billentyűzet tartozik, úgy próbál a Linux segíteni, hogy több ún. virtuális konzolt használhatunk, amelyek mindegyike úgy viselkedik, mintha a rendszer konzol terminálja lenne. A virtuális konzolok számát a rendszergazda konfigurálhatja, közöttük a bal Alt + funkcióbillentyűkkel illetve a bal Alt + jobbra/balra nyíl billentyűkkel válthatunk.
17.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Bejelentkezés Most már (elméletben) elég jól ismerjük a rendszer felépítését: kezdjük el használni is. Pl. egy Linux gép terminálja elé ülve valami hasonlót láthatunk: Welcome to Linux 2.4.18. barhacslinux login:
Ez a gépen futó kernel verziója, illetve a gép neve (a Unix/Linux-os gépeknek nevük van!), valamint a login: prompt jelzi azt, hogy a terminál kész a bejelentkezés fogadására (ezek a bejelentkezés előtti üzenetek természetesen konfigurálhatók). Gépeljük be, tehát a user-nevünket és a jelszavunkat, és pár sor újabb üzenet után (pl. hogy mikor jelentkeztünk be ezelőtt utoljára), megkapjuk a parancsértelmező prompt-ját, jelen esetben: [tanulo@barhacslinux tanulo]$
Jelentése: legelőször áll a felhasználó neve, utána @ jellel elválasztva a gép neve. Majd a felhasználó aktuális (munka) könyvtárának neve következik, ez most a saját ún. "home" könyvtár, a prompt végét pedig egy $ karakter jelzi. Ha root privilégiumokkal jelentkeztünk volna be, a prompt végén egy # karaktert látnánk - a rendszer ezzel is figyelmeztet különleges hatalmunkra. A home könyvtárról: a rendszeren minden felhasználónak van egy otthona, ahova bejelentkezéskor a rendszer az aktuális könyvtárat (current working directory) állítja: ez a könyvtár a felhasználó tulajdonában van, itt tartja file-jait, ide dolgozik, és ha akarja, el is rejtheti a könyvtár tartalmát a többi felhasználó kíváncsi szeme elől. Ez Linuxokon általában a /home/felhasznalo_nev vagy ritkábban a /usr/users/felhasznalo_nev nevű könyvtár. Rövidítve a ~ jellel hivatkozhatunk rá.
Parancsok futtatása Programot indítani nevének begépelésével lehet. Ekkor ha csak a file-nevet adtuk meg, akkor a rendszer végignézi a PATH változóban (keresési útvonal) szereplő könyvtárakat, és ha valamelyikben megtalálja a file-t és az futtatható, akkor elindítja. Vigyázat! Az aktuális könyvtárban csak akkor nézi meg, ha a PATH-ban meg van adva az is, mint könyvtár (./). Ha a file-nevet útvonallal együtt adtuk meg, akkor csak az adott helyen lévő file-t próbálja meg végrehajtani (pl. /bin/ls, vagy hivatkozás az aktuális könyvtárban lévő file-ra: ./ls ).
18.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Alapparancsok login-logout Be ill. kijelentkezésre használható parancspáros. A parancs formája: login v. logout A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: nem minden rendszer engedélyezi, hogy egy megkezdett login sessionből újat kezdjünk. Ha a rendszer konfigurációja ezt tiltja a login parancs kiadása hibaüzenetet eredményez. Példa: (kilépés)
[tanulo@barhacslinux tanulo]$ logout logout Welcome to Linux 2.4.18. barhacslinux login:
(visszakerültünk
a login prompthoz)
who Kiírja a rendszerbe bejelentkezett felhasználókat. A parancs formája: who A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: a Unix elosztott rendszer (terminál) koncepció kiszolgálására hivatott parancs. Az alapvető feltételezés az, hogy egy adott Unix/Linux rendszerre egy időben nem egy, hanem több felhasználó van bejelentkezve. Példa: [tanulo@barhacslinux tanulo]$ who tanulo tty1 2000.01.01 10.00.00 [tanulo@barhacslinux tanulo]$ _
(felhasználó lekérdezés) (név, konzol, belépési idő)
whoami Kiírja a bejelentkezett felhasználó nevét. A parancs formája: whoami A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: a felhasználó név kiírása a felhasználó azonosító alapján történik. Példa: [tanulo@barhacslinux tanulo]$ whoami tanulo [tanulo@barhacslinux tanulo]$ _
19.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
clear Törli a képernyőt. A parancs formája: clear A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: megegyezik a MS-DOS-ban megismert cls paranccsal. Példa: [tanulo@barhacslinux tanulo]$ clear
reset Inicializálja (alaphelyzetbe állítja) a terminált. A parancs formája: reset A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: A futó programok által esetlegesen átállított billentyűdefiníciókat is visszaállítja a rendszer indulásakor meghatározottra. Példa: [tanulo@barhacslinux tanulo]$ reset Erase is delete. Kill is control-U (^U). Interrupt is control-C (^C). [tanulo@barhacslinux tanulo]$
pwd Kiírja az aktuális (munka-) könyvtárat. A parancs formája: pwd A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: nincs. Példa: [tanulo@barhacslinux tanulo]$ pwd /home/tanulo [tanulo@barhacslinux tanulo]$
man Formázza és kiírja az on-line kézikönyvlapokat. A parancs formája: man [-C config_file] [-M path] [-P pager] [-S fejezet_lista] [fejezet] név ... A parancs paraméterei: - név: a megjelenítendő parancs neve.
20.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A parancs kapcsolói: - C config_._file: Meghatározza a használandó konfigurációs fájl nevét. - M path: Meghatározza azon könyvtárak listáját, amelyekben a lapok keresését végzi. Ilyen opció hiánya esetén a MANPATH környezeti változó tartalmát használja ugyanerre a célra. - P pager: Megadja, melyik lapozó (pager) programot használja. Ez az opció felülbírálja a MAPAGER környezeti változót. Az alapértelmezés a less. - S fejezet.lista: A kézikönyv vizsgálandó fejezeteinek kettősponttal elválasztott listája. Megjegyzés: Ha a parancssorban egy fejezetet is megadunk, a man csak azt a fejezetet vizsgálja. Parancssorból vagy környezeti változókkal megadható a fejezetekben való keresés sorrendje és hogy milyen előfeldolgozót kell futtatni a forrásfájlokra. Példa: [tanulo@barhacslinux tanulo]$ man pwd pwd(1)
pwd(1)
NÉV pwd - kiírja az aktuális (munka-) könyvtárat ÁTTEKINTÉS pwd pwd [--help] [--version] ÁTTEKINTÉS A pwd parancs kiírja az aktuális könyvtár teljes nevét elérési úttal. A kiírt név minden eleme valódi könyvtárnév lesz -- nem lesznek benne szimbolikus linkek. A legtöbb Unix shell tartalmaz egy ugyanilyen nevű beépített parancsot, ezért az elérési út nélkül kiadott pwd parancs ezt a beépített változatot fogja használni, amelynek a működése eltérhet az ezen a kézikönyvoldalon leírttól. OPCIÓK..... [tanulo@barhacslinux tanulo]$
date Kiírja vagy beállítja a rendszerdátumot és –időt. A parancs formája: date [-u] [MMDDhhmm[[CC]YY][.ss]] A parancs paraméterei: - MM: hónap, két számjeggyel. - DD: nap, két számjeggyel. - hh: óra, két számjeggyel. - mm: perc, két számjeggyel - CC: évszázad, két számjeggyel - YY: év, két számjeggyel. - ss: másodperc, két számjeggyel.
21.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A parancs kapcsolói: -u univerzális idő: Koordinált Világidő (más néven Greenwichi Középidő) szerinti időt és dátumot írja ki vagy állítja be a lokális (wall clock) helyett. Megjegyzés: A Unix típusú rendszerekben a dátumot/időt nem szokták a rendszer használata közben módosítani, mivel akadnak programok, melyek érzékenyek az idő folyásának irányára. Dátum és idő módosítására általában vagy rendszerinduláskor (időszinkronizáció), vagy leállításkor van mód. Példa: [tanulo@barhacslinux tanulo]$ date CS MÁJ 23 13:57:49 EDT 2002 [tanulo@barhacslinux tanulo]$
uptime Kiírja mennyi ideje fut a rendszer. A parancs formája: uptime A parancs paraméterei: nincsenek. A parancs kapcsolói: nincsenek. Megjegyzés: nincs. Példa: [tanulo@barhacslinux tanulo]$ uptime 1:58pm up 1:59, 2 users, load average: 0.00, 0.00, 0.00 [tanulo@barhacslinux tanulo]$
which Megmutatja a parancsok teljes elérési útját. A parancs formája: which programnév A parancs paraméterei: -programnév: a parancs, amelynek elérési útjára kíváncsiak vagyunk. A parancs kapcsolói: nincsenek. Megjegyzés: Csak a standard Unix futtatási könyvtárakban keres (/bin, /sbin stb.). Példa: [tanulo@barhacslinux tanulo]$ which pwd /bin/pwd [tanulo@barhacslinux tanulo]$
shutdown Kilépés a rendszerből, ill. annak leállítása. A parancs formája: shutdown [-krhn} mikor [figyelmeztetés] A parancs paraméterei: - Mikor: Mikor lépjen ki. Ez lehet egy abszolút, vagy relatív módon megadott időpont. - Figyelmeztetés: A felhasználóknak küldendő figyelmeztetés. A parancs kapcsolói: - k: Ne lépjen ki csak a figyelmeztető üzenetet küldje el. - r: Kilépés után a számítógép újraindítása. - h: Kilépés után a számítógép leállítása. - n: A shutdown végezze a programok „kilövését” is. Megjegyzés: A shutdown parancsot a legtöbb, jól beállított rendszerben csak a rendszergazda adhatja ki.
22.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Lemezkezelő parancsok fdformat Floppy lemezt alacsony szinten formáz. A parancs formája: fdformat [-n] eszköz A parancs paraméterei: -eszköz: a formázandó lemezegység azonosítója A parancs kapcsolói: -n: Nem ellenőrzi a formázás helyességét. Megjegyzés: Az általános floppy eszközök, /dev/fd0 és /dev/fd1 nem működnek az fdformat paranccsal, ha nem szabványos formátumot használunk, vagy ha a formátum nem detektálódott korábban automatikusan. Példa: [tanulo@barhacslinux tanulo]$ fdformat /dev/fd0 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB. Formatting ... done Verifying ... done [tanulo@barhacslinux tanulo]$
mkfs Egy Linux fájlrendszer kiépítése. A parancs formája: mkfs –t filesystem eszköz [blokkméret] A parancs paraméterei: - Eszköz: Az eszköz azonosítója, amin létre akarunk hozni egy állományrendszert. - Blokkméret: Ha az állományrendszer specifikációja azt támogatja, itt határozhatjuk meg az alkalmazott szektorcsoportok méretét. A parancs kapcsolói: -t : a kiépítendő állományrendszer specifikálására szolgál. Megjegyzés: A Linux többfajta állományszerkezetet is támogat, és ezek legtöbbjét létre is tudja hozni. A támogatott fileszerkezetek a teljesség igénye nélkül: msdos (fat12-16), vfat(fat32), hpfs(os2), ntfs(WinNt/2000 csak olvasásra), ufs (Unix File System), minix, ext2fs(Extended File System V 2.0 – a Linux saját állományrendszere). Példa: [tanulo@barhacslinux tanulo]$ mkfs -t msdos /dev/fd0 mkfs.msdos 2.7 (14 Feb 2001) [tanulo@barhacslinux tanulo]$
mount Fájlrendszert csatlakoztat (mount-ol). A parancs formája: mount [-t filesystem] [-o opciók] eszköz csatlakoztatási_könyvtár A parancs paraméterei: - Eszköz: Az az eszköz, melyen a csatolandó állományszerkezet található. - Csatlakoztatási_könyvtár: Az a könyvtár, ahova a csatlakoztatást elvégezzük. A parancs kapcsolói: - -t: A csatlakoztatandó állományrendszer specifikálása. - -o: A csatlakoztatandó állományrendszer által elfogadott csatlakozatási beállítások.
23.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Megjegyzés: Egy Unix rendszeren elérhető összes fájl egy nagy, faszerkezetű, hierarchikus rendszerben van elhelyezve, amely a / könyvtárból gyökerezik. Az innét elérhető fájlok azonban több eszközön helyezkedhetnek el. A mount parancs arra szolgál, hogy egy eszközön található fájlrendszert ebbe a nagy fastruktúrába bekapcsoljunk. Ezzel ellentétes értelmű az umount , ami a lecsatolásra szolgál. Alapvetően csak a rendszergazda (root-superuser) tud fájlrendszert csatolni, de ha az /etc/fstab megfelelő sora tartalmazza a user opciót, akkor bárki csatolhatja a megfelelő rendszert. Példa: [tanulo@barhacslinux tanulo]$mount -t msdos /dev/fd0 /mnt/floppy [tanulo@barhacslinux tanulo]$
df Szabad lemezterület összegzése. A parancs formája: df A parancs paraméterei: nincsenek A parancs kapcsolói: nincsenek Megjegyzés: A df program az összes beépített (mount-olt) fájlrendszer szabad területét adja meg. Alapértelmezés szerint a szabad területek 1K blokkokban értendõk, hacsak nem adtunk értéket a POSIXLY_CORRECT környezeti változónak. Ekkor 512 bájtos blokkok számítanak egységnek. Példa: [tanulo@barhacslinux tanulo]$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda3 2209200 2071292 23752 99% / /dev/hda2 2093824 48480 2045344 2% /mnt/windows /dev/fd0 1423 0 1423 0% /mnt/floppy [tanulo@barhacslinux tanulo]$
Könyvtárkezelő parancsok ls Könyvtárak tartalmának listázása. A parancs formája: ls [-adflR] [elérési út] [név] A parancs paraméterei: - Elérési út: A listázandó könyvtár elérési útvonala. Amennyiben hiányzik, a munkakönyvtárat használja a rendszer. - Név: A listázandó állományok neve. Az ls elfogad meta (helyettesítő) karaktereket is az állománynév meghatározásakor. A parancs kapcsolói: - a: Minden könyvtárbeli fájlt listáz, beleértve a `.'-tal kezdődő nevűeket is. - d: A könyvtárakat a többi fájlhoz hasonlóan listázza ahelyett, hogy a tartalmukat listázná. - f: Nem rendezi a könyvtárak tartalmát, hanem a lemezen való tárolási sorrendjükben jeleníti meg. - l: A fájlnevek mellett megadja a fájl típusát, engedélyeit a kemény kötések (hard link) számát, a tulajdonos- és a csoportnevet, a méretet bájtokban és az időbélyeget, azaz a módosítási időt, hacsak nem más időt választottunk egy másik opcióval. 24.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Hat hónapnál régebbi, vagy a jelenleginél több mint egy órával későbbi idővel rendelkező fájlok esetén az időbélyeg az évet tartalmazza a napon belüli időpont helyett. - R: Minden könyvtár tartalmát rekurzívan listázza. Megjegyzés: A program a megadott fájlokat és könyvtárakat listázza. A könyvtárak tartalma ABC szerint lesz rendezve. Az ls alapértelmezés szerint oszlopokba rendezett listát ad, függőleges rendezéssel ha a kimenet egy terminál. Más esetben soronként egy nevet ír ki. Példa: [tanulo@barhacslinux tanulo]$ ls CPP/ nsmail/ varga/ Desktop/ Mail/ autosave/ log.txt tmp/ [tanulo@barhacslinux tanulo]$
parancs.txt kvirc-2.1.0/
vizsga.txt/ Nautilus/
[tanulo@barhacslinux tanulo]$ ls -a ./ .gimp-1.2/ .tuxracer/ ../ .gltronrc .user52.rdb .DCOPserver_bahacslinux@ .gnome/ .wmrc .DCOPserver_barhacslinux@ .gnome-desktop/ .xauth/ .DCOPserver_barhacslinux@ .gnome_private/ .xchat/ .DCOPserver_barhacslinux_:0 .icq/ .xmms/ .Gabber/ .kde/ .xsession-errors .Gabber-spool/ .kderc CPP/ .MCOP-random-seed .kxmlrpcd Desktop/ .Trash/ .lftp/ Mail/ .Xauthority .licq/ Nautilus/ .bash_profile .mc/ autosave/ .calendar .ncftp/ kvirc-2.1.0/ .cedit/ .netscape/ log.txt .clanbomber/ .newsrc-localhost nsmail/ .ee/ .pan/ parancs.txt .galeon/ .sawfish/ tmp/ .gconf/ .screem/ varga/ .gconfd/ .screenrc vizsga.txt/ [tanulo@barhacslinux tanulo]$ [tanulo@barhacslinux tanulo]$ ls /bin arch* dmesg* igawk* ash* dnsdomainname@ ipcalc* awk@ doexec* ipv6calc* basename* domainname@ kill* bash* echo* linuxconf* bash2@ ed* ln* bsh@ egrep* loadkeys* cat* ex@ login* chgrp* false* ls* chmod* fgrep* mail* chown* gawk* mkdir* consolechars* gawk-3.0.6* mknod* cp* gettext* mktemp* cpio* grep* more* csh@ gtar@ mount* date* gunzip* mv* dd* gzip* netconf@ df* hostname* netstat* [tanulo@barhacslinux tanulo]$
25.
nice* nisdomainname@ open* ping* ps* pwd* red@ rm* rmdir* rpm* rvi@ rview@ sed* setserial* sfxload* sh@ sleep* sort*
stty* su* sync* tar* tcsh* touch* true* umount* uname* usleep* vi@ view@ vim@ vim-minimal* ypdomainname@ zcat* zsh@
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
[tanulo@barhacslinux tanulo]$ ls -l /bin total 5936 -rwxr-xr-x 1 root root 2844 ÁPR 2 2001 arch* -rwxr-xr-x 1 root root 66556 DEC 5 2000 ash* lrwxrwxrwx 1 root root 4 JÚL 17 2001 awk -> gawk* -rwxr-xr-x 1 root root 6052 FEB 7 2001 basename* -rwxr-xr-x 1 root root 437052 MÁR 29 2001 bash* lrwxrwxrwx 1 root root 4 JÚL 17 2001 bash2 -> bash* lrwxrwxrwx 1 root root 3 JÚL 17 2001 bsh -> ash* -rwxr-xr-x 1 root root 9752 MÁR 31 2001 cat* -rwxr-xr-x 1 root root 12404 MÁR 30 2001 chgrp* -rwxr-xr-x 1 root root 14756 MÁR 30 2001 chmod* -rwxr-xr-x 1 root root 11984 MÁR 30 2001 chown* -rwxr-xr-x 1 root root 41308 ÁPR 11 2001 consolechars* -rwxr-xr-x 1 root root 33148 MÁR 30 2001 cp* -rwxr-xr-x 1 root root 51036 JÚL 26 2000 cpio* lrwxrwxrwx 1 root root 4 JÚL 17 2001 csh -> tcsh* -rwxr-xr-x 1 root root 27036 FEB 7 2001 date* -rwxr-xr-x 1 root root 30748 MÁR 30 2001 dd* -rwxr-xr-x 1 root root 25500 MÁR 30 2001 df* -rwxr-xr-x 1 root root 4260 ÁPR 2 2001 dmesg* lrwxrwxrwx 1 root root 8 JÚL 17 2001 dnsdomainname -> hostname* rwxr-xr-x 1 root root 2664 ÁPR 17 2001 doexec* lrwxrwxrwx 1 root root 8 JÚL 17 2001 domainname -> hostname* -rwxr-xr-x 1 root root 7148 FEB 7 2001 echo* -rwxr-xr-x 1 root root 74044 MÁR 1 2001 ed* -rwxr-xr-x 1 root root 79356 JAN 28 2001 egrep* lrwxrwxrwx 1 root root 2 JÚL 17 2001 ex -> vi* -rwxr-xr-x 1 root root 4740 FEB 7 2001 false* -rwxr-xr-x 1 root root 79356 JAN 28 2001 fgrep* -rwxr-xr-x 2 root root 166364 JAN 20 2001 gawk* -rwxr-xr-x 2 root root 166364 JAN 20 2001 gawk-3.0.6* -rwxr-xr-x 1 root root 17376 ÁPR 17 2001 gettext* -rwxr-xr-x 1 root root 79356 JAN 28 2001 grep* lrwxrwxrwx 1 root root 3 JÚL 17 2001 gtar -> tar* -rwxr-xr-x 3 root root 50652 ÁPR 6 2001 gunzip* -rwxr-xr-x 3 root root 50652 ÁPR 6 2001 gzip* -rwxr-xr-x 1 root root 9728 FEB 23 2001 hostname* -rwxr-xr-x 1 root root 2990 JAN 20 2001 igawk* -rwxr-xr-x 1 root root 19684 ÁPR 17 2001 ipcalc* -rwxr-xr-x 1 root root 20820 ÁPR 8 2001 ipv6calc* -rwxr-xr-x 1 root root 8040 ÁPR 2 2001 kill*-rwsr-xr-x 1 root root 1021176 ÁPR 16 2001 linuxconf* -rwxr-xr-x 1 root root 19772 MÁR 30 2001 ln* -rwxr-xr-x 1 root root 75676 ÁPR 11 2001 loadkeys* -rwxr-xr-x 1 root root 18620 ÁPR 2 2001 login* -rwxr-xr-x 1 root root 44828 MÁR 30 2001 ls* -rwxr-xr-x 1 root mail 84636 MÁR 6 2001 mail* -rwxr-xr-x 1 root root 15400 MÁR 30 2001 mkdir* -rwxr-xr-x 1 root root 13784 MÁR 30 2001 mknod* -rwxr-xr-x 1 root root 4428 NOV 29 2000 mktemp* -rwxr-xr-x 1 root root 26780 ÁPR 2 2001 more* -rwsr-xr-x 1 root root 58972 ÁPR 11 2001 mount* -rwxr-xr-x 1 root root 41052 MÁR 30 2001 mv* lrwxrwxrwx 1 root root 15 JÚL 17 2001 netconf -> ../sbin/netconf* -rwxr-xr-x 1 root root 88988 FEB 23 2001 netstat* -rwxr-xr-x 1 root root 7376 FEB 7 2001 nice* lrwxrwxrwx 1 root root 8 JÚL 17 2001 nisdomainname -> hostname* -rwxr-xr-x 1 root root 7060 SZE 5 2000 open* [tanulo@barhacslinux tanulo]$
26.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
cd Munkakönyvtár váltása. A parancs formája: cd [új munkakönyvtár] A parancs paraméterei: - Új munkakönyvtár: az új munkakönyvtárat specifikálja. Ez lehet relatív vagy abszolút hivatkozás, ill. a szülőkönyvtár hivatkozása (a ..). A cd parancs paraméterek nélkül kiadva a home könyvtárat teszi munkakönyvtárrá. A parancs kapcsolói: nincsenek. Megjegyzés: nincs. Példa: [tanulo@barhacslinux [tanulo@barhacslinux [tanulo@barhacslinux /usr/bin [tanulo@barhacslinux [tanulo@barhacslinux [tanulo@barhacslinux /home/tanulo [tanulo@barhacslinux
tanulo]$ cd /bin /bin]$ cd /usr/bin bin]$ pwd bin]$ cd .. /usr]$ cd tanulo]$ pwd tanulo]$
tree A megadott könyvtár fa struktúráját jeleníti meg. A parancs formája: tree [-adAS][elérési út] [név] A parancs paraméterei: - Elérési út: A listázandó könyvtár elérési útvonala. Amennyiben hiányzik a munkakönyvtárat használja a rendszer. - Név: A listázandó állományok neve. A parancs kapcsolói: a: Minden könyvtárbeli fájlt listáz, beleértve a `.'-tal kezdődő nevűeket is. d: Csak a könyvtárakat listázza, az állományokat nem. A: ASCII karaktereket használ a könyvtárstruktúra kirajzolásához. S: Grafikus karaktereket használ a könyvtárstruktúra kirajzolásához. Megjegyzés: nincs. Példa: [tanulo@barhacslinux proba]$ tree . 0 directories, 0 files [tanulo@barhacslinux proba]$
mkdir Könyvtár(ak) létrehozása. A parancs formája: mkdir [-p] [új könyvtár] A parancs paraméterei: -Új könyvtár: a létrehozandó új könyvtárat specifikálja. A parancs kapcsolói: -p: Létrehoz minden hiányzó szülőkönyvtárat a könyvtárargumentumhoz. Nem tekinti hibának, ha egy már létező könyvtár neve szerepel argumentumban (tehát ha a /a könyvtár létezik, akkor az `mkdir /a' hibát jelez, de az `mkdir -p /a' nem). Megjegyzés: Alapértelmezés szerint a létrehozott könyvtárak hozzáférési jogai úgy alakulnak, hogy a 0777 (`a+rwx') beállításból kivonódnak az umask-ban beállított jogosultságbitek.
27.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux [tanulo@barhacslinux [tanulo@barhacslinux [tanulo@barhacslinux . `-- alma `-- korte `-- szilva
tanulo]$ mkdir proba tanulo]$ cd proba proba]$ mkdir -p alma/korte/szilva proba]$ tree
3 directories, 0 files [tanulo@barhacslinux proba]$ cd alma [tanulo@barhacslinux alma]$ mkdir mag hej [tanulo@barhacslinux alma]$ tree . |-- hej |-- korte | `-- szilva `-- mag 4 directories, 0 files [tanulo@barhacslinux alma]$
rmdir Törli az üres könyvtárakat A parancs formája: rmdir [-p] [törlendő könyvtár] A parancs paraméterei: -Törlendő könyvtár: az eltávolítandó, üres könyvtárat adja meg. A parancs kapcsolói: -p: Az opció hatását legegyszerűbben egy példával mutathatjuk be. Legyen a törlendő könyvtár argumentum `a/b/c', ekkor az `rmdir -p a/b/c' parancs először az `a/b/c' könyvtárat törli, majd az `a/b'-t, végül az `a'-t. Ez csak akkor sikerülhet, ha minden megelőző parancs hatására a szülőkönyvtár üressé válik (rekurzív törlés). Megjegyzés: Ha a törlendő könyvtár argumentum nem egy létező üres könyvtárra utal, az hibának minősül. Példa: [tanulo@barhacslinux tanulo]$ cd proba [tanulo@barhacslinux proba]$ tree . `-- alma |-- hej |-- korte | `-- szilva `-- mag 5 directories, 0 files [tanulo@barhacslinux proba]$ rmdir alma/korte/szilva [tanulo@barhacslinux proba]$ tree . `-- alma |-- hej |-- korte `-- mag 4 directories, 0 files
28.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
[tanulo@barhacslinux proba]$ rmdir alma/hej alma/mag [tanulo@barhacslinux proba]$ tree . `-- alma `-- korte 2 directories, 0 files [tanulo@barhacslinux tanulo]$ rmdir -p alma/korte [tanulo@barhacslinux proba]$ tree . 0 directories, 0 files [tanulo@barhacslinux proba]$
Helyettesítő karakterek használata A Unix/Linux-ban a helyettesítő karakterek jóval nagyobb lehetőségekkel bírnak, mint a DOS alapú operációs rendszerekben. Néhány példa: - *: a legtöbb rendszerben elindítja az összes elérhető (PATH változó) programot. - echo *: kiírja a megadott könyvtár tartalmát. - ls *c: kilistázza az összes c-re végződő elemet. - ls ?[aes]?: kilistázza azokat a hárombetűs elemeket, melyek középső betűje a, e vagy s. - ls [nm]*: kilistázza azokat az elemeket melyek n-nel vagy m-mel kezdődnek. - ls [^s]??: kilistázza azokat az elemeket, melyek három karakteresek és nem ssel kezdődnek. Példa: [tanulo@barhacslinux tanulo]$ cd /bin [tanulo@barhacslinux /bin]$ ls * arch* cpio* false* kill* netconf@ rview@ true* ash* csh@ fgrep* linuxconf* netstat* sed* umount* awk@ date* gawk* ln* nice* setserial* uname* basename* dd* gawk-3.0.6* loadkeys* nisdomainname@ sfxload* usleep* bash* df* gettext* login* open* sh@ vi@ bash2@ dmesg* grep* ls* ping* sleep* view@ bsh@ dnsdomainname@ gtar@ mail* ps* sort* vim@ cat* doexec* gunzip* mkdir* pwd* stty* vim-minimal* chgrp* domainname@ gzip* mknod* red@ su* ypdomainname@ chmod* echo* hostname* mktemp* rm* sync* zcat* chown* ed* igawk* more* rmdir* tar* zsh@ consolechars* egrep* ipcalc* mount* rpm* tcsh* cp* ex@ ipv6calc* mv* rvi@ touch* [tanulo@barhacslinux /bin]$ ls *c doexec* ipcalc* ipv6calc* sync* [tanulo@barhacslinux /bin]$ ls ?[aes]? ash* bsh@ cat* csh@ red@ sed* tar* zsh@ [tanulo@barhacslinux /bin]$ ls [nm]* mail* mkdir* mknod* mktemp* more* mount* mv* netconf@ netstat* nice* nisdomainname@ [tanulo@barhacslinux /bin]$ ls [^s]?? ash* awk@ bsh@ cat* csh@ pwd* red@ rpm* rvi@ tar* vim@ zsh@ [tanulo@barhacslinux /bin]$
29.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Álllománykezelő parancsok cat Fájlokat ír ki a standard kimenetre. A parancs formája: cat [-bns] [állománynév] A parancs paraméterei: -Állománynév: a standard kimenetre kiírandó állományt specifikálja. Ha nem adjuk meg, a cat a standard bemenetről várja az adatokat. A parancs kapcsolói: - b: Minden nem üres kimeneti sort megszámoz 1-től kezdődően. - n: Minden kimeneti sort megszámoz 1-től kezdődően. - s: Az egymás után ismétlődő üres sorokat egyetlen üres sorral helyettesíti. Megjegyzés: A cat alapértelmezésben szöveges módot használ, illetve bináris módot akkor, ha a standard kimenet fájlba vagy pipe-ba van irányítva. A szöveges mód karakterkonverziót foglal magában (pl. a
-rol -re), így nem alkalmas a fájlok cat-tal való másolására, mivel az eredeti tartalmat nem őrzi meg. Példa: [tanulo@barhacslinux tanulo]$ cat /etc/fstab /dev/hda3 / ext2 defaults 1 1 none /dev/pts devpts mode=0620 0 0 /dev/cdrom /mnt/cdrom iso9660 ro,nosuid,noauto,exec,user,nodev /dev/fd0 /mnt/floppy vfat sync,nosuid,noauto,user,nodev,unhide /dev/hda2 /mnt/windows fat user,exec,umask=0 0 0 none /proc proc defaults 0 0 /dev/hda4 swap swap defaults 0 0 [tanulo@barhacslinux tanulo]$
0 0 0 0
more Szűrőprogram fájlok tartalmának kiírásához egy képernyőoldalon. A parancs formája: more [-dps] [állománynév] A parancs paraméterei: -Állománynév: a kiírandó állományt specifikálja. Ha nem adjuk meg, a standard bemenetről várja az adatokat. A parancs kapcsolói: - d: A more minden oldal után a következőt írja ki: "[Press space to continue, 'q' to quit.]". Érvénytelen billentyű lenyomásakor csipogás helyett a következő üzenetet írja ki: "[Press 'h' for instructions.]". - p: Nem scrolloz. Helyette törli az egész képernyőt, azután kiírja a szöveget. - s: Az egymás után ismétlődő üres sorokat egyetlen üres sorral helyettesíti. Megjegyzés: A more egy szűrőprogram, egy adott szövegből csak egy képernyőnyit mutat.
30.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux tanulo]$ more /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false rpc:x:32:32:Portmapper RPC user:/:/bin/false sympa:x:89:89:Sympa Mailing list manager:/var/lib/sympa:/bin/bash nobody:x:99:99:Nobody:/: alias:x:400:401:qmail alias user:/var/qmail/alias:/bin/true qmaild:x:401:401:qmaild user:/var/qmail:/bin/true qmaill:x:402:401:qmaill user:/var/qmail:/bin/true --More--(64%) [tanulo@barhacslinux tanulo]$
less Szövegmegjelenítő program. A parancs formája: less [-EN] állománynév A parancs paraméterei: -Állománynév: a kiírandó állományt specifikálja. A parancs kapcsolói: - E: Azt eredményezi, hogy a less automatikusan kilép, ha eléri a fájl végét. - N: Azt eredményezi, hogy a kijelzéskor minden sor elején kiíródik a sor száma is. Megjegyzés: A less program hasonlít a more -ra, de visszafele való mozgást is engedélyez a fájlban, nemcsak előremenőt. Továbbá a less számára nem szükséges a teljes bemeneti fájl beolvasása az induláshoz, így nagy szövegfájloknál gyorsabban indul, mint a szövegszerkesztők. Használható billentyűk: - SPACE: Egy képernyőnyit görget. - ENTER: Egy sort görget. - R: Újrarajzolja a képernyőt, és eldob minden pufferelt bemenetet. Hasznos, ha a fájl nézés közben változik. - Q: Kilépés. Példa: [tanulo@barhacslinux tanulo]$ less /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false rpc:x:32:32:Portmapper RPC user:/:/bin/false sympa:x:89:89:Sympa Mailing list manager:/var/lib/sympa:/bin/bash nobody:x:99:99:Nobody:/: alias:x:400:401:qmail alias user:/var/qmail/alias:/bin/true qmaild:x:401:401:qmaild user:/var/qmail:/bin/true qmaill:x:402:401:qmaill user:/var/qmail:/bin/true qmailp:x:403:401:qmailp user:/var/qmail:/bin/true /etc/passwd lines 1-30/41 67% [tanulo@barhacslinux tanulo]$
31.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
touch Fájl időbélyegének megváltoztatása. A parancs formája: touch [-r ref_fájl][-t idő] állománynév A parancs paraméterei: -Állománynév: a megváltoztatandó állományt adja meg. A parancs kapcsolói: - r: A ref_fájl időbélyegeit használja az időbélyegek új értékeinek beállításához. - t: A megadott időt használja az időbélyegek új értékeinek beállításához. Az argumentum egy decimális szám, a következő formában: [[CC]YY]MMDDhhmm[.SS]
ahol CC a századot, YY az évet, MM a hónapot, DD a napot, hh az órát, mm a percet és SS a másodpercet jelenti. Ha nem adjuk meg a századot, akkor a CCYY évet veszi a program figyelembe, ahol 1969 < CCYY <2068. Ha nem adjuk meg a YY évet, akkor az aktuális év lesz az idő év része. Ha nem adjuk meg az SS-t, akkor az értéke 0 lesz. Hibát okoz, ha az idő 1970.január 1. előtti. Megjegyzés: A touch megváltoztatja minden megadott fájl utolsó elérésének és/vagy utolsó módosításának idejét. Ezek az időbélyegek az aktuális időre változnak, hacsak nem adtuk meg az -r opciót, ez esetben ugyanis a megadott ref_fájl időbélyegét kapja meg a fájl, illetve ha a -t opciót adtuk meg, akkor az időbélyeg a időben megadott időre változik. Ha a fájl nem létezik, a touch létrehozza azt. Példa: [tanulo@barhacslinux tanulo]$ cd proba [tanulo@barhacslinux proba]$ touch linux.txt [tanulo@barhacslinux proba]$ ls -l total 0 -rw-r--r-1 tanulo tanulo 0 MÁJ 23 14:27 linux.txt [tanulo@barhacslinux proba]$
cp Fájlok és könyvtárak másolása. A parancs formája: cp [-r] [honnan][/mit] [hova][/milyen néven] A parancs paraméterei: - Honnan: a forrásfájl(ok) elérési útját adja meg. - Mit: A forrásfájlokat specifikálja. - Hova: A célkönyvtárat jelöli ki. - Milyen néven: Ha szükséges új nevet specifikál. Ha elhagyjuk ezt az opciót, az állományt az eredeti nevén másolja. A parancs kapcsolói: -r: A könyvtárakat rekurzívan másolja, illetve valamilyen nem specifikált műveletet végez az olyan objektumokon, amelyek nem hagyományos fájlok illetve könyvtárak. Megjegyzés: A cp parancs fájlokat (vagy opcionálisan, könyvtárakat) másol. Másolható vele egyetlen fájl a megadott helyre, vagy akár végtelenül sok fájl egy célkönyvtárba. Ha az utolsó argumentum egy létező könyvtárat jelöl, a cp minden forrás fájlt abba a könyvtárba másol be (ugyanazon nevet megtartva). Ellenben, ha csak két fájl adott, az elsőt a másodikra másolja. Hibát jelent, ha az utolsó argumentum nem könyvtár, és több mint két nem-opció argumentum van megadva. Így a `cp -r /a /b' /a-t /b/a-ba másolja és a /a/x-et /b/a/x-be akkor, ha a /b létezik, de /a-t /b-be és /a/x-et /b/x-be helyezi, ha korábban nem volt /b könyvtár. 32.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A másoláskor keletkező fájlok és könyvtárak jogai ugyanazok lesznek, mint az eredeti állományoké. Semmi nem történik akkor, ha egy fájlt önmagába másolunk (kivéve azt, hogy valószínűleg hibaüzenetet kapunk). Példa: [tanulo@barhacslinux proba]$ mkdir egy ketto [tanulo@barhacslinux proba]$ tree . |-- egy |-- ketto `-- linux.txt 2 directories, 1 file [tanulo@barhacslinux proba]$ cp /home/tanulo/proba/linux.txt /home/tanulo/proba/egy/unix.dok [tanulo@barhacslinux proba]$ tree . |-- egy | `-- unix.dok |-- ketto `-- linux.txt 2 directories, 2 files [tanulo@barhacslinux proba]$
mv Fájlokat mozgat. A parancs formája: mv [honnan][/mit] [hova][/milyen néven] A parancs paraméterei: - Honnan: a forrásfájl(ok) elérési útját adja meg. - Mit: A forrásfájlokat specifikálja. - Hova: A célkönyvtárat jelöli ki. - Milyen néven: Ha szükséges új nevet specifikál. Ha elhagyjuk ezt az opciót, az állományt az eredeti nevén mozgatja. A parancs kapcsolói: nincsenek. Megjegyzés: Az mv parancs használható állományok átnevezésére is. Ilyen esetben a fájl régi és új nevét adjuk meg argumentumként. Példa: [tanulo@barhacslinux proba]$ tree . |-- egy | `-- unix.dok |-- ketto `-- linux.txt 2 directories, 2 files [tanulo@barhacslinux proba]$ mv /home/tanulo/proba/linux.txt /home/tanulo/proba/ketto/gnu.gpl [tanulo@barhacslinux proba]$ tree . |-- egy | `-- unix.dok `-- ketto `-- gnu.gpl 2 directories, 2 files [tanulo@barhacslinux proba]$ 33.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
rm Állományok eltávolítása. A parancs formája: rm [-dir] állománynév A parancs paraméterei: -Állománynév: az eltávolítandó (letörlendő) állományt specifikálja. A parancs kapcsolói: - d: Könyvtárak eltávolítása. Nem szükséges, hogy a könyvtár üres legyen törléskor. Csak a szuper-felhasználó alkalmazhatja. - i: Minden fájl eltávolítása előtt megkérdezi a felhasználót, hogy törölheti-e az adott állományt. Ha a válasz nem `y' vagy `Y' betűvel kezdődik a következő állományt veszi. - r: A könyvtárak tartalmát rekurzívan törli. Megjegyzés: Ha egy állomány nem írható, és a standard bemenet egy terminál, az rm megkérdezi a felhasználót, hogy eltávolíthatja-e az állományt. Példa: [tanulo@barhacslinux proba]$ tree . |-- egy | `-- unix.dok `-- ketto `-- gnu.gpl 2 directories, 2 files [tanulo@barhacslinux proba]$ rm /home/tanulo/proba/egy/unix.dok rm: remove `/home/tanulo/proba/egy/unix.dok’? y [tanulo@barhacslinux proba]$ tree . |-- egy `-- ketto `-- gnu.gpl 2 directories, 1 file [tanulo@barhacslinux proba]$
ln Fájlok közötti kötéseket (linkeket) hoz létre. A parancs formája: ln [-s] forrás cél A parancs paraméterei: - Forrás: Annak az állománynak az elérési útvonalát adja meg, amelyikhez linket akarunk létrehozni. - Cél: A létrehozandó link elérési útvonalát adja meg. A parancs kapcsolói: -s: kemény (hard) kötés helyett szimbolikus linket hoz létre. Megjegyzés: Amennyiben az utolsó argumentum egy létező könyvtár, az ln program minden más megadott fájlhoz létrehoz egy kötést ebben a könyvtárban (azonos néven). Ha csak egy fájl adott, ahhoz az aktuális könyvtárba hoz létre kötést. Különben ha két fájl adott, az elsőhöz hoz létre kötést a második által megadott néven. Hibát jelent, ha az utolsó argumentum nem könyvtár és kettőnél több fájl adott.
34.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux proba]$ ln /bin/ls /home/tanulo/proba/dir [tanulo@barhacslinux proba]$ ls -l total 52 -rwxr-xr-x 2 root root 44828 MÁR 30 2001 dir* drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:31 egy/ drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:30 ketto/ [tanulo@barhacslinux proba]$ dir dir egy ketto [tanulo@barhacslinux proba]$ dir -l total 52 -rwxr-xr-x 2 root root 44828 MÁR 30 2001 dir drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:31 egy drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:30 ketto [tanulo@barhacslinux proba]$ rm /home/tanulo/proba/dir rm: remove write-protected file `/home/tanulo/proba/dir’? y [tanulo@barhacslinux proba]$ ln -s /bin/ls /home/tanulo/proba/dir [tanulo@barhacslinux proba]$ ls -l total 8 lrwxrwxrwx 1 tanulo tanulo 7 MÁJ 23 14:35 dir -> /bin/ls* drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:31 egy/ drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:30 ketto/ [tanulo@barhacslinux proba]$ dir dir egy ketto [tanulo@barhacslinux proba]$ dir -l total 8 lrwxrwxrwx 1 tanulo tanulo 7 MÁJ 23 14:35 dir -> /bin/ls drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:31 egy drwxr-xr-x 2 tanulo tanulo 4096 MÁJ 23 14:30 ketto [tanulo@barhacslinux proba]$
chmod Fájlok elérési jogainak megváltoztatása. A parancs formája: chmod [speciális][tulajdonos][csoport][más] elérési út A parancs paraméterei: - Speciális: Az első számjegy a felhasználói azonosító beállítása (4), felhasználói csoport beállítása (2) és a `sticky'(1) attribútumokat állítja be. - Tulajdonos: A második számjegy a fájlt tulajdonló felhasználóra vonatkozik: olvasás (4), írás (2), futtatás (1) jogokkal. - Csoport: A harmadik számjegy a fájlt tulajdonló csoportra vonatkozik: olvasás (4), írás (2), futtatás (1) jogokkal. - Más: A negyedik számjegy a fájlt tulajdonosain kívül eső csoportra vonatkozik: olvasás (4), írás (2), futtatás (1) jogokkal. - Elérési út: a megváltoztatandó állományt specifikálja. A parancs kapcsolói: A szimbolikus mód megadásának formátuma: [ugoa...][[+-=][rwxXstugo...]...][,...]
Ez a fajta argumentum szimbolikus módosító parancsok listája, vesszővel elválasztva. -R: Rekurzívan megváltoztatja a könyvtárnak, illetve tartalmának jogosultságait. Megjegyzés: A chmod soha nem változtatja meg a szimbolikus linkek jogait, mivel a chmod rendszerhívás nem tudja a jogosultságaikat megváltoztatni. Ez azonban nem jelent problémát, mivel a szimbolikus linkek jogait nem használjuk. Ehelyett a szimbolikus link által mutatott fájl jogai változnak meg. Kivétel: a könyvtárakban rekurzívan megtalált szimbolikus link által mutatott fájl jogai nem változnak.
35.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux proba]$ ls -l total 8 drwxr-xr-x 2 tanulo tanulo drwxr-xr-x 2 tanulo tanulo -rw-r--r-1 tanulo tanulo [tanulo@barhacslinux proba]$ chmod [tanulo@barhacslinux proba]$ ls -l total 8 drwxr-xr-x 2 tanulo tanulo drwxr-xr-x 2 tanulo tanulo -rwxrwxrwx 1 tanulo tanulo [tanulo@barhacslinux proba]$ chmod [tanulo@barhacslinux proba]$ ls -l total 8 drwxr-xr-x 2 tanulo tanulo drwxr-xr-x 2 tanulo tanulo -rw-r-xr-1 tanulo tanulo [tanulo@barhacslinux proba]$ chmod [tanulo@barhacslinux proba]$ ls -l total 8 drwxr-xr-x 2 tanulo tanulo drwxr-xr-x 2 tanulo tanulo ---------1 tanulo tanulo [tanulo@barhacslinux proba]$ chmod [tanulo@barhacslinux proba]$ ls -l total 8 drwxr-xr-x 2 tanulo tanulo drwxr-xr-x 2 tanulo tanulo -rwsrwsrwt 1 tanulo tanulo [tanulo@barhacslinux proba]$
4096 MÁJ 23 14:31 egy/ 4096 MÁJ 23 14:30 ketto/ 0 MÁJ 23 14:37 proba.txt 777 proba.txt
4096 MÁJ 23 14:31 egy/ 4096 MÁJ 23 14:30 ketto/ 0 MÁJ 23 14:37 proba.txt* 654 proba.txt
4096 MÁJ 23 14:31 egy/ 4096 MÁJ 23 14:30 ketto/ 0 MÁJ 23 14:37 proba.txt* 000 proba.txt
4096 MÁJ 23 14:31 egy/ 4096 MÁJ 23 14:30 ketto/ 0 MÁJ 23 14:37 proba.txt 7777 proba.txt
4096 MÁJ 23 14:31 egy/ 4096 MÁJ 23 14:30 ketto/ 0 MÁJ 23 14:37 proba.txt*
chown Fájlok tulajdonosának megváltoztatása. A parancs formája: chown [-R][user] elérési út A parancs paraméterei: - User: az új tulajdonost adja meg. - Elérési út: a megváltoztatandó állományt specifikálja. A parancs kapcsolói: -R: Rekurzívan megváltoztatja a könyvtárnak, illetve tartalmának tulajdonosát. Megjegyzés: chgrp Fájlok tulajdonosi csoportjának megváltoztatása. A parancs formája: chgrp [-R][group] elérési út A parancs paraméterei: - Group: az új tulajdonosi csoportot adja meg. - Elérési út: a megváltoztatandó állományt specifikálja. A parancs kapcsolói: -R: Rekurzívan megváltoztatja a könyvtárnak, illetve tartalmának tulajdonosi csoportját. Megjegyzés:
36.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A Midnight Commander A Midnight Commander a Peter Norton által készített népszerű Norton Commander LINUX alá írt megfelelője. Valójában nem arról van szó, hogy elkészítették az eredeti program Linux alatt futó változatát, hanem arról, hogy készítettek egy programot, amely megjelenésében és viselkedésében kísértetiesen hasonlít az eredetire. A Midnight Commander menüvezérelt egérrel kezelhető felületet biztosít a leggyakrabban használt állománykezelő műveletek számára, így különösen a kezdők számára hasznos - bár a billentyűzetről oly gyorsasággal kezelhető, hogy a profik is sokszor használják. A program az mc paranccsal indítható, a -b opció segítségével akár egyszínű képernyőn is. Kilépés az F10 billentyűvel vagy az exit parancs begépelésével lehetséges. A program indításakor a képernyőn két félképnyi panel, egy parancssor és a funkcióbillentyűkhöz rendelt jelentést felsorakoztató emlékeztető jelenik meg, ahogy azt az ábrán is láthatjuk.
A két oldalon látható panelek lehetővé teszik, hogy egyszerre két könyvtár tartalmát is lássuk, ami másolásnál, mozgatásnál különösen hasznos. Habár a program az egérrel is kezelhető, igazán gyors munkát csak a billentyűzettel lehet végezni. A két panel egyikén mindig találtható egy világosabb sáv, amely a kurzormozgató nyilak segítségével felfelé és lefelé elmozdítható. E sáv alapvetően kijelölő szereppel rendelkezik, bizonyos billentyűk lenyomása esetén meghatározza, hogy melyik könyvtárra vagy állományra vonatkozzék a végrehajtandó művelet.
37.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A legfontosabb billentyűkombinációk a következők: -
-
-
-
Kurzormozgató nyilak: A kijelölő sáv mozgatására szolgálnak felfelé és lefelé. Ha az aktuális könyvtárban oly sok állomány és alkönyvtár található, hogy azok nem férnek a képernyőre, a felfelé és lefelé mozgató nyilak a panel tartalmát görgetik. Tabulátor: A tabulátor billentyű segítségével a kijelölő sáv a két panel közt mozgatható, vagyis jobb vagy baloldalra ugorhatunk vele. PageUp PageDown: E két billentyű a kijelölő sávot mozgatja laponként felfelé és lefelé. Enter: Az Enter billentyű hatása attól függően változik, hogy a kijelölő sáv milyen állományon, könyvtáron áll. Ha e sor alkönyvtárat jelöl - amelyet a program a név előtt látható / jellel jelez - akkor az Enter könyvtárváltást eredményez - a program belép az adott könyvtárba. Ha a sáv alatt futtatható program - állomány található, akkor az Enter a program elindítását eredményezi. Egyéb állománytípus esetén a Midnight Commander az állomány típusának megfelelő programot indítja, hogy megnézhessük, szerkeszthessük az állományt. Ctrl+PageUp: A kombináció hatására eggyel feljebb léphetünk a könyvtárstruktúrában - a program kilép az aktuális könyvtárból. Ctrl+Enter: Hatására a program a kijelölő sáv alatt található állomány vagy könyvtár nevét az alsó parancssorba másolja. A parancssorról a fejezetben olvashatunk. Ctrl+o: E billentyűzetkombináció hatására a Midnight Commander a képernyőről eltűnik, a háttérben azonban tovább fut. Újra megjeleníteni a Ctrl+o újbóli megnyomásával lehet. Ctrl+s: Bekapcsolja a gyorskeresést, amely arra szolgál, hogy a kijelölő sávot ismert állománynévre mozgathassunk - bonyodalmas böngészés nélkül. Amikor megnyomjuk a Ctrl+s kombinációt, a panel alsó sorába begépelhetünk egy állománynevet. Ahogyan gépeljük a betűket, a kijelölősáv folyamatosan keresi az állománylistában azt. Kilépni a gyorskeresésből az Esc billentyű kétszeri megnyomásával lehet - bár sokszor nem szükséges, mivel az alapvető billentyűzetkombinációk keresés üzemmódban is működnek. Ctrl+l: A képernyő újrarajzolására utasítja a Midnight Commandert. Ez akkor hasznos, ha valamilyen külső üzenet a képet összezavarta volna.
A képernyő utolsó előtti sorában egy parancssor található, amelynek elején az elsődleges parancskérő jelet láthatjuk. A Midnight Commander futása alatt ide parancsokat gépelhetünk be, amelyeket az Enter billentyű lenyomásával indíthatunk. A parancs futtatása mindig abban a könyvtárban történik, amelyben a kijelölő sáv van. Ha a kijelölő sáv nem a saját gép egyik könyvtárában tartózkodik, akkor a Midnight Commander a parancsot nem hajtja végre, az Enter billentyű lenyomására hibaablakot jelenít meg. Ha egyszerre több állománnyal kívánunk valamely műveletet végrehajtani, akkor azok neveit először ki kell jelölnünk. Erre többféle lehetőségünk is van. Legegyszerűbb módszer az Ins gomb megnyomása az adott néven. A gomb megnyomásakor a program a kijelölő sávot egy lépéssel lejjebb viszi, az állományt vagy könyvtárat pedig kijelöli. Ezt úgy jelzi, hogy a nevét ezentúl más színnel általában sárgával - írja. 38.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Több állományt kijelölhetünk egyetlen lépéssel, ha megnyomjuk billentyűzeten található + jelet. Így egy kis ablakban beírhatunk egy tulajdonképpen egy állománynév, amelyben helyettesítő (meta) lehetnek. Az Enter gomb megnyomása után a program az összes kijelöli.
a numerikus szűrőt, amely karakterek is egyező nevet
Hasonlatosan működik a numerikus billentyű - gombja is, amely azonban a kijelölés megszüntetésére szolgál. Ha vannak kijelölt állományok, akkor e gomb megnyomása után beírt szűrő segítségével azok némelyikéről visszavehetjük a kijelölést. A numerikus billentyűzet * jele a kijelölés állapotát minden néven megfordítja amelyek ki voltak jelölve azok nem lesznek, amelyek pedig nem voltak kijelölve, kijelölésre kerülnek. Így az összes állomány kijelölésére a leggyorsabb módszert e gomb megnyomása jelenti. Állományt vagy állományokat egyszerűen úgy törölhetünk, hogy kijelöljük a törlendő állományokat - esetleg ha csak egyetlen állományról van szó, elegendő a kijelölősávval a névre állni - majd megnyomjuk az F8 billentyűt. A törlés elérhető a File menüben is. A program képes alkönyvtárakat is törölni, azok teljes tartalmával együtt. Ha könyvtárakat is kijelöltünk vagy egyszerűen egy könyvtár nevére állva adjuk ki a törlés parancsot az F8 billentyűvel, akkor pillanatok alatt fontos adatokat törölhetünk, ezért óvatosan kell eljárnunk törléskor. Törléskor a program beállításaitól függően esetleg rákérdezhet arra, hogy biztosan törölni akarjuk -e az állományt vagy állományokat, de zokszó nélkül végre is hatjhatja a törlést. A másolás és mozgatás igen hasonló műveletek. Mindkét esetben arról van szó, hogy az állomány vagy állományok egy másik könyvtárba kerülnek - amely lehet egy más fizikai eszközön, pl. hajlékonylemezen is -, de amíg a másoláskor az eredeti megőrződik, addig a mozgatásnál megsemmisül. Ha ugyanazon a fizikai eszközön mozgatással viszünk át adatokat egyik könyvtárból a másikba, akkor a LINUX az adatokat nem mozgatja - hiszen az felesleges is volna egyazon fizikai eszközön belül - csak a hozzájuk tartozó állománybejegyzést teszi át egy másik könyvtárba. Ez az oka annak, hogy a mozgatás nagyméretű állományok esetén is igen gyors lehet, akár nagyságrendekkel is gyorsabb, mint a másolás. Amikor állományokat akarunk mozgatni vagy másolni, akkor a következőképpen kell eljárnunk: 1. Jelöljük ki a másolni vagy mozgatni kívánt állományokat az egyik panelben. 2. A másik panelben keressük ki azt az alkönyvtárat, amelybe az adatokat másolni akarjuk és nyissuk meg. 3. A kijelölősávval álljunk abba a panelbe, amely a forrásállományokat amelyeket másolni vagy mozgatni kívánunk - tartalmazza. 4. A másolást kérhetjük az F5, a mozgatást pedig az F6 gombbal. Ekkor a program megerősítést kér, majd megkezdi a művelet végrehajtását. Természetesen, ha csak egyetlen állományt vagy könyvtárat akarunk másolni, mozgatni, akkor nem szükséges azt kijelölni, elegendő a kijelölősávval a megfelelő névre állni.
39.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A program fel van szerelve egy belső szövegszerkesztővel, amely egyszerű, de elég hatékony eszköz szöveges állományok kezelésére. Nem túl bonyolult, de eléggé kézreálló ahhoz, hogy akár egy könyvet is megírjunk a segítségével. A szövegszerkesztőhöz rá kell állnunk a megfelelő állományra és meg kell nyomnunk az F4 gombot. A Midnight Commander szövegszerkesztőjéről a következő fejezetben olvashatunk bővebben. Az F3 billentyű segítségével az adott állományt a program megpróbálja megjeleníteni. A megjelenítéshez különféle saját vagy külső programokat használ, a megjelenítendő állomány típusának megfelelően.
Shell használat Már a rendszer indításakor szükség van egy (illetve több) programra, amely biztosítja a bejelentkezés lehetőségét, illetve bejelentkezéskor minden felhasználó számára el kell indítani egy programot, amely lehetővé teszi a felhasználó számára, hogy a rendszerrel kommunikáljon, más programokat indítson el stb. Ez a program a parancsértelmező vagy shell. Fontos megjegyezni, hogy a shell semmiféle speciális tulajdonsággal nem bír: tulajdonképpen bármely programot megadhatunk ún. "default" vagy "login shell"-nek (cifra magyarsággal alapértelmezés szerinti parancsértelmező). Ha azt akarjuk, hogy valamely felhasználó csak a „vi” szövegszerkesztőt legyen képes futtatni, állítsuk be számára login shell-ként a „vi” programot: ekkor bejelentkezés után rögtön a „vi” indul el, a szövegszerkesztés befejezése (a „vi”-ből kilépés) után pedig a felhasználó visszakerül a login prompthoz. Sőt, olyan programot is megadhatunk login shell-nek, amely egyáltalán nem olvas a billentyűzetről és nem ír a képernyőre - bár szegény felhasználó számára a bejelentkezések nem lesznek túl érdekfeszítőek - a program lefutását is csak onnét veszi észre, hogy visszakerült a login prompthoz. A shellek közötti váltás igen egyszerű, csak meg kell adni az elindítani kívánt shell nevét, a rendszer pedig betölti azt. (C shell indítása) (a prompt mutatja a változást)
[tanulo@barhacslinux tanulo]$ csh [tanulo@barhacslinux ~]$ _
Környezeti változók Fontos tulajdonsága még a shellnek, hogy definiálhatunk benne (a DOS-hoz hasonló) ún. környezeti változókat (enviroment variables), amelyek közül a fontosabbak: - a PATH változó, amely megmondja, mely könyvtárakban keresse a rendszer a futtatható file-okat, - a HOME változó, amely a home könyvtár útvonalát tartalmazza, - a LOGNAME és a HOSTNAME változók, amelyek a login nevet illetve a gép nevét tartalmazzák, - illetve a TERM változó, amely a használt terminál típust azonosítja.
40.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Különbségek az egyes shellek között Alapvető vonásaiban minden shell azonos: programot elindítani mindegyikben a programnév begépelésével lehet, mindegyik azonosan értelmezi a fájlnév metakaraktereket, és végül is amit egyik shellben meg tudunk csinálni, azt többkevesebb nehézséggel egy másikban is elérhetjük - bár néha eltérő szintaktikával. Például a környezeti változók állítása már nem ugyanazzal a szintaktikával történik az egyes shellekben, az elért hatás azonban ugyanaz. Lényegi különbség nincs igazán a shellek között, talán csak annyi, hogy az újabbakban sok olyan - gépelést megtakarító, gyorsító - funkció van amelyek a régebbi shellekben még nem voltak meg. A továbbiakban bash-ban fogunk dolgozni, mert - bár létezik Linuxra az összes említett shell - mégis a Linux világban ez a legelterjedtebb. Néhány hasznos ismeret a bash-ról A bash számos kényelmi funkciója közül néhány: az előzőleg begépelt parancsokat visszahívhatjuk a felfelé nyíllal, a parancssort szabadon szerkeszthetjük (mozogni a nyílbillentyűkkel lehet). Előző parancsot visszahívni még a felkiáltójellel is lehet: a ! mögé rövid szöveget írva megkeresi a legutóbbi olyan parancsot, amely azzal a szöveggel kezdődött, és azt futtatja le. A ! használatával előhívott parancs egyébként módosítható, át is szerkeszthető. Fájlnév kiegészítést a „Tab”-bal kérhetünk: ennek hatására a shell megpróbálja kiegészíteni az eddig begépelt fájlnév kezdeményt. Ha ez egyértelműen lehetséges, beírja a fájlnevet, ha nem, sípol egyet, és a „Tab” újbóli megnyomására megkapjuk a lehetséges fájlnevek listáját. A fájlnév kiegészítés valamennyire intelligens: sor elején (első szóban) csak futtatható fájlokra, parancsok nevére egészít ki (viszont a PATH-ot is végignézi), argumentumoknál viszont az aktuális könyvtár (vagy a megkezdett fájlnévnek megfelelő könyvtár) összes fájljára működik. Még két, a bash-hoz tartozó fájlról érdemes beszélnünk, mindkettő a home könyvtárunkban van, és shell parancsokat tartalmaz, amelyeket a bash bizonyos körülmények között végrehajt. Az első a .profile, amelyet bejelentkezéskor hajt végre a rendszer, a másik pedig a .bashrc, amelyet minden bash indításkor (tehát akkor is, ha már bejelentkezünk és újabb shellt indítunk). A .profile-ban szokás például a PATH és más globális változók értékét saját ízlésünk szerint konfigurálni, a .bashrcben pedig például „alias”-okat definiálhatunk: „alias”-ok segítségével parancsoknak más neveket adhatunk, hosszú parancsoknak rövideket vagy nehezen megjegyezhető nevűeknek valami memorizálhatóbbat. DOS mániákusok például írhatják a következőt: [tanulo@barhacslinux tanulo]$ alias dir=’ls -l’
Ezután a „dir” parancs jelentése „ls -l” lesz. Az eddig (vagy előre) definiált alias-okat a paraméterek nélkül kiadott „alias” paranccsal nézhetjük meg, egy alias-t kitörölni pedig az „unalias alias_nev” paranccsal lehet. „Folytatható” alias-t (ahol az alias helyettesítése után az alias név után írt szavakat is továbbviszi a shell), az alias végére írt $* szimbólummal definiálhatunk.
41.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Folyamatkezelés a Unix/Linux rendszerben A folyamatok szerepe a rendszerben A Unix/Linux rendszerben minden tevékenység folyamatokhoz kötődik. Az operációs rendszer funkciói, a felhasználó parancsértelmezője, a különböző alkalmazások mind egy vagy több folyamat formájában futnak a rendszerben. A rendszer dinamikus működését a folyamatok biztosítják, a folyamatot egy lemezen található „statikus” program végrehajtás alatt lévő „dinamikus” példányának tekinthetjük4. A folyamatok ütemezését a rendszer végzi - az ütemezési politikába a felhasználóknak nem igazán szükséges beleszólniuk (elméletileg van rá lehetőség, de a gyakorlatban eléggé nagy hozzáértés kell hozzá, hogy ne ártsunk a ténykedésünkkel). A folyamatok kezelése meglehetősen egyszerű (sajnos túlzottan is az): minden folyamat egy szülőtől származik, és örökli szülőjének tulajdonságait. A kernelfolyamatokat a rendszer (kevés kivétellel) non-preemptiv módon ütemezi, míg a felhasználói folyamatok megszakíthatóak. A rendszer minden folyamatának van tulajdonosa (ez praktikusan az a személy, aki a folyamatot indította). Az operációs rendszer saját folyamatai általában root szinten futnak. Mivel egy személy több helyről is bejelentkezhet a rendszerbe, a folyamat tulajdonosának azonosítója még nem elég a folyamat egyértelmű azonosításához. A rendszer minden interaktívan indított folyamatánál tárolja, hogy melyik terminálról indították (ennek a fogalomnak a rendszer folyamatoknál, és az automatikusan indított folyamatoknál nincs értelme). Mivel a terminálazonosító egyedi, ennek alapján lehet megtalálni egy felhasználó adott login session-beli folyamatait. Előtér- és háttérfolyamatok A Unix/Linux rendszerben a folyamatokat (durva közelítéssel) két csoportba sorolhatjuk: - előtérfolyamatok - interaktív folyamatok, amelyek egy terminálon keresztül kommunikálnak a felhasználókkal. A felhasználók általában a nevük begépelésével indítják el. - háttérfolyamatok - háttérben futnak, nem kötődnek egyetlen terminálhoz sem. Mindig van tulajdonosuk, de futásukhoz nem szükséges, hogy a tulajdonos éppen be legyen lépve. Háttérben indítani egy folyamatot a & jellel lehet. Ha például a következő parancsot adjuk ki: [tanulo@barhacslinux tanulo]$ less /etc/passwd &
a program a háttérben fog elindulni. Ez azt jelenti, hogy amíg nincs szükség a terminál használatára, addig észrevétlenül fut, amint azonban konzolműveletet hajtana végre azonnal leáll (felfüggesztődik - stopped állapotba kerül). Ebben az esetben például a less (mivel a terminálra írna), az indulása után azonnal leáll. 4
Mára a UNIX rendszerekben is elterjedtek a thread-ek, de az egyszerűség kedvéért ettől most eltekintünk. 42.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Processzek és felhasználók A felhasználó programja nevének begépelésével kezdeményezheti a program indítását. A rendszer betölti a memóriába a programot, és elindítja azt, ennek hatására a statikus kódból dinamikus folyamat képződik. A rendszerben futó összes folyamat bír egy egyedi azonosító számmal (pid), ez a rendszer belső táblázatainak az azonosítója. Ha egy folyamattal valamit kívánunk tenni, ezen az azonosítón keresztül férhetünk hozzá. Mint már említettük, Unix/Linux alatt egyetlen felhasználói folyamat sem tudja megsérteni a rendszer integritását - de sokszor programhiba (végtelen ciklusok), vagy egyéb problémák (pl. megszakadt X.25 kapcsolat) miatt szükséges lehet a folyamatok „erőszakos” eltávolítása a rendszerből. A felhasználók védelme miatt a folyamatokhoz csak a tulajdonosuk és a root férhetnek hozzá (így egy „elkóborolt” felhasználói program nem sértheti meg más felhasználó munkáját). Folyamatok és prioritások A Unix/Linux rendszerben egy folyamatnak kétféle prioritása van, egy rendszer és egy felhasználói (nice). A rendszer (system) prioritást a folyamat indításakor a rendszer határozza meg, a fontosság és az erőforrás foglalás függvényében. Ez a prioritás folyamatosan nő, ha a folyamat várakozik, a folyamat öregszik (aging). A felhasználói (nice) prioritás az, amit a felhasználó is megváltoztathat. A „normál” felhasználók csak az általuk indított folyamatok nice prioritását állíthatják be, azt is csak csökkenthetik. A rendszergazda (root) bármely folyamat prioritását beállíthatja, akár növelheti is. A prioritás számozása fordított: a legnagyobb prioritás a –20, a legkisebb a 19-es. Öregedés Az ütemező egy olyan algoritmus szerint működik, melyben minden folyamat rendelkezik egy bizonyos számú kredit ponttal, és az a folyamat indulhat, amelynek a pontszáma a legmagasabb. A rendszer órája által periodikusan indított rendszerfolyamat az éppen futó folyamat pontszámát eggyel csökkenti, a futó folyamatok tehát öregszenek. Mikor egy folyamat pontszáma eléri a nullát, felfüggesztésre kerül. Ha már egy futóképes folyamat sincs a rendszerben (azaz, minden folyamat felfüggesztett vagy várakozó állapotban van), egy olyan folyamat indul el, amely újra ellátja a folyamatokat kredit pontokkal (recrediting). A pontszámok az alábbi algoritmus szerint képződnek: Új kredit = régi kredit/2 + prioritás
Az algoritmus tehát egyszerre veszi figyelembe a folyamat előéletét és fontosságát. Ha egy folyamat sokat fut, hamar kimeríti a készleteit, és felfüggesztésre kerül, a sokat várakozó folyamatok pedig szép csendben gyűjtögetik a pontjaikat, és amikor bekövetkezik a várt esemény, magas pontszámmal indulhatnak újra.
43.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Folyamatkezelő parancsok ps A ps program az aktuális folyamatok pillanatfelvételét adja. Amennyiben az állapotok ismétlődő frissítésére van szükség, a top használata javasolt. A parancs formája: ps [lax] A parancs paraméterei: nincsenek. A parancs kapcsolói: - l: Hosszú (long) formátum használata. - a: A többi felhasználó processzeit is kijelzi. - x: A terminálhoz nem csatlakozó processzeket is kijelzi. Megjegyzés: A parancssori kapcsolóknak nem ajánlott `-' karakterrel kezdődniük, mivel a jövőben, ez a Unix98-standard parancssori argumentumok jelölésére lesz fenntartva, ezért `-' nélkül kell az aktuális ``kiterjesztett BSD'' stílusú argumentumokat jelölni. Példa: [tanulo@barhacslinux tanulo]$ ps PID TTY TIME CMD 11717 pts/3 00:00:00 bash 11970 pts/3 00:00:00 ps [tanulo@barhacslinux tanulo]$
nice Program indítása előre beállított nice prioritással. A parancs formája: nice [prioritás] parancs A parancs paraméterei: -Parancs: az a program amit indítani akarunk. A parancs kapcsolói: -prioritás: az előre megadott nice prioritás. Megjegyzés: nincs. top Kilistázza a futó folyamatok állapotát, előre beállított időközönkénti frissítéssel. A parancs formája: top [-d frissítési időköz] A parancs paraméterei: nincsenek. A parancs kapcsolói: -d: az itt, másodpercben megadott frissítési időközzel fogja frissíteni a folyamatok állapotáról megjelenített táblázatot a parancs. Megjegyzés: A legfontosabb oszlopok jelentése: - PID: folyamatazonosító. - USER: folyamattulajdonos felhasználó. - PRI: teljes prioritási szint. - NI: nice prioritás. - SIZE: a folyamat memóriában elfoglalt mérete. - STAT: a folyamat állapota. - %CPU: processzor-erőforrás felhasználás százalékban. - %MEM: memória-erőforrás felhasználás százalékban. - TIME: teljes eddigi futásidő. - COMMAND: a folyamatot indító parancs.
44.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux tanulo]$ top 2:42pm up 2:44, 2 users, load average: 0,00, 0,00, 0,00 68 processes: 65 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 4,3% user, 2,9% system, 0,0% nice, 92,6% idle Mem: 125496K av, 123752K used, 1744K free, 0K shrd, 4576K buff Swap: 136072K av, 29664K used, 106408K free 73080K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM 1127 root 16 0 43988 41M 1452 R 3,3 33,6 11974 tanulo 18 0 7712 7440 6628 R 2,9 5,9 1238 tanulo 9 0 5288 4612 3404 S 0,3 3,6 11993 tanulo 12 0 1076 1076 852 R 0,3 0,8 1 root 9 0 120 76 76 S 0,0 0,0 2 root 9 0 0 0 0 SW 0,0 0,0 3 root 9 0 0 0 0 SW 0,0 0,0 4 root 9 0 0 0 0 SW 0,0 0,0 5 root 9 0 0 0 0 SW 0,0 0,0 6 root 9 0 0 0 0 SW 0,0 0,0 7 root 9 0 0 0 0 SW 0,0 0,0 8 root -1 -20 0 0 0 SW< 0,0 0,0 394 root 9 0 0 0 0 SW 0,0 0,0 [tanulo@barhacslinux tanulo]$
TIME 1:41 0:00 0:30 0:00 0:04 0:00 2:14 0:03 0:00 0:00 0:00 0:00 0:00
COMMAND X kdeinit kdeinit top init keventd kapm-idled kswapd kreclaimd bdflush kupdated mdrecoveryd khubd
kill Megállít egy folyamatot. A parancs formája: kill [-s signal -pl] pid A parancs paraméterei: -Pid: a megállítandó folyamat azonosítója. A parancs kapcsolói: - s: megadja a küldendő szignált. - p: csak kiírja a PID értékeket, de nem küldi el a jelzést. - l: listát ír ki a lehetséges szignálokról. Megjegyzés: A kill program a megadott jelzést (signal) küldi a megadott processznek. Amennyiben nem adunk meg jelzést, a TERM jelet küldi el. Ez megöli azokat a processzeket, amelyek nem utasítják el ezt a jelzést. A legfontosabb szignálok: - TERM: cache-elhető és átugorható, vagyis ha egy folyamat úgy látja, hogy a leállása veszélyezteti a rendszer stabilitását, a leállási folyamatot felfüggesztheti, vagy figyelmen kívül hagyhatja. - QUIT: cache-elhető, nem átugorható. A leállítási folyamatot felfüggesztheti a processz, amikor azonban erre mód nyílik, egy szabályszerű kiléptetési műveletsorral lezáródik a folyamat munkája. - ABRT: cache-elhető, nem átugorható. A leállítási folyamatot felfüggesztheti a processz, amikor azonban erre mód nyílik, a szabályszerű kiléptetési műveletsor nélkül lezáródik a folyamat munkája. - KILL: nem cache-elhető, nem átugorható. A folyamat munkája a szignál kiadása után megszakad, a folyamat leáll.
45.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Példa: [tanulo@barhacslinux tanulo]$ ps PID TTY TIME CMD 11717 pts/3 00:00:00 bash 11970 pts/3 00:00:00 ps [tanulo@barhacslinux tanulo]$ kill 11717 [tanulo@barhacslinux tanulo]$ kill -KILL 11717 Welcome to Linux 2.4.18. barhacslinux login:
Szövegszerkesztés Unix/Linux rendszerben Szövegszerkesztés alatt betűkből, írásjelekből és számokból álló állományok begépelését és átalakítását értjük. Fontos figyelembe vennünk, hogy a szövegszerkesztés folyamata nem tartalmazza a szöveg tipográfiai megmunkálását, vagyis a nyomdai termék külalakjának megtervezését és elkészítését. Leginkább úgy lehetséges megérteni a szövegszerkesztés és kiadványszerkesztés közti különbséget, ha figyelembe vesszük, hogy a szövegszerkesztés a szerző szándékát hivatott kifejezni, míg a kiadványszerkesztés a nyomdász, a tipográfus feladata. Ma már olyan nagy a számítógépek teljesítménye, hogy képesek a szövegszerkesztést és a kiadvány tipográfiai tervezését egyszerre - egyetlen kombinált program keretében - lehetővé tenni a felhasználó számára, de a szövegszerkesztő programok ideje azért még nem járt le. Több esetben is hasznos lehet az olyan program, amely a szövegszerkesztésen túl nem vállal más feladatot. Sokszor olyan szöveget készítünk, amely soha nem kerül nyomdába. Programokat készíthetünk, adatokat vihetünk be nyilvántartóprogramok részére, gépi úton tovább feldolgozott szöveges állományt hozhatunk létre a szövegszerkesztővel anélkül, hogy valaha is papírra kívánnánk vinni a kész állományt. Sok esetben nem vállalja a szerző, hogy tipográfiai feladatokat is elvégezzen, ez esetben a szövegszerkesztő program számára ideális, mivel sokkal egyszerűbb kezelni, mint egy bonyolult tördelőprogramot. Sok professzionális tördelőprogram létezik, amely egyáltalán nem alkalmas arra, hogy szövegszerkesztőként használjuk. Ilyenkor kedvenc szövegszerkesztőnkkel dolgozhatunk a szöveg elkészítésekor. Igen sok szövegszerkesztő használható Linux alatt, némelyek pl. a programírásnál használhatóbbak, mások a rugalmasságukkal tűnnek ki vagy éppen az egyszerű kezelhetőséggel nyerik el tetszésünket. Aki sokat - és sokféle dologra - használja a Linuxot, az általában több szövegszerkesztő programot használ rutinosan, a feladat jellegéhez - és a környezet adta lehetőségekhez - igazodva választ közülük az adott pillanatban.
46.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Megteheti, hiszen a szövegszerkesztők az adatok tekintetében egymással felcserélhetőek, nincsen saját állományformátumuk. Amit az egyik szövegszerkesztővel elkezdtünk, azt egy másikkal folytathatjuk. Minden Linuxos szövegszerkesztő az ASCII (American Standard Code for Information Interchange) kódolást használja. E kódolási forma igen régi, a Unix születésekor már ismeretes volt. Az ASCII kódolás 128 jel pontos leírására alkalmas, amely elegendő az angol nagy- és kisbetűk, az írásjelek, a számok és jónéhány különleges jel egyértelmű reprodukálására. A későbbiekben bevezetett ún. kiterjesztett ASCII kódolás további jeleket vezetett be, így már - 256 féle jellel - az angol nyelvben nem használatos nemzeti karaktereket is képes volt kezelni. Sajnos a kiterjesztett ASCII már koránt sem annyira egyértelműen értelmezett szabvány, ezért az egyes operációs rendszerek között zavaró ellentmondások léptek fel. A kiterjesztett ASCII használatakor - pl. magyar nyelven írt szöveg esetében kódkonverzióra van szükség, ha a szöveget más operációs rendszerre vi Az első szövegszerkesztő, amelyet ismertetünk, a vi, melynek nevét hagyományosan betűzve ejtjük ki az angol fonetikai szabályok szerint. A vi rövidítés, amely a visual editor (látható szövegszerkesztő) elnevezésből ered, nevét onnan kapta, hogy a vi volt az első olyan UNIX alapú szövegszerkesztő, amely a szerkesztett szöveg több sorát is megmutatta a munka közben A vi minden Unix alapú rendszeren megtalálható, ezért ha ismerjük, akkor nem érhet meglepetés - bárhová sodorjon sorsunk. A vi lassú telefonvonalakra készült, ezért kiválóan alkalmas távoli gépeken történő munkára, így a segítségével lehetségessé válik hosszú dokumentumok módosítása akkor is, ha az egy másik kontinensen található s csak egy telefonvonal áll a rendelkezésünkre. A vi tervezésénél figyelembe vették, hogy a kereskedelemben kapható számítógép billentyűk a legváltozatosabb formát mutatják. Használatakor, pl. akkor sem kell kétségbe esnünk, ha a billentyűzet egyáltalán nem tartalmazza azt a nyomógombot, amellyel a hibásan begépelt betűket szoktuk kitörölni. A vi igen komplex módon is használható. Ha professzionálisan kezeljük hatékony eszközzé válik kezünkben. A vi a vi parancs begépelésével indítható s a parancssorban mindjárt megadhatjuk a szerkeszteni kívánt állomány nevét is. Ekkor a vi elindul, s ha létezik a parancssorban beírt állomány, a képernyőre írja. Amennyiben a beírt néven nem található állomány, akkor üres szöveges állományt kezd - amelyet nem hoz létre, csak akkor ha parancsot kap rá az első mentés során. A vi leállítása - most még magyarázat nélkül - kétféle módon történhet. Ha menteni kívánunk, akkor le kell ütnünk kétszer az Esc billentyűt, aztán begépelnünk a :wq betűket, majd lenyomni az Entert. Ha a mentésről le kívánunk mondani, akkor az Esc kétszeri lenyomását kövesse a :q! begépelése, majd az Enter lenyomása.
47.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A vi többféle állapottal rendelkezik, amelyek meghatározzák, hogy a leütött billentyű milyen változást okoz a szövegeken. A legelemibb munka - egyetlen betű beszúrása egy meglévő szövegbe - sem képzelhető el a vi három alapvető állapotának megismerése nélkül, ezért fontos, hogy megértsük ezeket. A három alapvető állapot a következő: - Normál mód: A vi indítás után normál módban van. Ilyenkor a szöveg a képernyőn látszik, a kurzorral a szövegben mozoghatunk, szöveget azonban begépelni nem tudunk. Normál állapotban ugyanis a leütött betűket a vi parancsként értelmezi, amelyek a szövegben változást idéznek elő - pl. kitörölhetünk egy sort vagy egy betűt a segítségükkel. - Beszúrás mód: Ebben az állapotban írhatunk be szöveget az állományba, vagyis ekkor működik a vi írógépként. - Parancs mód: Ebben az állapotában a vi az alsó sorban parancsot vár, amely általában több betűből áll. A parancs állapotban menthetjük pl. az állományunkat vagy léphetünk ki a vi -ból. A vi indításkor normál állapotba kerül - gépelni tehát nem lehet ilyenkor. Ha gépelni szeretnénk, akkor meg kell nyomnunk az i betűt, ez szolgál ugyanis a beszúrás állapotba váltásra - normál állapotból. Ha a beszúrás állapotba lépünk, akkor hacsak nincs kikapcsolva ez a szolgáltatás - az alsó sorban megjelenik a -INSERTszöveg, jelezve, hogy a gépelést megkezdhetjük. Beszúrás állapotból visszatérni a normál állapothoz az Esc billentyű lenyomásával lehet. Ekkor az alsó sorból eltűnik az -INSERT- felirat jelezve, hogy visszatértünk a normál állapotba. Ha a billentyűzeten nincsen Esc feliratú nyomógomb, akkor használhatjuk a Ctrl+[ kombinációt helyette. Parancs állapotba a normál állapotból juthatunk olymódon, hogy kettőspontot gépelünk. Ekkor a kurzor a képernyő aljára ugrik s a vi parancsot vár. Amikor a parancs begépelése után lenyomjuk az Enter billentyűt, a vi a parancsot végrehajtja és automatikusan visszatér a normál állapothoz. Ha a parancsot - amit parancs állapotban az alsó sorba gépeltünk be - nem akarjuk végrehajtani, hanem vissza akarunk térni a normál állapotba, kétszer egymás után le kell nyomnunk az Esc billentyűt (vagy az Esc-et helyettesítő Ctrl+[ kombinációt). Normál mód Normál állapotban, a szövegben mozoghatunk, sorokat, szavakat vagy betűket törölhetünk. A normál állapotban használható billentyűparancsok egyszerű betűkből és írásjelekből állnak, így alkalmazhatjuk őket akkor is, ha a billentyűzeten nem találhatóak vagy nem működnek a különleges billentyűk. Különösen hasznos ez azért, mert a Unix világban igen sokfajta számítógép billentyűzet használható, amelyek között sajnos sokszor fellépnek inkompatibilitások. Ha egy távoli gépre belépve - a beállítás hiányosságai miatt - a Delete, Backspace, Home stb. billentyűk nem működnek megfelelően, a vi normál állapotát biztosan használhatjuk.
48.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
A legfontosabb műveletek - amelyeket normál állapotban elvégezhetünk -, a következők: - Mozgás betűnként: A betűnként való mozgásra a h, k, l, j betűk lenyomása alkalmas. A h betű balra, az l jobbra mozgat, míg a k betűvel felfelé a j betűvel pedig lefelé haladhatunk. - Mozgás szavanként: A b betűvel a szöveg eleje felé, az e betűvel pedig a vége felé haladhatunk szavanként. - Ugrás sorban: A sor elejére a 0 megnyomásával, végére pedig a $ jel begépelésével ugorhatunk. - Görgetés: A képernyőn található szöveget felfelé és lefelé görgethetjük soronként. A Ctrl+y kombinációval a szöveg eleje felé haladhatunk, míg a Ctrl+e segítségével a vége felé. - Törlés betűnként: A kurzor felett található karaktert az x betű lenyomásával törölhetjük. Ha lenyomjuk az r betűt, akkor a vi a kurzor felett található karaktert kicseréli arra a betűre, amelyet az r betű után nyomunk le. - Törlés soronként: Egész sort a d betű kétszeri lenyomásával törölhetünk. - Visszavonás: Ha valamely változtatást vissza szeretnénk vonni, akkor az u betűt kell lenyomnunk. A vi lehetőséget ad több változtatás - fordított sorrendben történő - visszavonására az u betű többszöri lenyomásával. A visszavonást is vissza lehet vonni, ha úgy döntünk, hogy a változtatást mégis érvényesíteni akarjuk, akkor a Ctrl+r kombinációt kell lenyomnunk. - Újrarajzolás: Ha valamely üzenet a képernyőn látható szöveget összezavarta, akkor használhatjuk a Ctrl+l kombinációt a képernyő újrarajzolására. - Beszúrás: Az i betű megnyomásával kapcsolhatunk át beszúrás üzemmódba, amely szöveg begépelésére szolgál. - Kijelölés: A kijelölést normál módban kell megkezdenünk. A kurzorral a kijelölni kívánt szöveg elejére kell állnunk és a v betű megnyomásával megkezdenünk a kijelölést. Ha ezek után a mozgató parancsokkal a kurzort a kijelölendő szövegrészlet végére visszük, a kijelölést elvégezhetjük. Megkezdett kijelölést félbeszakítani az Esc gomb megnyomásával lehet. - Blokkos kijelölés: Blokkos kijelölésre a Ctrl+v kombinációval van lehetőségünk. Ekkor a kijelölt szöveg a képernyőn található téglalap lehet. - Ctrl+w n: Új ablak nyitása. - Ctrl+w c: Az aktuális ablak - amelyben a kurzor éppen tartózkodik - bezárása. - Ctr+w w: A következő ablakra ugrás. E parancs segítségével juttathatjuk át a kurzort másik ablakba. - Ctrl+w +: Az aktuális ablak méretének növelése. - Ctrl+w -: Az aktuális ablak méretének csökkentése. - Ctrl+w =: Az ablakok méretének elrendezése olymódon, hogy minden ablak egyenlő mértékben osztozzék a képernyőn. Beszúrás mód Amikor normál módban megnyomjuk az i billentyűt, a vi átkerül beszúrás állapotba. Ez az állapot szolgál a gépelésre, vagyis ilyenkor a vi írógépszerűen viselkedik. A beszúrás állapotban is lehetőségünk van általában a szövegben való haladásra és javításra a különféle különleges billentyűkkel. Ha ezek a billentyűk nem a várt hatást produkálják, esetleg egyáltalán semmi változást nem produkálnak, kénytelenek vagyunk a normál mód betűparancsait használni. Beszúrás üzemmódból normál módba az Esc megnyomásával juthatunk. 49.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Parancs mód Parancs mód használatakor a vi lehetőséget ad az alsó sorban komplex parancsok begépelésére, amelyek általában az állománykezelő műveletekre adnak módot. Parancs módba normál módból a : megnyomásával juthatunk. Amikor a parancs begépelését befejeztük és azt az Enter gombbal végrehajtottuk, automatikusan visszakerülünk normál módba. Ha a parancs végrehajtása nélkül szeretnénk visszajutni normál módba, az Esc gombot kell kétszer egymás után lenyomnunk. A legfontosabb parancsok: - x: Az állomány mentése - ha az módosítva lett -, majd kilépés. - w: Az állomány mentése. - w nev: Az állomány mentése a nev néven. - w!: Az állomány erőltetett mentése. Akkor használhatjuk, ha az állomány írásvédett, de egyébként a mentése lehetséges. - wa: Az összes módosított állomány mentése. - wq: Az állomány mentése és kilépés. - q: Kilépés. - q!: Kilépés mentés nélkül. - help: Az angol nyelvű dokumentáció megnyitása egy új ablakban. - ascii: A kurzor felett található karakter kódját írja ki az alsó sorban - az ASCII kódolás szerint. mcedit A népszerű karakteres állománykezelő rendelkezik egy szövegszerkesztővel, amely igen hatékony és kézreálló eszköz, segítségével szinte mindent meg lehet oldani, amit egyáltalán egy szövegszerkesztő magára vállalhat. A program neve mcedit. Az mcedit a Midnight Commanderből az F4 billentyű lenyomásával indítható, amikor is azonnal szerkeszthetjük azt a szöveget, amelyen az indítás pillanatában a Commander vízszintes sávja áll. Kilépés előtt általában érdemes menteni a változtatott szöveget, erre az F2 billentyű szolgál, amint az az alsó sorban látható emlékeztetőn olvasható. A mentés után kiléphetünk az F10 vagy az Esc billentyű megnyomásával. Ha éppen nem fut a Midnight Commander akkor a szerkesztőt az mcedit paranccsal indíthatjuk, amely parancs után mindjárt megadhatjuk a szerkeszteni kívánt állomány nevét.
50.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Az mcedit alapesetben nem fogadja el a magyar ékezetes karaktereket és azokat nem is jelzi a képernyőn. A következő lépésekkel kell beállítanunk a programot: 1. Indítsuk el a Midnight Commandert az mc paranccsal. 2. Az F9 nyomógomb lenyomásával hozzuk elő a felső menüsort, majd a kurzormozgató billentyűkkel és az Enter-rel válasszuk a Beállítások menü Képernyőbitek menüpontját. 3. Most válasszuk ki a 8 bites kimenet és a 8 bites bevitel pontokat. 4. A beállítások menü Beállítások mentése menüpontjával mentsük el ezeket a beállításokat, hogy a legközelebbi indításkor már ne kelljen ezzel a beállítással bajlódni. Az mcedit rendelkezik néhány egyszerű, de igen hasznos eszközzel, melyek közül elsőre a blokkok mozgatásának és másolásának lehetőségét vesszük szemügyre. Ha egy egész szövegblokkot kívánunk törölni, másolni vagy áthelyezni, akkor mindenekelőtt ki kell jelölnünk az adott szövegrészt. Erre a következő eszközök állnak rendelkezésünkre: Az egérrel egyszerűen befesthetjük a kijelölni kívánt szöveget úgy, hogy a részlet elejétől a végéig húzzuk az egeret, és közben nyomva tartjuk a bal oldali egérgombot. Ha a kurzormozgató gombokkal haladunk és eközben nyomva tartjuk a Shift billentyűt, akkor az előző ponttal mindenben megegyező kijelölést kaphatunk. Hosszabb szövegrészlet kijelölésére nyílik módunk az F3 funkcióbillentyűvel. Ha a szöveg elején egyszer lenyomjuk az F3 gombot, akkor szabadon mozoghatunk a szövegben - csak a kijelölendő blokk végén kell újra lenyomni az F3 -at. Ha van kijelölt szöveg, akkor azzal a következő műveleteket végezhetjük el: - Az F8 billentyűvel a szöveget törölhetjük. - A kurzorral egy új helyre mehetünk és ott: - Az F5 billentyűt lenyomva egy másolatot készíthetünk a kijelölt szövegről a kurzor helyére. - Az F6 billentyűvel áttehetjük a kijelölt szöveget a kurzor helyére ilyenkor az eredeti helyről törlődik a blokk. - A Ctrl+Insert billentyűzetkombinációval egy másolatot készíthetünk a kijelölt szövegről a vágólapra. Ezen utóbbi művelet - a vágólapra másolás - egy roppant hasznos eszköz. A vágólapról a Shift+Insert kombinációval bármikor bemásolhatjuk a szövegrészletet, amit elmentettünk, amíg csak egy újabb Ctr+Insert lenyomásával felül nem írjuk a vágólap tartalmát. Ha tehát több példányban futtatjuk az mcedit-et, akkor az egyik példányban vágólapra mentett szövegrészletet egyetlen gombnyomással bemásolhatjuk egy másik példányba is, akkor is, ha abban egy teljesen más állományt szerkesztünk. Ezzel igen hatékonyan tudunk részleteket másolni állományok közt. Ráadásul még csak az sem kell, hogy a két szövegszerkesztő egy időben fusson, a vágólap ugyanis akár évekig türelmesen tárolja tartalmát. Sajnos az mcedit vágólapja nem kompatibilis az egyéb szövegszerkesztőkkel így oda bemásolni nem igazán lehet a tartalmát. 51.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Az mcedit minden funkciója megtalálható a menürendszerében, amelyet az F9 nyomógombbal érhetünk el. Sok apróság megtalálható itt, főképpen olyan eszközök, amelyek már más szövegszerkesztőkből ismertek lehetnek. Ilyen a keresés és csere funkció, amellyel hosszú szövegeket alakíthatunk automatikusan, a Mentés új néven, amellyel a megnyitott - és esetleg módosított - állományról készíthetünk másolatot anélkül, hogy az eredetiben kárt tennénk. Található itt néhány beállítás is a Beállítások menüben és néhány egészen fejlett és szokatlan eszköz is, amilyen az elektronikus levélben való továbbítás, a makrórögzítő, az Angol nyelvű helyesírás-ellenőrző. Mindazonáltal az mcedit használata olyan egyszerű, hogy valószínűleg senkinek nem okoz gondot a használata. Az mcedit képes jónéhány gépi nyelv felismerésére és a szintaktikai szabályoknak megfelelő kiszínezésére. Ez a szolgáltatás, a szintaxiskiemelés nagyon hatékonyan segítheti munkánkat, mondhatnánk elengedhetetlen. Ha egy könyvet írunk a LaTeX segítségével, egy egyszerű weblapot készítünk html nyelven, esetleg egy kis pársoros programocskát készítünk megkönnyítendő a munkánkat, mindig be kell tartanunk valamely gépi nyelv helyesírási szabályait, és valószínűleg tévedünk is. A szintaktikai szabályok szerinti színezés azonban nyomban láthatóvá teszi a szabálytalanságot, az elgépelést. Egy zárójel, amelynek nincsen párja, egy idézőjel, amely rossz helyen van azonnal látszik, nem kell fáradtságos munkával kézzel keresgélnünk a hibákat. Kissé szélsőséges módon azt is mondhatnánk, hogy amíg nem használunk szintaktikus színezést, felesleges színes monitort vásárolnunk. Az mcedit igen sok nyelvnek ismeri az alapjait és képes kiszínezni az állományokat munka közben. Nem is kell semmit tennünk, hiszen automatikusan felismeri, hogy milyen nyelven készítjük dokumentumunkat. A szintaktikus színezéshez hasonló eszköz a zárójelek párosítása. A szövegben bármely zárójelre állva a kurzorral - legyen az sima-, kapcsos- vagy szögletes zárójel - a párját azonnal sárgára festi a program. Így kapunk egy piciny esélyt, hogy a bonyolult képletekben eligazodjuk és megtaláljuk a hiányzó zárójelet.
Rendszeradminisztrációs parancsok useradd, groupadd - useradd: létrehoz egy új felhasználót, vagy frissíti az alapértelmezett ,,új felhasználó'' információkat. - groupadd: létrehoz egy új felhasználói csoportot, vagy frissíti az alapértelmezett ,,új csoport" információkat. usermod, groupmod - usermod: módosítja egy felhasználó fiókját. - groupmod: módosítja egy csoport fiókját.
52.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
userdel, groupdel - userdel: töröl egy felhasználói fiókot. - groupdel: töröl egy csoport fiókot. groups Kiírja a jelenlegi csoportazonosító neveket. A parancs formája: groups [felhasználó] A parancs paraméterei: -Felhasználó: az a felhasználó, amelyiknek a csoportjaira kíváncsiak vagyunk. Ha nem adjuk meg a paramétert, az aktuálisan bejelentkezett felhasználó csoportjait írja ki. A parancs kapcsolói: nincsenek. Megjegyzés: nincs. Példa: [tanulo@barhacslinux tanulo]$ groups tanulo cdrom usb cdwriter audio xgrp [tanulo@barhacslinux tanulo]$
passwd A felhasználók jelszavának megváltoztatását végzi. A parancs formája: passwd [user] A parancs paraméterei: -User: a felhasználó, akinek a jelszavát meg akarjuk változtatni. Ilyen formában csak a rendszergazda használhatja. A parancs kapcsolói: nincsenek. Megjegyzés: A felhasználók csak a saját jelszavukat változtathatják meg, a rendszergazda bárkiét. A csoportok jelszavát az adott csoport adminisztrátora változtathatja meg. A passwd ezen kívül használható a felhasználói adatok, mint pl. az igazi név, a login shell, vagy a jelszavak "szavatossági idejének" megváltoztatására is. A felhasználónak először a régi jelszavát kell beírnia, ha már volt neki. Ezután ennek a jelszónak a kódolt változatát összehasonlítja a tárolt jelszóval. A megfelelő jelszó beírására a felhasználónak csak egy lehetősége van. A rendszergazda átugorhatja ezt a lépést, így az elfelejtett jelszavak is megváltoztathatóak. Miután a felhasználó beírta a jelszavát, a passwd megvizsgálja, hogyan rendelkezett a rendszergazda a jelszavak "szavatossági idejéről". Amennyiben az idő nem alkalmas a jelszó megváltoztatására, passwd kilép minden változtatás nélkül. Ezek után a program bekéri a felhasználótól az új jelszót, majd megvizsgálja hogy elég bonyolult-e. Általános szabályként elmondható, hogy a jelszavak jók, ha 6-8 karakterből állnak, és a következő jelkészletekből tartalmaz elemeket: - Az ABC kis betűi - Az ABC nagy betűi - Számok 0 és 9 között - Írásjelek Ha a jelszó elfogadható, a passwd a biztonság kedvéért még egyszer bekéri az új jelszót, és csak akkor hajtja végre a változtatást, ha a két bevitt jelszó megegyezik.
53.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
Hálózati parancsok mail Egyszerű konzolos felületű levelező kliens. A parancs formája: mail [email cím] A parancs paraméterei: -Email cím: az az elektronikus levelezési cím, ahova levelet szeretnénk küldeni. A parancs kapcsolói: nincsenek. Megjegyzés: A levélírást befejezni a Ctrl+D billentyűkombinációval lehet. Példa: [tanulo@barhacslinux tanulo]$ mail No mail for tanulo [tanulo@barhacslinux tanulo]$ mail [email protected] Subject: proba Ez egy proba ^D Cc: [email protected] send-mail: success. [tanulo@barhacslinux tanulo]$
talk Beszélgetés kezdeményezése egy másik felhasználóval. A parancs formája: talk személy [tty] A parancs paraméterei: - Személy: ha a saját gépünkön levő személlyel szeretnénk beszélgetni, akkor a személy paraméter egyszerűen az illető személy login neve legyen. Ha egy másik host-on levő felhasználóval szeretnénk beszélgetni, akkor a személynek a következő formátumot kell használni: username@gépnév. - Tty: az a terminál, ahova a beszélgetőtársunk be van jelentkezve. A parancs kapcsolói: nincsenek. Megjegyzés: Ha mi hívunk először, a talk program a következő üzenetet küldi: Message from TalkDaemon@ő_gépe... talk: connection requested by mi_nevünk@mi_gépünk. talk: respond with: talk mi_nevünk@mi_gépünk
annak a felhasználónak, akivel beszélgetni szeretnénk. Ekkor a címzettnek a következő parancs begépelésével kell válaszolnia: talk mi_nevünk@mi_gépünk
Teljesen mindegy, hogy a címzett melyik gépről válaszol, amennyiben az Ő loginneve ugyanaz az adott gépen is. Amint a kommunikáció engedélyezve lett, a benne résztvevő két felhasználó egyszerre gépelheti üzenetét, amely üzenetek két egymástól elválasztott ablakban jelennek meg a képernyőn. A CTRL+L `^L' billentyűkombináció a képernyő újrarajzolását eredményezi, melynek során az erase, kill, word kill karakterek normálisan viselkednek. Kilépéshez egyszerűen be kell írni az interrupt karakterünket, a talk ezután a kurzort a képernyő aljára mozgatja és visszaállítja a terminál eredeti helyzetét. Példa: [tanulo@barhacslinux tanulo]$ talk [email protected] [No connection yet]
54.
Barhács OktatóKözpont
Linux rendszergazdai modul - 2. fejezet
write Üzenet küldése egy másik felhasználónak. A parancs formája: talk személy [tty] A parancs paraméterei: - -Személy: ha a saját gépünkön levő személynek szeretnénk üzenetet küldeni, akkor a személy paraméter egyszerűen az illető személy login neve legyen. Ha egy másik host-on levő felhasználónak szeretnénk üzenetet küldeni, akkor a személynek a következő formátumot kell használni: username@gépnév. - -Tty: az a terminál, ahova az üzenet címzettje be van jelentkezve. A parancs kapcsolói: nincsenek. Megjegyzés: A write lehetővé teszi a többi felhasználóval való kommunikációt úgy, hogy az általunk beírt sorokat megjeleníti az ő termináljukon. Amikor elindítjuk a write parancsot, a felhasználó, akinek írunk, a következő üzenetet kapja: Message from yourname@yourhost on yourtty at hh:mm ...
Amit ezek után beírunk, az a megadott felhasználó terminálján fog megjelenni. Ha válaszolni akar, neki is el kell indítania a write parancsot. Ha kész vagy, üsd le a sor vége vagy a megszakító karaktert. A másik felhasználó egy `EOF' üzenetet fog látni, ami jelzi számára, hogy a társalgásnak vége. Példa: [tanulo@barhacslinux tanulo]$ write jozsi tty2 Hello write: jozsi is not logged in on tty2. [tanulo@barhacslinux tanulo]$
55.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A TCP/IP protokollcsomag Mi is az a TCP/IP? A TCP/IP nem más, mint egy protokollkészlet, amelyet arra dolgoztak ki, hogy hálózatba kapcsolt számítógépek megoszthassák egymás között az erőforrásaikat. A fejlesztés az ARPAnet köré csoportosult kutatók munkája. Valószínűleg az ARPAnet a legismertebb TCP/IP alapú hálózat. Először tekintsük át az alapvető fogalmakat. Az itt leírt protokollkészlet legjobb elnevezése "Internet protokollverem" (vagy Internet protokollkészlet). A TCP és az IP ezen protokollok közül kettő. Mivel a protokollok közül a TCP és az IP a legismertebb, ezért az egész családra a TCP/IP vagy az IP/TCP kifejezést használják. Az Internet: hálózatok együttese. Hozzátartozik az Arpanet, az NSFnet, regionális hálózatok (mint a NYsernet), számos egyetem és kutatóintézet helyi hálózata, és egy sor katonai hálózat is. Az "Internet" kifejezés ezen hálózatoknak az összességét jelenti. Ennek egy része a DDN (Defense Data Network), amely az USA Védelmi Minisztériumának az irányítása alatt áll. Ide tartozik néhány kutatói hálózat (pl. Arpanet), illetve sokkal titkosabb katonai hálózatok is. (Mivel az Internet protokollok fejlesztéséhez való anyagi hozzájárulások nagy része DDN szervezetektől származik, ezért az Internet és a DDN kifejezések néha egybemosódni látszanak.) A fenti hálózatok mindegyike összeköttetésben áll egymással. A felhasználók bármelyikről bármelyikre küldhetnek üzenetet, kivéve azokat, ahol biztonsági vagy egyéb okokból megszorították a hozzáférést. Az Internet protokollokat leíró dokumentumok olyan hivatalos szabványok, amelyeket az Internetet használók közössége elfogadott és alkalmaz. Az USA Védelmi Minisztériuma 1987 tájékán kiadta a TCP/IP MILSPEC-féle definícióját. Mindegy, hogy minek nevezzük, a TCP/IP egy protokollcsalád. Jónéhány tagja biztosít sok alkalmazás számára szükséges alacsony szintű szolgálatokat. Ilyen például az IP, a TCP és az UDP. (Ezeket egy kicsit később részletesebben is megnézzük.) Mások olyan meghatározott feladatokat látnak el, mint például a számítógépek közötti állománytovábbítás, az üzenetküldés, vagy éppen egy adott gépre bejelentkezett felhasználók lekérdezése. A TCP/IP-t kezdetben főleg kis- és nagyszámítógépek (mainframe-ek) körében alkalmazták. Ezek a gépek saját merevlemezzel rendelkeztek, és általában teljesen önállóak voltak. Innen származtathatók a TCP/IP legfontosabb "hagyományos" szolgáltatásai: - Állománytovábbítás: Az állománytovábbítási protokoll (File Transfer Protocol, azaz FTP) segítségével bármely számítógépen lévő felhasználó bármelyik másik gépre küldhet és onnan beszerezhet állományokat. A biztonságot a felhasználónak a másik gépen érvényes azonosítója és a hozzátartozó jelszava jelenti. Gondoskodtak arról is, hogy a különböző karakterkészlettel, sorvégjellel stb. rendelkező számítógépek közötti állománytovábbítás is zavartalan legyen. Ez nem teljesen ugyanaz a dolog mint a hálózati állományrendszer (network file system) vagy a netbios protokoll, amelyekről később lesz szó.
56.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 3. fejezet
Az FTP egy olyan segédprogram, amelyet bármely időpontban futtatva, a hálózatba kapcsolt más számítógépeken lévő állományok elérhetővé válnak. Arra használják, hogy az adatállományt a saját rendszerre átmásolják. Távoli bejelentkezés: A hálózati terminál protokoll (TELNET) a felhasználók távoli gépekre való bejelentkezését kezeli. A távoli viszonyt (session) annak a gépnek a megadásával kell kezdeni, amelyhez csatlakozni szeretnénk. Attól kezdve bármit is gépelünk be, minden adat a megadott géphez kerül a viszony befejeztéig. Vegyük észre, hogy a felhasználó valójában még mindig a saját számítógépével kommunikál. A telnet program az, amelyik a futása alatt ezt láthatatlanná teszi a felhasználó előtt. Minden begépelt karakter közvetlenül a másik rendszerhez kerül. A távoli géppel meglévő kapcsolat nagyjából hasonlít egy modemes vonalhoz (dial-up connection). Ez azt jelenti, hogy a távoli rendszer először a bejelentkezést kéri, majd egy jelszót, ugyanúgy, ahogy ez egy modemes kapcsolat esetén történne. A kijelentkezéskor a telnet program kilép a vonalból, és ismét a saját gépünk kommunikál velünk. A telnet program kisszámítógépes megvalósításai általában egy elterjedt termináltípus emulációját is tartalmazzák. Számítógépes levelezés (mail): Ez a szolgáltatás arra való, hogy a felhasználók üzeneteket küldjenek egymásnak. Az emberek kezdetben csak egy-két számítógépet használtak. Ezeken a gépeken aztán mindenki a saját levelezési állományát tartotta fenn. Levél, illetve üzenet elküldésekor annyi történik, hogy az egyszerűen a címzett megfelelő állományához fűződik. Az olyan környezetben azonban, ahol mikroszámítógépeket használnak, ezzel gond van. A legalapvetőbb probléma abból fakad, hogy a mikroszámítógépek nem a legmegfelelőbbek üzenetek fogadására. Levél küldésekor a levelezést végző program kommunikációs csatornát akar megnyitni a címzett géppel. Ha ez a gép történetesen egy mikroszámítógép, akkor lehetséges, hogy éppen ki van kapcsolva, vagy esetleg nem az üzeneteket kezelő alkalmazást futtatja. Ennek a problémának a megoldására az üzeneteket kezelését egy állandóan futó kiszolgáló (mail server) végzi el. A mikrogépeken futó levelező program pedig egy felhasználói interfészt alkot a kiszolgáló felé.
A TCP/IP protokollok bármely megvalósításának tartalmaznia kell a fenti szolgáltatások mindegyikét. A mikroszámítógépes implementációkban a levelező rendszer nem mindig szerepel. Ezek a megszokott, hagyományos alkalmazások fontos szerepet játszanak a TCP/IP alapú hálózatokban. A hálózatokról alkotott elképzelés azonban folyamatosan változik. Manapság már sok helyen többfajta számítógép is működik egyszerre: mikroszámítógépek, munkaállomások, kisszámítógépek, illetve nagyteljesítményű számítógépek. Ezen gépek mindegyikét speciális feladatokra állították fel. Habár az emberek többsége még mindig csak egy meghatározott számítógépet használ a munkája során, ez a gép a kívánt szolgáltatások eléréséhez egyéb hálózati erőforrásokat vesz igénybe. Ez a modell hozta létre a "server/client" (kiszolgáló/ügyfél) alapú hálózati szolgáltatásokat. A kiszolgáló nem más mint egy meghatározott hálózati rendszer, amely a hálózat többi tagja részére biztosít bizonyos szolgáltatásokat. A kliens pedig az a rendszer, amely a szolgáltatást igénybe veszi. (Nem szükséges, hogy a kiszolgáló és a kliens különböző számítógépen legyen. Lehetnek például egyazon a számítógépen futó különböző programok is.) Az alábbiakban felsoroljuk a mai hálózati felépítésben jelenlévő tipikus kiszolgálókat. Ezek a szolgáltatások a TCP/IP keretén belül is megtalálhatók.
57.
Barhács OktatóKözpont
-
-
-
-
Linux rendszergazdai modul - 3. fejezet
Hálózati állományrendszer (network file system): Ennek a szolgáltatásnak a segítségével a hálózaton lévő állományokat az FTP módszerénél valamivel természetesebben lehet elérni. A hálózati állományrendszer azt az illúziót kelti, hogy az egyik rendszer lemezei vagy más egységei közvetlenül más rendszerekhez tartoznak. Nincs szükség külön hálózati alkalmazásra ahhoz, hogy az állományokhoz hozzá lehessen férni. Az adott számítógép egyszerűen úgy viselkedik, mintha plusz egységeket kapott volna. Ezek a "virtuális" meghajtók a másik rendszer lemezeit fogják jelenteni. Több hasznos oldala is van ennek a megközelítésnek. Egyfelől nagykapacitású meghajtókat lehet megosztani több számítógép között. Ennek nyilvánvaló takarékossági előnyei vannak. Másfelől egy csapásra megvalósul a közös állomány-hozzáférés. Könnyebbé válik a rendszer karbantartása, archiválása, mivel nem kell a különböző gépeken lévő másolatok időszerűsítésével és tartalékolásával foglalkozni. Sok cég kínál nagyteljesítményű, meghajtó nélküli számítógépeket. Ezeknek a gépeknek a működése nagy mértékben a különböző állomány-kiszolgálókhoz kapcsolt meghajtóktól függ. Távoli nyomtatás: Itt arról van szó, hogy a más számítógépekhez csatlakoztatott nyomtatókat sajátként tudjuk elérni. Távoli futtatás: A szolgáltatás megengedi programok másik gépen való végrehajtását. Ez akkor hasznos, ha a munka nagy részét kisebb teljesítményű gépen el lehet végezni, de néhány feladat nagyobb rendszer erőforrásait igényli. A távoli futtatásnak jónéhány fajtája létezik. Vannak olyanok, amelyek a parancsokat parancs szinten hajtják végre. (Az intelligensebb változatok olyan rendszert keresnek, amely szabad erőforrással rendelkezik). Léteznek távoli eljáráshívó rendszerek is, amelyek megengedik, hogy a programok másik gépen futó szubrutinokat hívjanak meg. Névkiszolgálók (name servers): Nagy kiterjedésű rendszerek működése során rengeteg név keletkezik, amit valahogy adminisztrálni kell. Ide tartoznak a felhasználók és a jelszavaik, az azonosítók és a számítógépek nevei és hálózati címei. Ha mindezeket minden számítógépen naprakészen akarnánk tartani, akkor elvesznénk az információ dzsungelében. Ennek elkerülése végett az adatbázisokat nem mindegyik, hanem csak egy pár rendszeren tartják fenn. A többi rendszer az adatokhoz a hálózaton keresztül fér hozzá. Terminálszerverek: Rengeteg rendszerben előfordul, hogy a terminálokat nem csatlakoztatják közvetlenül a számítógépekhez. Ehelyett ezek úgynevezett terminálszerverekhez csatlakoznak. A terminálszerver nem más mint egy kisteljesítményű számítógép, amely csak a telnet (vagy más, bejelentkezést végrehajtó protokoll) futtatására hivatott. Amennyiben a használt terminál ilyen számítógéphez van kötve, akkor egyszerűen csak be kell gépelni egy számítógép nevét, és máris létrejön a kapcsolat. Általában lehetséges egyszerre több számítógép felé aktív kapcsolat fenntartása is. A terminálszerver végzi az élő kapcsolatok közötti váltogatást, és figyelmezteti a felhasználót, ha egy kapcsolat kimenetén megjelenik valami. A terminálszerverek a már említett telnet protokollt használják. A valódi terminálszervereknek tudniuk kell a névszolgálatot, illetve egyéb protokollokat is.
58.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 3. fejezet
Hálózat alapú ablakos rendszerek: A nagy teljesítményű grafikai programok régebben olyan számítógépeket igényeltek, amelyekhez közvetlenül csatlakozott bittérképes grafikus képernyő. A hálózati ablakos rendszerek megengedik, hogy az ilyen programok más számítógéphez csatlakoztatott kijelzőt használjanak. Ezek a rendszerek biztosítják, hogy a különböző feladatokat a legmegfelelőbb rendszerek végezzék, miközben végig egyetlen grafikus felületet mutatnak a felhasználó felé. A legelterjedtebb megvalósítás az X.
A fenti protokollok közül jónéhány a Sun, a Berkeley, illetve más szervezetek munkájának eredménye. Ez azt jelenti, hogy ezek hivatalosan nem részei az Internet protokollkészletnek; persze a megvalósításukban TCP/IP-t használnak, mint bármely más TCP/IP alkalmazás. Mivel a protokoll definíciók nem képeznek tulajdonjogot, valamint mivel kereskedelmileg támogatott megvalósítások is hozzáférhetőek, ezért célszerű ezeket a protokollokat az Internet protokollkészlet részeként tekinteni. A fenti lista a TCP/IP-n keresztül elérhető szolgáltatásokból csak egy mintafelsorolás, a főbb alkalmazások többségét azonban tartalmazza. A többi széles körben használatos protokoll olyan speciális információkat biztosít, mint például a bejelentkezett felhasználók, az aktuális idő stb. Amennyiben olyan szolgáltatásra van szükség, amely nem szerepel a fentiek között, akkor ajánlott az Internet Protokollok aktuális listájának (RFC 1011) a megtekintése. Ebben megtalálható minden protokoll. Érdemes még a főbb TCP/IP megvalósításokat is végigböngészni, hogy a különböző cégek milyen újabb szolgáltatásokat adtak hozzá a protokollokhoz.
A TCP/IP protokollok általános jellemzői A TCP/IP protokollkészlet egymásra épülő rétegekből áll. A protokoll az egyik gép által a másiknak küldendő parancsokat definiálja, például annak meghatározására, hogy ki egy levél küldője, ki a címzett, majd ezután következik a levél szövege. A protokoll feltételezi továbbá, hogy a kérdéses két számítógép között megbízható kommunikációs csatorna létezik. A levelezés, mint bármely más alkalmazási rétegbeli protokoll, a küldendő parancsokat és üzeneteket definiálja. A tervezésekor a TCP/IP-t vették alapul, azaz azzal együtt használható. A TCP a felelős azért, hogy a parancsok biztosan elkerüljenek a címzetthez. Figyel arra, hogy mi került át, és ami nem jutott el a címzetthez, azt újraadja. Amennyiben egy falat, pl. az üzenet szövege, túl nagy lenne (meghaladja egy datagramm méretét), akkor azt a TCP széttördeli több datagrammra, és biztosítja, hogy azok helyesen érkezzen célba. Mivel a fenti szolgáltatásokat jónéhány alkalmazás igényli, ezért ezeket nem a levelezés, hanem egy külön protokoll tartalmazza. Az egész TCP tulajdonképpen nem más, mint rutinok olyan gyűjteménye, amelyet a különböző alkalmazások vesznek igénybe, hogy megbízható hálózati kapcsolatot építsenek ki más számítógépekkel. A TCP hasonlóképpen alapul az IP szolgáltatásokon. Habár a TCP szolgáltatásait sok alkalmazás igényli, vannak olyanok, amelyeknek nincs rájuk szükségük. Persze léteznek olyan szolgáltatások, amelyeket minden alkalmazás megkíván. Ezeket szedték egybe az IP-be. Ugyanúgy, ahogy a TCP, az IP is egy rutingyűjtemény, de ezt a TCP-t nem használó alkalmazások is elérhetik. A különböző protokolloknak ezt a szintekbe rendezését rétegezésnek nevezik. Ennek megfelelően az alkalmazási programok (mint például a levelezés), a TCP, illetve az IP külön réteget alkotnak, amelyek mindegyike az alatta lévő réteg szolgáltatásait használja.
59.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A TCP/IP alkalmazások általában a következő négy réteget veszik igénybe: - alkalmazási protokollok (pl. levelezés) - a TCP-hez hasonló protokollok, amelyek rengeteg alkalmazás számára biztosítanak szolgáltatásokat; - IP, amely a datagrammok célba juttatását biztosítja; - a felhasznált fizikai eszközök kezeléséhez szükséges protokollok (pl. Ethernet) A TCP/IP alapjául az ún. "catenet" modell szolgált. Az alapfeltevés az, hogy nagyszámú különböző hálózat áll egymással összeköttetésben átjárók (gateway) segítségével. Ezeken a hálózatokon lévő bármely számítógépet vagy erőforrást a felhasználónak el kell tudnia érni. Az adatcsomagok esetleg több tucat hálózaton is keresztülmehetnek mielőtt a célállomásra érkeznének. Az ezt megvalósító útvonalválasztásnak természetesen láthatatlannak kell maradnia a felhasználó számára, abból ő mindössze egy Internet címet kell, hogy ismerjen. Ez egy olyan számnégyes, mint például a 128.6.4.194, ami tulajdonképpen egy 32 bites számot reprezentál. A felírás 4 darab 8 bites decimális szám formájában történik. (Az Internet dokumentációkban a byte helyett az oktet kifejezést használják a 8 bites számokra. Ez azért van így, mert a TCP/IP-t olyan számítógépek is használják, amelyek architektúrájában a byte nem 8 bites számot jelöl.) A cím alapján kideríthető, hogy hogyan lehet a rendszerhez eljutni. A különböző rendszerekre áltálában a nevükkel hivatkozunk, és nem az Internet címükkel. Egy ilyen név megadásakor a hálózati szoftver egy adatbázisból kikeresi a hozzátartozó címet. Ez azért fontos, mert a legtöbb hálózati szoftver címekkel operál. A TCP/IP összeköttetés-mentes hálózati protokollokat tartalmaz, ami azt jelenti, hogy az információ a datagrammok sorozataként terjed tovább. A datagramm adatok együttese, amely egy egyszerű üzenetként kerül továbbításra. A datagrammok egymástól függetlenül, egyesével indulnak útjukra. (Az adott adatkapcsolat időtartamára vonatkozóan persze vannak előrejelzések.) A küldendő információt egy meghatározott szinten a protokollok a fenti adatokra tördelik, amelyeket aztán a hálózat egymástól teljesen különállóként kezel. Tegyük fel például, hogy egy 15000 oktet méretű állomány továbbításáról van szó. Mivel a legtöbb hálózat nem tud ekkora datagrammal mit kezdeni, ezért azt a protokollok mondjuk 30 darab 500 oktetes darabra szedik szét, amelyek mindegyikét elküldik a célállomásra. Ott aztán belőlük összerakják az eredeti 15000 oktetes állományt. A datagrammok adása közben a hálózaton semmi nem utal arra, hogy közöttük bármiféle kapcsolat is létezne; előfordulhat, hogy egy a sorrendben eredetileg hátrább álló megelőz egy előtte állót. Az is lehetséges, hogy a hálózaton valahol hiba keletkezik és néhányuk nem érkezik meg a rendeltetési helyére. Ilyenkor újra kell adni a hiányzó datagrammot.
60.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A datagramm és a csomag kifejezés gyakran egymással felcserélhetőnek tűnik, azonban ez nem minden esetben van így. A TCP/IP leírásakor a datagramm a helyes kifejezés: azt az adategységet jelöli, amellyel a protokollok operálnak, míg a csomag egy fizikailag létező dolog, amely a kábeleken jelenik meg. A legtöbb esetben egy csomag egyetlen datagrammot tartalmaz. Ilyenkor szinte elenyésző a különbség. Vannak azonban kivételek: X.25 kábelezésre épülő TCP/IP esetén a két réteg közötti X.25 interfész a datagrammokat 128 byte-os csomagokra tördeli. Mindezt a TCP/IP természetesen nem veszi észre, hiszen a célállomáson a csomagokat ismét egyetlen datagrammá rakja össze az interfész. Itt tehát egyetlen datagrammot több különböző csomag szállít. A legtöbb közegben ezek a különbségek egyre inkább eltűnni látszanak. A TCP/IP címzési mechanizmusa A TCP/IP címek felépítése Az Interneten a számítógépeknek egyedi azonosítójuk van, melyet TCP/IP címnek nevezünk. Ez egy 32 bites szám, a cím négy bájtját szokás közéjük pontokat írva, a bájtok decimális megfelelőjével leírni. A címzési rendszer kialakításánál azt a valóságos tényt vették figyelembe, hogy a címzés legyen hierarchikus, azaz vannak hálózatok, és ezen belül gépek (hosztok). Így célszerű a címet két részre bontani, egy hálózatot azonosító, és ezen belül egy, a gépet azonosító címre. Mivel a cím hossza 32 bit, ezért ezt kellett két részre bontani, olyan módon, hogy a nagy hálózatokban lévő sok gépet is meg lehessen címezni. Az TCP/IP címek 2 részből állnak: - Netid: hálózati azonosító - Hostid: állomás azonosító TCP/IP címosztályok
Az első három címforma 128 hálózatot hálózatonként 16 millió hoszttal (A osztályú cím), 16 384 hálózatot 64 K-nyi hoszttal (B osztályú cím), illetve 2 millió hálózatot, (amelyek feltételezhetően LAN-ok), egyenként 254 hoszttal azonosít. Az utolsó előtti címforma (D osztályú cím) többszörös címek (mulicast address) megadását engedélyezi, amellyel egy datagram egy hosztcsoporthoz irányítható. Az utolsó címforma (E) fenntartott.
61.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A címzéseknél a hálózat és hoszt címének szétválasztására cím-maszkokat (netmask) használnak. Alkalmazásakor bitenkénti ÉS műveletet végezve az IP cím és a cím-maszk között, a hálózati cím leválasztására. C osztályú címek esetén ezért a maszk: 255.255.255.0, míg B osztálynál: 255.255.0.0, stb. A címzésnél bizonyos címtartományok nem használhatók. A 127-el kezdődő címek a “loopback” (visszairányítás) címek, nem használhatók a hálózaton kívül, a hálózatok belső tesztelésére használható. A hoszt címrészbe csak 1-eseket írva lehetséges az adott hálózatban lévő összes hosztnak üzenetet küldeni (broadcast). Például a 195.13.2.255 IP címre küldött üzenetet a 193.13.2 című hálózatban lévő összes gép megkapja. Ha a hoszt címrésze 0, az az aktuális hálózatot jelöli. Ha a hálózati cím 0, az a aktuális hálózatot jelöli. Például a saját gépről 0.0.0.0 címre küldött üzenet a saját gépre érkezik. Csomagstruktúra A TCP szint A TCP/IP datagrammok kezelésében két különböző protokoll játszik szerepet. Az üzenetek széttördelését, összeállítását, az elveszett részek újraadását, a datagrammok helyes sorrendjének visszaállítását mind a TCP (transmission control protocol -- átvitelvezérlési protokoll) végzi. Az egyes datagrammok útvonalának a meghatározását (routing) az IP (Internet protocol) hajtja végre. Mindez azt a látszatot kelti, hogy a munka tetemes része a TCP-re hárul. Kis kiterjedésű hálózatokban ez így is van, azonban az Interneten egy datagrammnak a rendeltetési helyre való juttatása igen összetett feladatot jelenthet. Egy datagramm több hálózaton mehet keresztül míg végül eljut a célállomásra. Például a Rutgers Egyetemről kiindulva a John von Neumann Supercomputing Center-ig soros vonalon keresztül, majd onnan (egy pár Ethernet hálózaton átjutva) 56Kbaud telefonvonalakon keresztül jut el egy másik NSFnet hálózatra stb. A különböző átviteli közegekből adódó inkompatibilitások kezelése és a célállomásokhoz vezető útvonalak végigkövetése komplex feladat. Meg kell jegyezni azonban, hogy a TCP és az IP közti interfész rendkívül egyszerű: a TCP egy datagrammot ad át az IP-nek egy rendeltetési címmel együtt. Az IP semmit sem tud arról, hogy ez az információ hogyan viszonyul más datagrammokhoz. Aki idáig eljutott, abban felmerülhet a gyanú, hogy az eddig elmondottak nem alkotnak egészen teljes keretet. Szó volt ugyan az Internet címekről, de arról nem: vajon hogyan lehet egy adott rendszer esetén az ahhoz befutó különböző kapcsolatokat nyomon követni? Nyilván nem elegendő csupán a datagrammnak a helyes címre való továbbítása. A TCP-nek még azt is tudnia kell, hogy az adott datagramm melyik kapcsolathoz tartozik. A probléma megoldását a demultiplexálás v. nyalábbontás néven ismert eljárás adja, amely a TCP/IP-ben valójában több különböző szinten folyik. A demultiplexáláshoz szükséges információt az ún. fejlécek hordozzák. A fejléc azokat az extra okteteket jelenti, amelyeket a különböző protokollok ragasztanak a datagrammok elejére, hogy azokat nyomon tudják követni.
62.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A dolog hasonlít ahhoz, amikor a levelet a borítékba tesszük, majd azt megcímezzük. A különbség annyi, hogy a modern hálózatokban ez jóval többször történik: olyan mintha a levelet egy kis borítékba tennénk, majd azt a titkárnőnk egy nagyobb borítékba helyezné, amit a központ egy még nagyobb borítékban továbbítana stb... Az alábbiakban a tipikus TCP/IP hálózaton keresztül haladó üzenetre rárakódó fejléceket tekintjük át. Kezdetnek vegyünk egy egyszerű adatfolyamot (pl. egy állomány tartalma), amelyet egy másik számítógépnek szeretnénk elküldeni. Ezt a TCP megcsonkítja. (Ennek érdekében tudatni kell a protokollal, hogy mekkora az a maximális adatméret, amelyet az adott hálózat még kezelni tud. Valójában az összeköttetés két végén a TCP-k közlik egymással az általuk kezelhető maximális méretet, majd veszik a kisebbiket.) Minden datagramm elé egy TCP fejléc kerül, amely legalább 20 oktetből áll. Ezek közül a legfontosabbak: egy forrás- és egy célport, valamint egy sorszám. A portok az összeköttetések végpontjait azonosítják. Tegyük fel például, hogy egyszerre 3 felhasználó továbbít állományokat. A TCP ezekhez az átvitelekhez az 1000, 1001 és 1002 portokat rendelheti. Datagramm küldésekor az allokált port válik a forrásporttá, mivel innen indul ki a datagramm. A kapcsolat másik végénél lévő TCP szintén hozzárendeli a saját portját az átvitelhez. A küldő oldali TCP-nek a célport számát is tudnia kell (ezt az információt a kapcsolat felépülésekor szerzi meg; lásd lejjebb), amelyet az a fejléc célport mezőjébe helyez. Ha a másik oldalról érkezik egy datagramm, akkor annak TCP fejlécében a forrás- és a célportok tartalma ellentétes, hiszen ekkor az a forrás, ez pedig a rendeltetési hely. Minden datagrammnak van egy sorszáma, amely a vevő oldalt arról biztosítja, hogy minden adatot helyes sorrendben kapjon meg, és ne veszítsen el egyet se a datagrammok közül. A TCP valójában nem a datagrammokat, hanem az okteteket sorszámozza. Ha például minden datagramm 500 oktet adatot tartalmaz, akkor az első datagramm sorszáma 0, a másodiké 500, a következőé 1000, az az utánié 1500 stb. lesz. Végül essék szó az ellenőrzőösszegről: ez egy olyan szám, amelyet a datagrammban lévő oktetek összeadásával kapunk. Az eredmény aztán bekerül a TCP fejlécbe. A vevő oldali TCP is kiszámítja a fenti algoritmus szerinti ellenőrzőösszeget. Ha a kettő nem egyezik, akkor a datagrammal az átvitel közben valahol valami baj történt és azt a protokoll eldobja. A datagramm mostanra tehát így néz ki: Forrásport TCP fejrész hossza Ellenőrzőösszeg
Célport Sorszám Ráültetett nyugta Fentartott Tényleges adatok 32 bit
63.
Ablak Sürgősségi mutató
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A fejlécben vannak olyan mezők, amelyekről még nem esett szó. A legtöbbjük az összeköttetés menedzselésével kapcsolatos információkat hordozza. A datagrammnak a rendeltetési helyre való megérkezését a vevő egy nyugtával hozza a küldő oldal tudomására. Ez a szám a datagramm TCP fejlécében a Ráültetett nyugta mezőben jelenik meg. Például egy olyan csomag elküldése, amelynek nyugtamezőjében 1500 szerepel, azt jelenti, hogy az 1500-as oktetig bezárólag minden datagramm eljutott a rendeltetési helyre. Amennyiben a küldő oldal egy adott időn belül nem kap nyugtát, akkor újból elküldi az adatot. Az Ablak mezőben lévő érték az összeköttetés alatt forgalomban lévő adatok mennyiségét határozza meg. Nem lenne szerencsés, ha minden egyes datagramm elküldése előtt meg kellene várni az előző nyugtáját, mert így a forgalom rendkívüli mértékben lelassulna. Másrészt viszont nem lehet folytonosan küldeni az adatokat, hiszen például egy gyorsabb számítógép adatárama elárasztaná a lassabb gépeket. Ennek megoldására mindkét oldal az Ablak mezőben elhelyezett oktetek számával közli, hogy éppen mekkora adatmennyiséget képes még befogadni. Az adatok vételével ez a szám, azaz az ablak mérete, folyamatosan csökken. Amikor eléri a nullát a küldőnek szüneteltetnie kell az adatok továbbítását. A vevő ablakmérete az adatok feldolgozása során nő, ami jelzi, hogy kész további adatok fogadására. Gyakran ugyanaz a datagramm használható az újabb adatok engedélyezésére és nyugtázásra is (aktualizált ablak segítségével). A Sürgősségi mutató mezőben lévő érték beállításával bármelyik oldal utasíthatja a másikat arra, hogy a feldolgozást egy adott oktettel folytassa. A gyakorlatban többek között ez az aszinkron eseményekkel kapcsolatban használatos, például amikor vezérlőkarakter vagy más, a kimenetet megszakító parancs kerül továbbításra. Az IP szint A TCP az általa feldolgozott datagrammokat átadja az IP-nek. Persze ezzel együtt közölnie kell a rendeltetési hely Internet címét is. Az IP-t ezeken kívül nem érdekli más: nem számít, hogy mi található a datagrammban vagy, hogy hogyan néz ki a TCP fejléc. Az IP feladata abban áll, hogy a datagramm számára megkeresse a megfelelő útvonalat és azt a másik oldalhoz eljuttassa. Az útközben fellelhető átjárók és egyéb közbülső rendszereken való átjutás megkönnyítésére az IP a datagrammhoz hozzáteszi a saját fejlécét. A fejléc fő részei a forrás, és a rendeltetési hely Internet címe (32 bites címek, pl. 128.6.4.94), a protokollszám és egy ellenőrző összeg. A forrás címe a küldő gép címét tartalmazza. (Ez azért szükséges, hogy a vevő oldal tudja honnan érkezett az adat.) A rendeltetési hely címe a vevő oldali gép címét jelenti. (Ez pedig azért szükséges, hogy a közbenső átjárók továbbítani tudják az adatot.) A protokollszám kijelöli, hogy a datagramm a különböző szállítási folyamatok közül melyikhez tartozik. A TCP egy biztos választási lehetőség, de léteznek egyebek is (pl. UDP). Végül az ellenőrzőösszeg segítségével bizonyosodik meg a vevő oldali IP arról, hogy a fejléc az átvitel során nem sérült-e meg. A TCP és az IP különböző ellenőrzőösszegeket használ. Az IP-nek meg kell tudnia győződni a fejléc sértetlenségéről, különben rossz helyre küldhet el adatot. A TCP és az IP a biztonság és a hatékonyság növelése miatt tehát külön ellenőrzőösszegeket használ.
64.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az IP fejléc hozzátétele után az eredeti üzenet így néz ki: Verzió Azonosítás Élettartam
Szolgálattípus DF
DM
Protokoll Forráscím Célcím TCP fejrész Tényleges adatok 32 bit
Teljes hossz Datagramm eltolás Ellenőrzőösszeg
Nem esett szó a fejlécben lévő többi mező jelentéséről, mert a legtöbbjük a jelen dokumentum keretein túlmutat. A Datagramm-eltolás és a DF, MF mezők a datagrammok részeinek nyomonkövetésére használatosak. Egy datagrammot például akkor kell széttördelni, amikor az egy olyan hálózaton halad keresztül, amely számára nagy falatnak mutatkozik. Az Élettartam mezőben lévő szám mindig csökken, amikor a datagramm egy rendszeren halad keresztül. Amikor eléri a nullát, a datagramm megsemmisül. Ezt az eljárást a rendszerben esetleg felépülő végtelen ciklusok miatt építették a protokollba. Persze ezek felléptének valószínűsége az ideális esetben nulla, de a jól megtervezett hálózatoknak a bekövetkezhetetlen eseményekkel is el kell tudniuk bánni. Amikor a hálózati réteg összerak egy teljes datagrammot, tudnia kell, hogy mit tegyen vele. Végül az Azonosítás mező ahhoz kell, hogy a célhoszt meg tudja állapítani, hogy egy újonnan érkezett csomag melyik datagrammhoz tartozik. Egy datagramm minden egyes darabja ugyanazzal az Azonosítás mező értékkel rendelkezik. Lehetséges, hogy az így felépített datagrammhoz több fejléc már nem kell. Ha a küldő számítógépet a célgéphez vagy egy átjáróhoz közvetlen telefonvonal köti, akkor a datagrammokat egyszerűen kiküldi a vonalra (habár aszinkron protokoll használatakor az legalább néhány oktetet hozzátesz az elejéhez és a végéhez). Az Ethernet szint Manapság a legtöbb hálózat Ethernetet használ. A következőkben az Ethernet fejléccel foglalkozunk. Sajnos az Ethernetnek megvan a saját címzési módszere, mivel a létrehozók biztosítani akarták, hogy semelyik két gépnek se legyen ugyanaz az Ethernet címe. Azt is el akarták érni, hogy a felhasználónak ne kelljen a címek hozzárendelésével foglalkozni, ezért minden Ethernet vezérlő gyárilag beégetett címmel rendelkezik. Hogy ne kelljen egyetlen címet se újra kiosztani, a fejlesztők az Ethernet cím hosszát 48 bitben határozták meg. Az Ethernet vezérlőket gyártó cégeknek regisztráltatniuk kell magukat egy központnál, hogy biztosak legyenek abban: az általuk kiadott címek még nem léteznek. Az Ethernet ún. üzenetszórásos közeg, azaz olyan, mint egy partivonal. Az Ethernetre ültetett csomagot a hálózaton lévő összes gép látja, ezért valami még hiányzik, hogy azt biztosan a megfelelő gép kapja meg. Nem nehéz kitalálni, hogy itt jelenik meg az Ethernet fejléc. Minden Ethernet csomagnak egy 14 oktetes fejléce van, amely a forrás- és a célgép címét, valamint egy típuskódot tartalmaz. Vegyük észre, hogy az Ethernet címek és az Internet címek között nincs semmiféle kapcsolat. Minden számítógépnek van egy táblázata, amelyben felsorolja, hogy milyen Ethernet cím milyen Internet címnek felel meg. 65.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A címek mellett a fejlécben szerepel még egy típuskód is. Ennek segítségével ugyanazon a hálózaton többfajta protokollkészlet használata is lehetséges: TCP/IP, DECnet, Xerox, NS stb. Ezen protokollok mindegyike különböző értéket helyez a típus mezőbe. Végül ott az ellenőrzőösszeg, amelyet az Ethernet vezérlő az egész csomagra vonatkozóan számít ki. A vételkor a célgép Ethernet vezérlője is kiszámítja ezt az ellenőrzőösszeget, és ha a kettő nem egyezik, akkor eldobja a csomagot. Az ellenőrzőösszeg nem a fejlécbe, hanem a csomag végére kerül. Az üzenet tehát így néz ki: Célgép Ethernet címe (első 32 bit) Célgép Ethernet címe (utolsó 16 bit) Forrásgép Ethernet címe (első 16 bit) Forrásgép Ethernet címe (utolsó 32 bit) Típuskód Nem használt IP fejléc TCP fejléc Tényleges adatok Ethernet ellenörzőösszeg 32 bit A csomagok megérkezésekor persze a fenti fejlécek mindegyikét leszedi a megfelelő protokoll. Az Ethernet interfész az Ethernet fejlécet és az Ethernet ellenőrzőösszeget szedi le. Ezek után ellenőrzi a típuskódot. Mivel az az IP-re mutat, ezért a datagrammot átadja az IP-nek, amely a Protokoll mező tartalmát ellenőrzi. Itt azt találja, hogy TCP, ezért a datagrammot a TCP-nek adja át. A TCP a Sorszám mező tartalma és egyéb információk alapján állítja össze az eredeti állományt. Datagrammok fragmentálása és összerakása A TCP/IP-t úgy tervezték, hogy különböző hálózatokon is használható legyen. Sajnos a hálózati tervezők nem igazán értenek egyet abban, hogy maximálisan mekkora lehet egy csomag mérete. Az Ethernet hálózatoknál ez 1500 oktet. Az Arpanet maximum 1000 oktet körüli csomagokkal dolgozik. Egyes gyors hálózatoknál a csomagméret ennél jóval nagyobb lehet. Az első ötlet az, hogy az IP egyszerűen a lehető legkisebb csomagmérettel dolgozzon. Ez azonban a hatásfokot jelentősen rontaná. Nagy állományok esetén ugyanis sokkal eredményesebb a nagyobb csomagméret. Ezért a lehető legnagyobb méretet akarjuk elérni, de úgy, hogy a csak kisebb méreteket kezelő hálózatok is részt vehessenek az adatforgalomban. A következő két módszer szerint járnak el. A TCP-t úgy tervezték, hogy képes a datagramm méretet egyeztetni (negotiate). Ez azt jelenti, hogy a TCP kapcsolat felépítésekor mindkét oldal közli a másikkal az általa kezelhető maximális méretet, majd a továbbiakban a kisebbiket használják. Így a nagyobb datagrammokat kezelni képes megvalósítások azokat használják, de ugyanakkor a kisebb datagrammokat ismerő implementációkkal is szót értenek. Tegyük fel, hogy a kommunikálni kívánó mindkettő számítógép Ethernet alapú hálózaton helyezkedik el. Ezért mindketten megértik az 1500 oktetes datagrammokat. Útközben az adatok az Interneten (Arpanet-root) keresztül továbbítódnak. Ez a hálózat nem tud 1500 oktetes datagrammokat kezelni, ezért azokat fragmentálnia, tördelni kell.
66.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az IP fejléc mezői jelzik, ha a datagramm fragmentált, és az összerakásra vonakozóan is elegendő információt tartalmaznak. Ha egy átjáró egy Ethernet alapú hálózatot köt össze az Internettel, akkor annak képesnek kell lennie 1500 oktetes Ethernet csomagok fogadására és azok Internetes méretűvé tördelésére. A TCP/IP minden megvalósításának képesnek kell lennie a darabok fogadására és az eredeti datagramm összerakására (reassembly). A TCP/IP implementációk különböznek egymástól a datagramm méretének megválasztásában, azonban a szabvány szerint legalább 576 oktet nagyságú datagrammokat választanak, ha nem biztosak abban, hogy a nagyobb méretet útközben mindenhol megértik. Ez az eléggé konzervatív megközelítés abból fakad, hogy az összerakást megvalósító kódok sokszor hibásak. A tervezők kerülni igyekeznek a fragmentálást. Mindegyikük másként gondolkodik arról, hogy mikor biztonságos a nagyobb méret. Néhányan csak a lokális hálózatra esküsznek, de vannak olyanok is, akik az egész hálózatra kiengednek ilyen datagrammokat. Az 576 oktet eléggé biztonságos ahhoz, hogy mindenki támogassa. Az Ethernet és az ARP A korábbiakban röviden kitértünk arra, hogy az Ethernet alapú hálózatokon hogyan néz ki egy IP fejléc. Szó volt az Ethernet fejlécről és az ellenőrzőösszegről is. Azt azonban nem tudtuk meg, hogy egy adott IP cím esetén milyen Ethernet címet használjunk. Erre a kérdésre egy protokoll, az ARP (address resolution protocol -címleképezési protokoll) adja meg a választ. (Vigyázat: az ARP nem IP-beli protokoll. Az ARP datagrammok nem kapnak IP fejlécet.) Tegyük fel, hogy a 128.6.4.194 rendszerről a 128.6.4.7 rendszerrel szeretnénk kapcsolatba lépni. A kezdeményező rendszer első lépésként azt találja, hogy a 128.6.4.7 is ugyanazon az Ethernet alapú hálózaton található. Második lépésként a 128.6.4.194 megnézi, hogy szerepel-e a saját ARP táblázatában a 128.6.4.7 címen bejegyzés (a 128.6.4.7 Ethernet címe). Ha igen, akkor a datagrammhoz egy Ethernet fejlécet csatol, és elküldi. Tegyük fel azonban, hogy nincs ilyen bejegyzés az ARP táblázatban. Így a csomagot nem lehet elküldeni, hiszen nincs meg az Ethernet cím. Itt jön be az ARP. A 128.6.4.169 rendszer egy "Kérem a 128.6.4.7 Ethernet címét" tartalmú ARP kérést ad ki az Ethernet hálózatra. Az adott hálózaton minden rendszer figyeli az ARP kéréseket. Ha egy rendszer olyan ARP kérést fog, amely rá vonatkozik, akkor válaszolnia kell. A fenti példában tehát a 128.6.4.7 hallja a kérést, és egy ARP üzenetet küld a 128.6.4.169-nek, amelynek tartalma: "A 128.6.4.7 Ethernet címe 8:0:20:1:56:34". A kérést adó rendszer a kapott információt bejegyzi az ARP táblázatába. Az esetek nagy részében az ARP táblázatokat gyorsítótárként (cache) használják: a régóta nem használt bejegyzéseket kitörlik. A fentiekből valószínű kiderült, hogy az ARP kéréseket üzenetszórás formájában kell a hálózatra kiadni. Nem lehet azokat közvetlenül a keresett rendszerhez küldeni, hiszen a lényeg éppen a cím keresése. A kérés megfogalmazásához a csupa egyes bitből álló FF:FF:FF:FF:FF:FF Ethernet címet használják. Megállapodás szerint az Ethernet alapú hálózatok minden gépe figyeli az ilyen címre küldött csomagokat. Ez azt jelenti, hogy az ARP kérést is látja mindegyikük. Minden egyes gép ellenőrzi, hogy a kérés rá vonatkozik-e. Ha igen, akkor választ küld. Ha nem, akkor egyszerűen nem veszi figyelembe. (Néhány gép az ARP táblázatának frissítésére is használja az ilyen kéréseket, még akkor is, ha az nem rá vonatkozik.) 67.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Socket-ek, portok és ablakok Az eddigiekben azt vettük sorra, hogy egy üzenet hogyan darabolódik szét, hogyan jut el egy géptől egy másikig, majd ott hogyan áll ismét össze. Mindez még kevés ahhoz, hogy hasznos dolgot lehessen végezni. Szükség van valamilyen módszerre, amelynek segítségével egy másik számítógéppel kapcsolatba lehet lépni, oda be lehet jelentkezni, közölni lehet vele, hogy milyen adatokra van szükségünk, illetve amellyel az adatok átvitelét szabályozni tudjuk. (Más alkalmazás, pl. elektronikus levelezés, esetén is ezzel analóg protokollra van szükség.) Ezt a feladatot az alkalmazási réteg protokolljai végzik el, amelyek a TCP/IP tetején találhatóak. Ez annyit jelent, hogy üzenet küldésekor azt a TCP-nek továbbítják, amely gondoskodik róla, hogy eljusson a célállomáshoz. Mivel a TCP és az IP kezelik a hálózati vonatkozásokat, ezért az alkalmazási protokollok a hálózatot egyszerű bytefolyamnak tekintik, mint például egy terminál- vagy telefonvonalat. Mielőtt az alkalmazói programokkal kapcsolatban további részletekbe bocsátkoznánk, meg kell vizsgálnunk, hogy hogyan lehet egy alkalmazást megtalálni. Tegyük fel, hogy egy állományt szeretnénk küldeni a hálózaton keresztül a 124.6.4.7 IP című gépnek. A folyamat elindításához azonban az Internet címnél többre lesz szükség. A célállomás oldalán az FTP kiszolgálóval fel kell venni a kapcsolatot. A hálózati programokat általában külön feladatok elvégzésére programozzák. A különböző feladatokat (állományátvitel, bejelentkezés távoli terminálról, levelezés stb.) a legtöbb rendszerben más-más programok végzik. Amikor a fenti példában a 124.6.4.7 című géppel kapcsolatot építünk ki, akkor azt is meg kell mondanunk, hogy az ottani FTP kiszolgálóval szeretnénk kommunikálni. Ennek megvalósítására minden kiszolgáló jól ismert socketekkel (foglalatok, szolgálatelérési pontok) rendelkezik. Ennek magyarázataképpen tekintsük a következőket. Emlékezzünk vissza, hogy a TCP a különböző kommunikációk kézben tartására különböző portokat használ. A felhasználói programok többé-kevésbé véletlenszerűen választanak portot, de egyes portok eleve olyan programoknak felelnek meg, amelyek valamilyen kérés kiszolgálására várnak (ezek lennének a kiszolgálók). Állományátvitel esetén például egy "ftp" nevű programot indítunk el, amely a kapcsolat felépítéséhez a saját oldalán véletlenszerűen kijelöl egy portot, mondjuk az 1234-t. A céloldalon viszont a 21-es portot jelöli meg, amely az FTP kiszolgáló hivatalos portjának felel meg. Vegyük észre, hogy itt két különböző programról van szó. Az egyik az "ftp", amelyet a küldő oldalon indítottunk el, és amely a terminálról kapott parancsokat továbbítja a másik oldalhoz; a célállomáson lévő gépen viszont az FTP kiszolgálóhoz beszélünk. Ezt arra találták ki, hogy a hálózatról parancsokat fogadjon, nem úgy mint egy interaktív terminál. Semmi szükség arra, hogy az "ftp" program jól ismert socket-et használjon. A kiszolgálókkal teljesen más az eset, hiszen a kapcsolatokban parancsokat kell tudniuk fogadni.
68.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A fentiek után nyilvánvaló, hogy egy kapcsolatot négy szám jellemez: a két Internet cím, és a két TCP port száma. Ez a négy szám minden egyes datagrammban megtalálható. (Az Internet címek az IP fejlécben, a TCP portok száma pedig a TCP fejlécben van.) Az egyediség megkövetelése miatt semelyik két kapcsolat esetén sem lehet ugyanaz mind a négy szám. Ugyanakkor elég, ha csak egy szám tér el a másik négytől. Semmi nem tiltja például azt, hogy ugyanazon a gépen lévő két különböző felhasználó állományokat vigyen át ugyanarra a távoli gépre. Ennek a megvalósítása például az alábbi paraméterekkel lehetséges: 1. kapcsolat 2. kapcsolat
Internet cím 128.6.4.194, 128.6.4.7 128.6.4.194, 128.6.4.7
TCP port száma 1234, 21 1235, 21
Mivel ugyanazokról a gépekről van szó, az Internet címek ugyanazok. Továbbá, mivel mind a két kapcsolatban állományátvitelről van szó, ezért a kapcsolatok egyik végén az FTP port jól ismert száma (21) található. Az egyetlen dolog, ami különbözik: a felhasználók által futtatott programok portszáma. Ez tökéletesen elegendő. A kapcsolatok felépítésében az az általános gyakorlat, hogy legalább az egyik oldal utasítja a hálózati szoftvert arra, hogy számára egyedi portot allokáljon. A legtöbb esetben ezt a felhasználó felőli oldal teszi meg, mivel a kiszolgálónak egy mindenki által jól ismert számot kell használnia. A socket tehát nem más mint egy IP cím-portszám kombináció, melyet az alkalmazások használnak, hogy más gépekkel kapcsolatba lépjenek. Most, hogy már tudjuk hogyan kell kapcsolatot felépíteni, menjünk vissza az alkalmazói programokhoz. Ahogy már fentebb említettük: miután a TCP megnyitott egy kapcsolatot, rendelkezésünkre áll egy vonal, ami akár egy egyszerű drót is lehetne. A feladat rázós részeit a TCP és az IP kezelik. Ez persze még nem elég, ugyanis tudnunk kell, hogy mit küldhetünk át a vonalon. Valójában ez nem más, mint a küldhető parancsok és azok formátumának leírása. Az átküldött rész lényegében adatok és parancsok egyvelege, amiket a szövegkörnyezet különböztet meg egymástól. Például a levelezést megvalósító protokoll működése az alábbi: a felhasználói oldal levelező programja kapcsolatot épít fel a célállomás levelezést kiszolgáló programjával. A küldő program megadja a forrásgép nevét, a küldő címét és a címzetteket. Ezek után egy parancsot küld, amelyben arról tájékoztat, hogy az üzenet szövege következik. Ettől a ponttól a kiszolgáló az adatokat nem parancsokként, hanem üzenetként értelmezi mindaddig, amíg egy speciális, az üzenet végét jelentő jellel (egy egyedül álló pont a sor elején) nem találkozik. Ez után a két oldal ismét parancsokkal kommunikál. Ez a legegyszerűbb módja az üzenetek küldésének, és a legtöbb alkalmazás így is működik.
69.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az állományok átvitele ennél valamivel bonyolultabb. Átvitel esetén két különböző kapcsolat épül fel. Az elején minden úgy megy mint a levelezéskor. A felhasználó programja olyan parancsokat küld, mint "jelentkeztess be ilyen és ilyen felhasználóként", "ez a jelszóm", "küldd el ezt és ezt az állományt". Miután az adatkérésre a parancs elment, a tényleges adatok átvitelére egy második kapcsolat épül fel. Persze ezt meg lehetne oldani ugyanazon az egy kapcsolaton keresztül is, ahogy a levelezés teszi. Az ok, amiért ez mégsem így történik, abban rejlik, hogy az állományátvitel általában hosszú ideig tarthat. A tervezéskor úgy érezték, hogy jobb a felhasználónak meghagyni a menet közbeni parancskiadás lehetőségét. Például megszakításhoz stb. Lehetséges az is, hogy két különböző géphez nyissunk meg kapcsolatot, és egy állományt az egyiktől a másikhoz küldjünk. Ebben az esetben az adatok nem keveredhetnek a parancsokkal. A távoli terminálhívások egy harmadik módszert használnak. A távoli bejelentkezéskor csupán egy kapcsolat épül fel. Normális esetben ezen csak adatok mennek keresztül. Amennyiben parancsot akarunk kiadni (pl. a terminál típusának a beállítására, vagy valamilyen üzemmód átállítására), akkor egy speciális karaktert kell küldeni, amely jelzi, hogy a következő karakter parancs. Ha ezt a speciális karaktert adatként akarjuk küldeni, akkor kettőt kell egymás után kiadni. Sok esetben találkozhatunk a talányos "ablak" kifejezéssel is a TCP kommunikációban. Ez a kifejezés a küldő és fogadó gépeken lévő TCP puffer méretét jelöli, megadva ezzel azt, hogy hány további csomag küldhető el egy adott csomag visszaigazolásának megérkezése előtt. Ha a hálózatunkon keresztül nagy mennyiségű adat mozog (pl. hang vagy képanyag) akkor a jobb teljesítmény érdekében érdemes növelni az ablakméretet, ha azonban lassú kapcsolattal dolgoznunk az ablakméret csökkentése az ésszerű. Nem TCP protokollok: UDP és ICMP Eddig csak olyan kapcsolatokkal foglalkoztunk, amelyek TCP-t használnak. Emlékezzünk vissza, hogy a TCP az üzenetek datagrammokra darabolásáért és helyes sorrendben történő visszaállításáért felelős. Sok alkalmazás során találjuk magunkat szembe olyan üzenetekkel, amelyek elférnek egyetlen datagrammban is. Egy példa erre a nevek kikeresése. Amikor egy felhasználó egy másik rendszerrel kapcsolatba akar lépni, akkor általában az adott rendszer nevét fogja megadni, és nem az IP címét. Mielőtt bármit is kezdhetne vele, a felhasználó rendszerének ezt a nevet le kell fordítania IP címre. Az erre a célra szolgáló adatbázissal viszont nem minden rendszer rendelkezik, ezért a felhasználó rendszere az adatbázissal bírót kéri meg a fordításra. A kérés annyira rövid, hogy biztosan elfér egyetlen datagrammban. Ugyanez mondható el a válaszról is. Úgy látszik, hogy nem érdemes a TCP-t használni. Persze a TCP az üzenetek darabolásán kívül még mást is csinál. Biztosítja, hogy az üzenetek megérkezzenek: ahol szükséges, ott a datagrammokat újraadja. Viszont az olyan kérdéshez, amely egyetlen datagrammban elfér, nincs szükség a TCP teljes bonyolultságára. Ha egy pár másodpercen belül nem kapunk választ, akkor egyszerűen megismételjük a kérdést. Az ilyen alkalmazásokra a TCP mellett létezik más alternatíva.
70.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A legszélesebb körben használt ilyen protokoll az UDP (user datagram protocol -felhasználói datagrammprotokoll), amelyet olyan alkalmazásokhoz találtak ki, ahol nincs szükség datagramok sorozatba állítására. Hasonlóképpen illeszkedik a rendszerbe, mint a TCP. A hálózati szoftver az adatok elejére ráilleszti az UDP fejlécet ugyanúgy, ahogy a TCP fejléc esetében teszi. Az UDP ezek után az IP-nek továbbítja az adatot. Az IP hozzáteszi a saját fejlécét, amibe a TCP helyett az UDP protokollszámát helyezi el a Protokoll mezőben (lásd IP fejléc). Az UDP nem végez annyi feladatot, mint a TCP: nem tördeli szét az üzenetet datagrammokra, nem figyeli a már elküldött adatokat, hogy majd esetleg újraadja őket. Az UDP csak portszámokat biztosít, hogy egyszerre több program is használhassa a protokollt. Az UDP portszámok ugyanúgy használatosak, mint a TCP portszámok. Az UDP-t használó kiszolgálókhoz is léteznek jól ismert portszámok. Megjegyezzük még, hogy az UDP fejléc sokkal rövidebb, mint a TCP fejléce. Ebben is szerepel a forrás- és a célport száma, valamint egy ellenőrző összeg, de ennyi az egész. Nincs benne sorszám, mert nincs szükség rá. Az UDP fejléc így néz ki: Forrásport Hossz
Célport Ellenőrzőösszeg Tényleges adatok 32 bit
Az UDP-t a nevek kikeresését végző, illetve az ezekhez hasonlóan működő protokollok használják. Egy másik alternatív protokoll az ICMP (Internet control message protocol -- Internet vezérlőüzenet protokoll) nevet viseli. Az ICMP-t a hibaüzenetek és a TCP/IP-t megvalósító szoftvernek szánt üzenetek kezelésére használják. Kapcsolat kérésekor a kezdeményező rendszer kaphat például olyan ICMP üzenetet, hogy "host unreachable" (elérhetetlen gép). Az ICMP-t használják még arra is, hogy magáról a hálózatról információkat gyűjtsenek. Az ICMP abban hasonlít az UDP-hez, hogy mindketten olyan üzenetekkel foglalkoznak, amelyek egyetlen datagrammban elférnek. Az ICMP azonban annál is egyszerűbb. Még csak portszámok sincsenek a fejlécében. Mivel minden egyes ICMP üzenetet maga a hálózati szoftver értelmez, ezért nincs szükség olyan portszámokra, amelyek megmondják, hogy egy adott ICMP üzenet hova menjen. Név- és információszervezés: a tartomány (domain) rendszer Ahogyan már korábban jeleztük, a hálózati szoftvernek egy 32 bites Internet címre van szüksége ahhoz, hogy egy kapcsolatot felépíthessen, vagy hogy datagrammokat küldhessen. A felhasználók viszont inkább a számítógépek neveivel mintsem számokkal szeretnének hivatkozni rájuk (a neveket könnyebben meg lehet jegyezni). Ezért létezik egy adatbázis, amelyből a hálózati szoftver kikeresheti a névnek megfelelő címet, és fordítva. Amikor az Internet még nem volt ilyen kiterjedt, akkor ez viszonylag könnyen megoldódott: minden gépnek volt egy adatállománya, amelyben az összes többi rendszer nevét és címét felsorolták. Ma már túl sok rendszer létezik ahhoz, hogy az ilyen megközelítés praktikus legyen. Emiatt ezeket az állományokat olyan névkiszolgálók váltották fel, amelyek a gépek neveit és a megfelelő címeket tartják nyilván. (A sokfajta információ közül ez csak egy. Valójában ezek a kiszolgálók sokkal általánosabb feladatot látnak el.) 71.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A valóságban egyetlen központi gép helyett az ilyen kiszolgálók egymással összekapcsolt halmaza használatos. Manapság már olyan sok különböző intézmény kapcsolódik az Internethez, hogy nem lenne praktikus, ha egy központi hatóságot kellene értesíteniük minden olyan esetben, amikor egy gépet a hálózatba be- vagy abból kikapcsolnak. Éppen ezért a névadásra az egyes intézmények a rendszerükön belül saját maguk jogosultak. Az így kialakított névkiszolgálók közösen egy fa struktúrát alkotnak, amely az intézmények hálózati szerkezetének felel meg. Ezt a szerkezetet a nevek is tükrözik. Tipikus példa erre a server.barhacs.tvnet.hu név, amely a Barhács Oktatóközpont egy számítógépét jelöli. A gép Internet címének meghatározásához 4 potenciális kiszolgálót kellene megkérdezni. Először egy központi kiszolgálótól (root - gyökér, ld. a fa struktúrát) kellene megtudakolni, hogy hol található a HU kiszolgáló, amely nem más, mint a hálózatba kapcsolt nemzeti körzetek nyilvántartása. A gyökérként szereplő kiszolgáló több HU kiszolgáló nevét és Internet címét adná meg. (Minden szinten több ilyen névkiszolgáló van, hogy az esetleges meghibásodások ne okozzanak fennakadást.) A következő feladat lenne a HU kiszolgáló lekérdezése a TVNET névkiszolgálójáról. Itt is több kiszolgáló nevét és Internet címét kapnánk meg. Ezek közül általában nem mindegyik található az intézmény területén (egy esetleges áramszünet fellépte miatt). Ez után a TVNET-től kérdeznénk le az Oktatóközpont névkiszolgálójának adatait, majd végül az Oktatóközponti névkiszolgálók egyike adná a SERVER adatait. A végső eredmény a server.barhacs.tvnet.hu gép Internet címe lenne. A fenti szintek mindegyike egy tartományt (domain) jelöl. A teljes server.barhacs.tvnet.hu név pedig egy tartománynév (domain name). Ugyanígy a felsőbb tartományok nevei is tartománynevek: BARHACS,TVNET és HU. Az esetek nagy többségében szerencsére nem kell a fenti lépések mindegyikét végrehajtani. A legfelső kiszolgáló (gyökér) ugyanis egyben a legfelső szinten lévő tartományok (pl. HU) névkiszolgálójaként is szerepel. Tehát a gyökér kiszolgáló felé irányuló egyetlen kérdéssel a TVNET névkiszolgálójához lehet eljutni. Az alkalmazott szoftverek pedig a már feltett kérdésekre kapott válaszokra emlékeznek. Ez azt jelenti, hogy a barhacs.tvnet.hu kiszolgáló lekérdezése után tudja, hogy hol keresse a barhacs.tvnet.hu, a tvnet.hu és a hu tartománybeli kiszolgálókat. A barhacs.tvnet.hu fordítására szintén emlékszik. Persze minden ilyen információnak van egy megfelelő élettartama, ami tipikusan pár napnak felel meg. Az élettartam lejárta után az információkat fel kell frissíteni. Az intézmények ilyen módon változtathatnak, ha akarnak. A tartományrendszer feladata nem merül ki az Internet címek megtalálásában. Minden egyes tartománynév csomópontként szerepel egy adatbázisban. A csomópontnak különböző tulajdonságokat jellemző rekordjai lehetnek. Ilyen az Internet cím, a számítógép típusa, és a számítógép által biztosított szolgáltatások felsorolása. Egy program egy adott névvel kapcsolatban kérheti ezen információk valamelyikét, vagy az összeset. Megoldható az is, hogy egy adatbázisbeli csomópont egy másik csomópont álneveként (alias) szerepeljen. Az is lehetséges, hogy a tartományrendszerben felhasználókról, levelezési listákról, vagy más objektumokról tároljunk adatokat.
72.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A fenti adatbázisok működését, illetve az azok lekérdezését megvalósító protokollokat is Internet szabvány írja le. Minden hálózati alkalmazásnak meg kell tudnia valósítani ezeket a lekérdezéseket, mivel hivatalosan így történik a hosztnevek kiértékelése. Az alkalmazások általában saját rendszerükön (tartományukon) belül keresnek egy névkiszolgálót. Ez a kiszolgáló aztán a felsőbb szinten (az ő tartományán) lévő kiszolgálókkal veszi fel a kapcsolatot. Ezzel a módszerrel az alkalmazásokban lévő kód mennyiségét lehet lecsökkenteni. A tartományrendszer fontos szerepet tölt be az elektronikus levelezésben. Az adatbázisokban szerepelhetnek olyan bejegyzések, amelyek megmondják, hogy melyik gép kezeli egy adott név leveleit, egy felhasználó levelei hová érkezzenek, illetve levelezési listákat is definiálhatnak. DNS A DNS egy osztott, hierarchikus adatbázis: az adatbázist jelenleg név szerverek százezrei szolgáltatják nevek millióiról. A tervezéskor gondoltak redundanciára és a hibatűrésre: a névszerverek sokszor nem elérhetők, konfigurációjuk tele van hibával, hiányossággal, elavult adatokkal, az egész mégis bámulatos módon működik. A DNS rendszer legfontosabb feladata a név - IP cím feloldás, de - ahogy azt látni fogjuk egy sor más információt is szolgáltat a domain nevekről. A Microsoft DNS megvalósítása teljesen szabványkövető (bár hozzátesszük, a Win2000 alatt a belső és külső tartományok keverése némiképp gondot jelent). IP címek, nevek Mint láttuk, az Interneten levő hálózati eszközök, számítógépek mindegyikének egyedi azonosítója, (4 byte-on tárolt) IP címe van. A felhasználók azonban olyan neveket szeretnek használni, amelyek könnyebben megjegyezhetők, mint egy ilyen hosszú szám, és a névből következtetni tudnak a gép, a szolgáltatás helyére, a szolgáltatás típusára is. Ezért kezdettől fogva neveket rendeltek az IP címekhez. Amikor az Internet még csak pár ezer számítógépből állt, ezt a név-cím hozzárendelést egy folyamatosan növekvő fájl, host táblázat tartalmazta. Ezt a táblázatot minden számítógépen lokálisan tárolták és egy központi helyről rendszeresen frissítették. Ennek nyoma mind a mai napig megvan: pl. a unix rendszerekben az /etc/hosts fájl éppen ilyen. Az Internet növekedtével azonban ez a megoldás tarthatatlanná vált: a fájl hatalmasra dagadt, egyre sűrűbben kellett módosítani, egyre többen töltötték le, egyre gyakrabban, Ezért jött létre a DNS (Domain Name Service), az Internetes kommunikáció egyik fundamentuma. Kidolgozásában fő szerepet játszott P. Mockapetris, az ISI (Information Science Institute) munkatársa. A nevek feloldása hálózati kommunikáció által történik. A névszerverek feladata kettős: - látni - azaz az elosztott DNS adatbázist kérdezni, a hálózati szolgáltatások számára az érvényben levő név-cím hozzárendelésről információt adni és - láttatni, mutatni - az elosztott adatbázis ide kiosztott részére információforrásként viselkedni, azaz a nevek egy bizonyos halmazáról a többi név szerver számára mint illetékes - adatokat szolgáltatni. Ha egy név dolgában egy szerver az Internet számára elsődleges információforrás, azaz illetékes, azt úgy szokás kifejezni, hogy az ő adata autoritatív.
73.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Mindenki ismer Internet neveket: mail.whitehouse.com, reklam.radio.hu. Az Internet nevek fordított fa szerint szerveződő hierarchiát alkotnak. A fa fordított, mert a gyökér a hierarchia legmagasabb foka. A nevek feloldása a gyökértől kezdődik, és fokról fokra halad előre. A név-fa különböző elágazási pontjaiért és ágaiért különböző szerverek felelősek. Egy-egy szerver több ágért is felelős lehet. A név-fa egy egy pontját domain-nek, domain névnek vagy egyszerűen név-nek nevezzük. A név hierachia A hierarchia csúcsát 'root'-nak, gyökérnek nevezzük. Az ez alatti neveket top level domaineknek, TLD-knek mondjuk. Amikor az Internet még csak USA hálózat volt, a következő TLD-k voltak használatosak: - edu - amerikai egyetemek, oktatási intézmények - com - vállalatok - mil - katonai szervezetek - gov - kormányhivatalok - net - hálózati szervezetek - org - mindenféle más szervezet - arpa - az Internet ősében, az Arpanetben levő gépek neveire szolglált kezdetben. Az inverz nevek feloldásánál (ld. később) mind a mai napig fontos szerpe van. Az USA-n kívüli domainek számára az ISO 3166 szabványban meghatározott kétkarakteres országkódot kezdték használni. Példák: - be - Belgium - pl - Lengyelország - hu - Magyarország A hierarchia nagyon hasonlít az operációs rendszerek hierachikus fájlstruktúrájához (pl. C:\anyagok\majus\jelentes1.txt), csak az alá-főlérendeltség itt éppen fordítva, jobbról balra olvasható le. Pl. gep.csoport.osztaly.intezet.hu. A TLD elnevezés mellett használatos még az SLD (second level domain) kifejezés is, a hierarchia második szintjén levő domainekre. Zónák A név-fa zónákra oszlik: egy-egy zóna a fa egyben kezelt része. Sokszor - de nem feltétlenül, - egybeesik egy aldomainnel. Például egy zóna lehet az osztaly.intezet.hu és minden név, ami a hiararchiában ez alatt van. Egy zóna például az összes TLD-t tartalmazó root zóna is. Egy zóna a 'láttató', az 'autoritatív' szerver szempontjából egy egység, rendszerint egy fájl. Egy-egy zónát több szerver is láttat(hat). Ezek közül az egyik az elsődleges, a többi (ha van) másodlagos. Az elsődleges szerveren az adatok a zóna adminisztrátor munkájának eredményeképpen ténylegesen változnak. A másodlagos szerver(ek) a zóna adatait meghatározott rend szerint az elsődleges szervertől tükrözi(k). A tükrözés rendjét az elsődleges szerveren a rendszeradminisztrátor a zóna konfigurációjával határozza meg.
74.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Delegálás A hierarchia egyes darabjait a zóna adminisztrátora tovább delegálhatja más szerverekre. Például az intezet.hu domain gazdája az osztaly.intezet.hu aldomain láttatását, autoritását az illető osztály egy meghatározott gépére bízhatja a konfigurációban: mindenki felelős és úr lehet a saját illetékességi körében (szubszidiaritás elve). A root zóna sőt még a TLD-k (edu, gov, hu stb.) is jóformán mást sem tartalmaznak mint ilyen delegálást. Így jön létre a hierarchikus, osztott adatbázis. A delegálás azonban nem feltétele a több szintű név megadásának. Például lehetséges, hogy az osztaly.intezet.hu nincs delegálva, nem különálló zóna, mégis létezik a gep.osztaly.intezet.hu domain, mert az intezet.hu zóna gazdája bevezette a pontot (.) tartalmazó gep.osztaly nevet. Ezt éppen úgy megteheti, mint a gep-osztaly vagy az osztalygepe nevek bevezetését, melyeknek hatása a gep-osztaly.intezet.hu, illetve az osztalygepe.intezet.hu nevek létrejötte. Domain nevek A hierarchia következtében minden név egyedi. Lehet, hogy az Internet több pontján is elneveznek egy gépet pl. jupiter-nek, de nevük egyértelmű, ha a teljes domain nevüket mondjuk: - jupiter.osztaly.intezet.hu. - jupiter.arizona.edu. A domain neveknek ezt a teljes alakját, ami a nevet a gyökér domainig tartalmazza FQDN-nek (Fully Qualified Domain Name), a domain név pontokkal elválasztott darabjait pedig szegmenseknek nevezzük. Annak jelzésére, hogy a domain név teljes, a név végére pontot teszünk. Valójában a TLD-re (hu, edu) való végződés nem garantálja, hogy a név FQDN: elképzelhető és tökéletesen szabályos a jupiter.arizona.edu.osztaly.intezet.hu domain név is. Domain nevekben megengedett karakterek a latin ABC betűi [a-z], a számjegyek [09] és a kötőjel (-). Kis- és nagybetű egyformán használható, és nem jelent különbséget. Sajnos nem állhat domain névben ékezetes karakter. Gyakori hiba, hogy aláhúzás (_) karaktert adnak meg domain nevekben. Az eredeti definició (RFC1035) az egyes szegmensek elején csak betűt engedett meg, a későbbi (RFC1123) megengedi a számmal kezdődő szegmenset is. Például szabályos a 3com.com domain. Kötőjel viszont nem állhat továbbra sem se szegmens név elején, sem végén. Cím - név hozzárendelés Az Interneten nem csak arra van szükség, hogy nevekből IP címeket nyerjünk, hanem arra is, hogy IP címekből domain neveket. Ez a szolgáltatás - amit inverz, vagy reverz feloldásnak neveznek -, a hálózati biztonság szempontjainak erősödése miatt egyre nagyobb jelentőségű. Például sok FTP vagy levelező szerver nem fogad el kéréseket csak olyan gépekről, amiknek címéből a hozzájuk tartozó domain nevet ki lehet deríteni. Vannak szolgáltatások, amik csak bizonyos domainekből érhetők el.
75.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A cím-név feloldás érdekében bevezették az in-addr.arpa domaint. IP címeket általában úgynevezett pontozott decimális (dotted decimal) alakban szokás megadni, ilyesformán: 150.151.152.153. Az ehhez a címhez tartozó nevet úgy kapjuk meg, hogy a domain rendszertől megkérdezzük a 153.152.151.150.in-addr.arpa névhez tartozó rekordot. Az in-addr.arpa domainban éppen úgy delegálják az egyes aldomaineket mint minden más zónában. Rezolverek és DNS szerverek Hogyan is zajlik a névfeloldás? Tételezzük fel, hogy a jupiter.arizona.edu nevet kell feloldani, mert pl. oda akarunk egy levelet továbbítani, vagy ftp-vel belépni. Ezért az általunk használt programnak - pl. a web böngészőnek -, megadjuk a jupiter.arizona.edu domain nevet. Programunknak ekkor meg kell állapítania, hogy milyen IP cím is tartozik ehhez a domain névhez. Ezt a funkciót ellátó egységet nevezzük rezolvernek, feloldónak. Gépünkön a TCP/IP szoftver telepítésekor, konfigurálásakor meg kellett adni egy vagy több DNS szervert. Ezekhez fordul a rezolver. A DNS szerver lehet a gép saját maga, vagy - elvben - tetszőleges gép az Interneten. Tehát elvben lehetséges, hogy egy Indonéziában levő számítógép egy Dániában levő name szervert állít be a rezolver konfigurációjában. Persze az ésszerűtlen. Célszerű egy hálózati értelemben közeli szervert beállítani. A rendszergazdák kedves kötelessége erre vonatkozó információval ellátni felhasználóikat. A rezolver rendszerint néhány konfigurációs fájlból és könyvtári szubrutinból áll. Gyakorlatilag minden TCP/IP-t használó, Internetbe kapcsolt számítógépen szükség van rá. A rezolver tehát nem végez közvetlenül névfeloldást, hanem bizonyos általa ismert névszervereket kér meg arra, hogy a feloldást elvégezzék. A rezolver konfigurációban a DNS szerverek megadásánál értelemszerűen IP címeket kell használnunk. Sok konfiguráló program a szerverek megadásánál használja az 'elsődleges' (primary), 'másodlagos' (secondary) kifejezéseket. Ez gyakran zavart okoz, mert összekeverik a zónáknál használatos hasonló kifejezésekkel. A rezolver konfigurációnál megadott elsődleges/másodlagos névszerver a látásra vonatkozik, vagyis arra, hogy kliensünk milyen név szervereket kérdez. A zóna definíciónál pedig az elsődleges névszerver az, amiről a másodlagos szerverek tükrözik a láttatott, mutatott zónát. Amikor a rezolver a konfigurációjában megadott névszerverhez fordul, hogy például a jupiter.arizona.edu névhez tartozó IP címet megtudja, akkor a szerver általában nem válaszol azonnal. Példánkban legyen a kérdezett névszerver a ns.intezet.hu. Az ns konfigurációjának archimédeszi pontja - hasonlóan a rezolver konfiguráció DNS szerver IP címeihez -, a gyökér névszerverek IP címe. Ezek valamelyikét kérdezi az ns névszerver. Egy root névszervert kérdezve például a jupiter.arizona.edu névről, az nem ad mást, mint a .edu zónáért felelős név szerverek listáját. Az ns névszerver ekkor egy újabb kérdést intéz a .edu névszerveréhez, aki újra csak arra vonatkozóan ad információt, hogy hova lehet fordulni az arizona.edu nevek feloldásáért. Ilyen módon a ns rekurzív módon oldja fel a nevet, melynek végén a kérdező kliens gép rezolverének megadja a választ. A DNS szerverek általában nem végeznek bármely kliens számára ilyen rekurzív feloldást, hanem csak a konfigurációjukban meghatározottakra. 76.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Cache, TTL A névszerverek az általuk megtudott neveket tárolják azzal a céllal, hogy ha újra megkérdezik tőlük, akkor ebből a cacheből azonnal tudjanak válaszolni. Ennek többszörös haszna van: csökkenti a hálózati forgalmat, és gyorsítja a névfeloldást. A cacheben minden megtudott nevet, csak egy bizonyos ideig tárolnak. Ha ez az idő lejárt, akkor egy újabb kéréskor - hiába lenne a cacheben az információ-, a névszerver újra kérdezi azt. Ilyen módon, ha a névhez tartozó információ esetleg változik, arról tudomást szerezhet. Azt az időt, ameddig a cacheben van egy-egy információ, nem a tárolóban, hanem a láttató, az autoritatív szerverben döntik el: minden rekordhoz tartozik egy - sokszor implicit módon megadott - TTL (Time To Live) érték. Ennyi másodpercig tárolják a szerverek a cacheükben az információt. Névszerverek funkció szerint Caching only szerverek A névszerverek egy része nem autoritás semmilyen névre, hanem csak arra szolgál, hogy feloldja a neveket a kliensek számára. Ezeket nevezzük 'caching only' - csak cache-elő - névszervereknek. Általában ajánlatos minden lokális hálózaton legalább egy névszervert működtetni. Ha nincs 'láttató' feladat , akkor caching-only szerverre van szükség. Láttató, autoritatív szerverek Ahogy már erről szó volt, ezek azok a név szerverek, melyeknek az (is) feladata, hogy bizonyos neveket ők mutassanak meg mások számára. A domain név-fa egy egyben delegált ágát, melyért egy szerver felelős, zónának nevezzük. Egy zónáért felelős névszerverek közt van egy kitüntetett, amelyen az adminisztrátor a konfigurációt változtatja. Az (esetleges) többi ezt a zónát tükrözi. A kitüntetett szerverre elterjedt kifejezés az 'elsődleges', 'primary' a tükröző szerverekre pedig a 'másodlagos', 'secondary'. Újabban (elsősorban a 8. változatú BIND megjelenésének hatására) inkább a master és a slave neveket használják. A master és slave név azért szerencsésebb, mert nem keveredik a rezolver konfigurációknál megadható 'primary'/'secondary' szerverekkel. Sajnos a 'slave' szerver kifejezés is használatos már régebben és más értelemben: az olyan szerverekre mondjuk hogy 'slave', amelyik csak forwarderek közvetítésével érintkezik az Internet nagyobb részével. Egy szerver lehet egy zónára 'master' egy másikra 'slave'. Valójában gyakori is, hogy két intézmény kölcsönösen 'slave' autiritatív szerver a egymás zónáira. A névfeloldás szempontjából a 'master' és a 'slave' szerverek között semmi különbség nincsen: egyformán autoritatív mindegyik. A névszerverek a név feloldás során bármelyikhez fordulhatnak. A valóságban a kód úgy működik, hogy a szerverek egy-egy zóna autoritatív szerverei közül igyekeznek azt kérdezni, amelyik gyorsabban válaszol, aminek érdekében egy ravasz algoritmust használnak: kezdetben mindegyik névszervert megkérdezik, mérik a válaszidőt, aztán azt preferálják, ami gyorsabban válaszolt, de a lassabb szerverek idővel újra szót kaphatnak, mert minden kérdésnél 'csökken a büntetésük'.
77.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Forwarder szerverek Egy névszerver gyakorlatilag kiegészítheti a cache-ét más szerverek cacheével, ha a forwarder opciót használják a konfigurálásánál. Ha pl. kicsi.valahol.hu gépen a DNS konfigurációban megadják, hogy a nagy.valahol.hu forwarder legyen számára, akkor a kicsi-n történő névfeloldás úgy zajlik, hogy ha a kicsi cache-ében nincs benne a kért név, akkor a kicsi DNS szerver mielőtt a világban a név-fa hierarchiának megfelelő módon elkezdene érdeklődni , megkérdezi a nagyot. Ha annak a cacheében megtalálható a keresett rekord, akkor válaszol, és így a kicsi gyorsan megtalálja a választ. Elképzelhető, hogy egy-egy intézménynél több kisebb szerver használ egy közös nagyobb forgalmú forwardert. Slave szerverek Az olyan szervert, ami csak forwardert (esetleg többet) használ a nevek feloldására, slave szervernek nevezzük. Slave szerverre van szükség tűzfal mögött, ahol a szervernek módja sincs, hogy közvetlenül kilásson az Internetre. Ahogy már említettük ez a fajta 'slave' fogalom nem keverendő össze a 'slave' fogalmával egyegy zóna szempontjából: a forwarder(ek)re támaszkodó slave szerver korlátozott a látás szempontjából, egy-egy zóna slave szervere pedig az illető zóna mutatása, láttatása szempontjából. Zónafájlok A névszerverek az egyes zónák adatait általában egy-egy fájlban tárolják. A 'master' szerveren az adminisztrátor személy közvetlenül, vagy valamilyen program közvetítésével maga módosítja ezt a fájlt. A 'slave' szervereken a fájl a tükrözés eredménye. A zónafájl rekordokból, RR-ekből (resource record) áll. Nagyon sok fajta rekordot tesznek lehetővé az RFC-kben megadott definíciók. A következőkben ezek közül ismertetjük a legfontosabbakat. A rekordok formáját az RFC1035 határozza meg, és az a következő: cimke ttl osztály típus adatok
A 'cimke' a domain rekord neve. Lehet üres, ilyenkor az előtte levő rekord címkéje érvényes. A 'ttl' a rekordhoz tartozó time to live időt adja meg másodpercben. Nem kötelező paraméter. Ha elhagyjuk, akkor a zónára vonatkozó alapértelmezés lesz a rekordhoz tartozó érték. A következő paraméter értéke gyakorlatilag mindig IN, azaz Internet osztály. Ez is elhagyható. A 'típus' mondja meg, hogy milyen fajta információról is van szó. Pl. IP cím (A rekord), name szerver információ (NS rekord) stb. Az 'adatok' mező a rekord típusától függő információt tartalmaz.
78.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Rekordok SOA - Start of Authority rekord, zóna kezdő rekord A SOA rekord adja meg egy zónára vonatkozó közös információkat. A rekord formáját egy példán mutatjuk be: valami.hu.
SOA
gep.valami.hu 1999093001 86400 1800 604800 43200)
mester.valami.hu. ( ;Serial nr. ;Refresh ;Retry ;Expire ;TTL
A címke (valami.hu.) a zóna neve. A SOA kulcsszó utáni első paraméter a zónához tartozó elsődleges szerver domain neve. A második paraméter egy e-mail cím, melyet úgy kapunk, ha az első olyan . karaktert, amit nem előz meg backslash (\) , at jelre, @-ra cseréljük. A serial nr. a zóna sorszáma. Arra szolgál, hogy a slave (másodlagos) szerverek ellenőrizhessék, hogy a náluk levő zóna tartalom nem avulte el. Akkor töltik le az master (elsődleges) szerverről a zóna tartalmát, ha a náluk levő zóna sorszám kisebb. Arra kell tehát vigyázni az elsődleges szerver adminisztrátorának, hogy ez a szám mindig növekedjen, ha valamit változtat, ha új változat keletkezik a zónából. Szokás ezt a sorszámot ÉÉÉÉHHNNVV alakban megadni, ahol ÉÉÉÉ az év négy jegyen, HH a hónap két jegyen, NN a nap két jegyen, VV a napon belüli változat két jegyen ábrázolva. Az ez után következő négy paraméter mind másodpercben megadott érték. Az első a refresh, a frissítés idő azt mondja meg, hogy mennyi időnként kell a slave szervereknek a master-től megkérdezni, hogy a zóna sorszáma mennyi, vagyis, hogy szükséges-e a zónát frissíteni náluk. A retry idő azt mutatja, hogy ha a frissítés nem sikerült, akkor mennyi időt várjanak, mielőtt újra próbálkoznának. Az expire azt mondja meg, hogy ha nem sikerül a master-rel kommunikálniuk, ennyi ideig szolgáltatják a zónát a világ számára. A TTL érték lesz a zóna rekordjaira érvényes alapértelmezés. Figyelni kell rá, hogy észszerűen állítsuk be a zóna SOA rekordjában az idő értékeket. A legtöbb esetben az 1 napos (86400) refresh, 1 órás (3600) retry, 1 hetes (604800) expire és 1 napos (86400) TTL megfelelő. Ha gyors változás várható, akkor érdemes a TTL értéket kicsire venni. A dolog természetéből adódóan súlyos zavarokat okoz, ha az expire idő nem nagyobb mint a refresh: a másodlagos zóna nem fogja szolgáltatni az adatokat az idő egy részében. A 8-as változatú Bind-nál a másodpercben értendő dimenzió nélkül megadott számok helyett használhatunk emberek számára könnyebben kezelhető mértékegységekben megadott számokat, ilyenformán: 1W2D3H, ahol a W (week) heteket, D (day) napokat, H (hour) órákat jelent.
79.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A - Address, cím rekord Ez a leggyakrabban használt rekord, amely arra szolgál, hogy egy domain névhez IP címet rendeljünk. Például: masina A 190.111.222.3
Sokszor használt tulajdonságát látjuk itt a zónafájlnak: nem írjuk ki egy domain (jelen esetben a masina) teljes domain nevét, csak annak első részét. A végére oda kell érteni azt a vonatkoztatási rendszert, ahol éppen vagyunk. Ezt először is maga az a zóna adja meg, amire ez a fájl vonatkozik. Például ha a valami.hu zónáról van szó, akkor a 'masina' a végére biggyesztett pont nélkül úgy értendő, mint masina.valami.hu. Ez a tulajdonság legtöbbször igen kellemes, mert például egy 200 A rekordot tartalmazó zóna esetében nem kell 200-szor megismételnünk a zónában, hogy 'egyik.valami.hu., masik.valami.hu.' hanem elég annyit írnunk 'egyik, masik'. Vigyáznunk kell azonban, mert könnyen elfelejtkezhetünk arról, hogy pontot kell tennünk a domain név végére, ha azt teljes egészében kiírjuk valahol. Figyeljük meg ebből a szempontból a SOA rekordra felhozott példát fentebb. NS - Name Server, névszerver rekord Ez a rekord szolgál arra, hogy egy domain névszervereit megadjuk. Ilyen módon a domain egy delegálási pont. Példa: osztaly NS gep.osztaly.valami.hu.
Ezzel a rekorddal deklaráljuk, hogy az 'osztaly' aldomain névszervere a gep.osztaly.valami.hu. Ajánlatos - bár technikai értelemben nem kötelező - legalább két névszervert megadni. Ilyen módon a zóna adatai akkor is elérhetők a világból, ha az egyik gép, vagy a hozzá vezető vonal valami miatt kiesne. A felsőbb szinten példánkban a valami.hu zóna alatt -, nem látszik, hogy a szerverek közül melyik a master és melyik a slave. Szigorúan véve az NS rekordoknak csak a felsőbb szinten, az 'apuka' zónában van szerepe, indokolt azonban a zónában is felsorolni. Az NS rekord paramétere egy gép domain neve. Szükséges, hogy ehhez a névhez közvetlenül A rekord tartozzon. Elő-előfordul, de hibás CNAME rekorddal definiált domain nevet megadni. Glue rekord Gyakori, hogy a delegált zóna egyik name szervere éppen a zónában van, mint a fenti példában. A gep.osztaly.valami.hu rekordnak az osztaly zónában van a helye, de mégis szükség van arra, hogy egy szinttel feljebb, a valami.hu zónában is felsoroljuk, különben csapdába kerülünk. Ezért fel kell vennünk egy nem oda való A rekordot: gep.osztaly A 190.1.2.3
Az ilyen, idegen A rekordot nevezik glue (ragadvány) rekordnak. Előfordul, hogy adminisztrátorok akkor is felsorolnak nem a zónába való A rekordot, amikor az nem egy onnan delegált aldomainben van, ez hiba. Semmi haszna és zavart okoz. Tehát például ha az osztaly.valami.hu zónának egy másik névszervere a mas.nevszerver.intezet.hu, akkor ehhez nem kell glue rekordot csatolni a valami.hu zónában, hiszen ennek a névszervernek az A rekordját ettől a delegálástól teljesen függetlenül lehet megtudni. 80.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Lame delegálás Ha valahova delegálunk egy zónát, akkor az ottani adminisztrátorral meg kell beszélnünk, hogy azt folyamatosan szolgáltassa is. Ha ez nem történik meg, akkor beszélünk 'lame' delegálásról. Sokszor előfordul például amiatt, mert a delegált zóna slave szervere nevet változtat, vagy meg is szűnik, és erről elfelejtik értesíteni a felettes zóna gazdáit. CNAME - Canonical Name, kanonikus név rekord Ez a rekord arra való, hogy egy hostnak becenevet adjunk. Például: www CNAME gep
Ha ez a rekord van mondjuk a valahol.hu zónában, az azt mutatja, hogy a www.valahol.hu egy másik neve a gep.valahol.hu-nak. Nagyon hasznos az ilyen név például a következő esetben: tegyük fel, hogy egy idő után a gep.valahol.hu meg is szűnik, és a szolgáltatást az ujdivat.valahol.hu veszi át. Ilyenkor elég csak a CNAME rekordot módosítani, így: www CNAME ujdivat
A világ számára a valahol.hu web lapjai továbbra is a www.valahol.hu gépen lesznek elérhetők. Az is gyakori, hogy egy gép több funkciót is ellát, és a funkciók mindegyikéhez tartozik egy-egy CNAME rekord, ami ugyanarra a gépre mutat. Például news.valahol.hu, ftp.valahol.hu mind mutathatnak ugyanoda. Mint látjuk, a CNAME rekord paramétere egy domain név. Általában ez a név már A rekorddá oldható fel. Megengedett, de nem ajánlatos a CNAME-ra mutató CNAME rekord. MX - Mail eXchanger, levelező szerver rekord Ez a rekord szolgál arra, hogy egy domainba érkező levelek levelező szerverét kijelölje. A rekord formátuma egy példán: valahol.hu.
MX MX
10 20
masina.valahol.hu. mas.mashol.hu.
Ezek a sorok azt jelentik, hogy a [email protected] alakú címre érkező leveleket a masina.valahol.hu, vagy a mas.mashol.hu. gépekre kell küldeni. Az MX rekordok első paramétere egy szám, ami a rekord preferenciát jelenti. Kötelező paraméter, de csak akkor van jelentősége, ha több MX rekord tartozik ugyanahhoz a névhez: kisebb szám nagyobb preferenciát jelent. Példánkban tehát csak akkor fogják a levelező szerverek a mas.mashol.hu-ra küldeni a valahol.hu domainba szóló leveleket, ha a preferáltabb masina.valahol.hu nem elérhető. Lehetséges több MX rekordot egyenlő preferenciával megadni. Ilyenkor véletlenszerű, hogy melyikre érkezik be egy-egy levél. Az MX rekord második paramétere egy domain név. Fontos, hogy ehhez a névhez már A rekord tartozzon. Nem megengedett olyan domain nevet megadni, ami csak egy CNAME-ra, vagy másik MX-re mutat.
81.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az MX rekord gyakori alkalmazása, amikor egy intézményben egységes, egyszerűsített, és könnyen megjegyezhető levélcímeket vezetnek be a segítségével. Például a Firma cégnél [email protected] alakú levelezési címe lehet mindenkinek, ha a firma.hu MX rekord egy - akár időben változó - levelező szerverre mutat, ahol aztán feloldják a levél cím első részében a név aliast, esetleg tovább küldik a levelet egy másik szerverre. TXT - Text, szöveges rekord Ez a rekord tetszőleges szöveges információt tartalmazhat. Példa: Modern
TXT
"Ez a gep mar megszunt"
A TXT rekord paramétere egyetlen, idézőjelek közé zárt ASCII karaktersorozat. HINFO - Hardware information, hardver információ rekord Akárcsak a TXT rekord ez a rekord is emberi olvasásra szánt, egy számítógépről nyújt felvilágosítást. Példa: masina HINFO VAX
VMS-4.7
Mint látható, két paramétere van. Az első a hardver típust, a második az operációs rendszert szokta jelölni. PTR - Pointer rekord Ahogy arról már szó volt, nem csak név-cím, hanem cím-név hozzárendelésre is szükség van. Ezt a szolgáltatást elsősorban nem emberek, nem is kliens programok, hanem szerver programok használják, annak kiderítésére, hogy egy hozzájuk érkezett IP csomag milyen domainhez is tartozik. DNS rendszerben az in-addr.arpa domain alá tartozó ág szolgálja a cím-név felosztást. Itt a zónák delegálása az IP címtartomány egyes darabjainak megfelelően történik. Példa: 140.in-addr.arpa.
NS
...
Ez a zóna a 140.x.y.z alakú IP címek inverz domain név szolgáltatásánál játszik szerepet. Ha egy intézmény egy C osztályú címet kap, vagyis gazdálkodhat pl. a 192.84.124.x alakú címekkel, akkor célszerű, ha nála van a 124.84.192.in-addr.arpa zóna elsődleges névszervere is. Ebben a zónában vannak azután a PTR rekordok. Például: 22
PTR
gep.valahol.hu.
A PTR rekord egyetlen paramétere az a domain név, ami az illető IP címhez tartozik. A paraméterként megadott domain név A rekorddá kell forduljon az 'egyenes' feloldáskor. Amikor egy domain-adminisztrátor - elterjedt kifejezéssel 'hostmaster' - egy gépnek, vagy valamilyen hálózati interfésznek nevet, és IP címet oszt, fontos, hogy gondoskodjon az inverz feloldásról is: általában párhuzamosan van szükség egy-egy A rekord és PTR rekord bejegyzésére. 82.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A dolog természete miatt az 'egyenes' és az inverz zónák nem járnak feltétlenül együtt. Ha az osztaly.intezet.hu zónát kezeljük, és gazdálkodunk egy IP címtartománnyal, akkor nem nyilvánvaló, hogy mi is a kiosztott IP címekhez tartozó inverz zóna, vagy hogy azt egyáltalán mi kezeljük. Kezdő domain név adminisztrátoroknál gyakori hiba, hogy elfelejtkeznek az inverz domainről. A DNS hierarchikus szerkezetéből következik azonban, hogy bárki számára egyértelműen kideríthető, hogy ki is a felelős az általunk osztott IP címekhez tartozó in-addr.arpa zónáért. Neki kell azután szólni, hogy a megfelelő bejegyzést végezze el, vagy delegálja tovább a zóna egy darabját nekünk. Például ha a 'host' parancsot használjuk a DNS nézegetésre, és arra vagyunk kíváncsiak, hogy kinek is kell bevezetni a 202.103.132.169 IP címhez tartozó inverz rekordot, akkor a következő láncon haladhatunk: %host -t any 202.in-addr.arpa 202.in-addr.arpa NS NS.RIPE.NET 202.in-addr.arpa NS NS.TELSTRA.NET 202.in-addr.arpa NS NS.APNIC.NET 202.in-addr.arpa NS SVC00.APNIC.NET 202.in-addr.arpa SOA NS.APNIC.NET inaddr.APNIC.NET ( 1999091501 ;serial (version) 86400 ;refresh period (1 day) 7200 ;retry interval (2 hours) 2592000 ;expire time (4 weeks, 2 days) 345600 ;defaultttl (4 days) )
Tehát a 202.x.y.z alakú IP címekhez tartozó inverz zónákat az ns.apnic.net gépen kezelik, és szolgáltatja még három másik name szerver. Haladjunk tovább: %host -t any 103.202.in-addr.arpa 103.202.in-addr.arpa NS 103.202.in-addr.arpa NS 103.202.in-addr.arpa SOA inaddr.apnic.net ( 1999081001 86400 7200 2592000 345600 )
ns.telstra.net svc00.apnic.net ns.apnic.net ;serial(version) ;refresh period (1 day) ;retry interval (2 hours) ;expire time (4 weeks, 2 days) ;default ttl (4 days)
A 202.103.x.y alakú IP címek zónájának hazája ezek szerint szintén az ns.apnic.net. És itt: %host -t any 132.103.202.in-addr.arpa 132.103.202.in-addr.arpa does not exist, try again
és: %host -t any 169.132.103.202.in-addr.arpa 169.132.103.202.in-addr.arpa does not exist, try again
83.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Vagyis a helyzet kulcsa annak a személynek a kezében van, akit az [email protected] címen érhetünk el: vagy tovább kell delegálnia megfelelő helyre a 132.103.202.in-addr.arpa zónát, vagy neki kell bevezetnie a 169-es IP címhez tartozó PTR rekordot. De Groot féle inverz feloldás A klasszikus Interneten az IP címeket A, B, és C osztályú hálózati darabokban osztották, és amikor egy intézmény egy címtartományt kapott, pontosan meg lehetett mondani, hogy melyik a.in-addr.arpa, b1.b2.in-addr.arpa vagy c1.c2.c3.in-addr.arpa zóna tartozik a kapott címtartományhoz. Ennek a delegálását kellett az intézmény adminisztrátorának kérnie, és ettől kezdve könnyen kezelhette az egyenes és inaddr.arpa zónáit. A CIDR (Classless Inter-Domain Routing) elterjedésével gyakori, hogy egy-egy intézmény például csak egy negyed részét kapja meg egy C osztályú címnek. Az ilyen címtartományt úgy szokás jelölni, hogy a legkisebb használható cím után / jellel elválasztva megadjuk a tartományt jellemző bitmaszk egyeseinek számát. Például: 193.225.86.128/26 jelenti a 193.225.86.128-tól 193.225.86.191-ig terjedő címtartományt. Előfordulhat ilyen módon, hogy egy C osztályú cím 4 vagy még több egymástól távol eső intézmény között oszlik meg. Ha az ilyen tartományhoz tartozó inverz domaint a hagyományos módon szeretnénk kezelni, akkor minden intézménynek egy központi helyen kellene a PTR rekordjait beíratni. Ez bonyolult és kellemetlen. Sokkal jobb, ha - mint a klasszikus esetben - minden intézmény saját maga jegyezheti be a saját PTR rekordjait. A problémára Geert Jan de Groot adott megoldást, és azt az RFC2317 írja le. A megoldás a DNS technika szellemes alkalmazását mutatja. A darabokra szabdalt C osztályú címhez tartozó in-addr.arpa zónában nem vezetünk be PTR rekordokat, viszont minden egyes rekordhoz bevezetünk egy CNAME rekordot. Ez a CNAME rekord olyan domain névre mutat, ami a címet birtokló intézmény adminisztrátora definiál. Például ha a 193.225.86.0 hálózatról van szó, akkor a 86.225.193.in-addr.arpa zónába bevezetünk 256 CNAME rekordot. Ezek jobb oldalán elvben tetszőleges domain név lehet, de szokás olyat megadni, ami az illető címtartomány kezdetét és nagyságát is jelzi, ilyenformán: 131.86.225.193.in-addr.arpa. CNAME 131.128/26.86.225.193.in-addr.arpa.
Az egyes kiosztott IP címtartomány darabokhoz megfelelően delegált in-addr.arpabeli zónák tartoznak. Például a fenti esetben: 128/26.86.225.193.in-addr.arpa.
NS
ns.intezmeny.hu.
Ilyen módon a C osztályú címhez tartozó zónában a címek kiosztása után egyszer s mindenkorra rögzíteni lehet a bejegyzéseket, a kis címtartományt birtokló helyen pedig csak arra van szükség, hogy az inverz zóna neve c1.c2.c3.in-addr.arpa alak helyett cim/maszk.c1.c2.c3.in-addr.arpa alakú legyen. Ebbe a zónába aztán éppen úgy kell PTR rekordokat felvenni mintha teljes C osztályú címhez tartozna a zóna. Például: 131
PTR
bagoly.intezmeny.hu.
84.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Ha ez a rekord a 128/26.86.225.193.in-addr.arpa. zónában van, akkor a fenti CNAME rekorddal együtt két lépcsőben feloldást ad a 131.86.225.193.in-addr.arpa domain névre, melynek eredménye bagoly.inetzmeny.hu. Útvonalválasztás a TCP/IP meghatározásában A fentiekben említettük, hogy az IP implementációknak gondoskodniuk kell a datagrammnak a célcím által jelzett címre való eljuttatásáról. Azt azonban nem írtuk le, hogy ez hogyan is történik. Egy datagramm rendeltetési helyére juttatásának mikéntjét az útvonal-választás (routing) kifejezés jelöli. A részletek nagymértékben függenek az adott implementációtól, viszont egy-két dolgot általánosságban el lehet mondani. Először is az szükséges, hogy az IP-t megvalósító modellel tisztában legyünk. Az IP alapállapotban azzal a feltevéssel él, hogy a rendszerek valamilyen lokális hálózatra kapcsolódnak. Feltesszük, hogy a rendszer a saját hálózatán keresztül datagrammokat tud küldeni egy másik rendszernek. (Ethernet alapú hálózat esetén egyszerűen a célállomás Ethernet címét kell megkeresnie, majd a datagrammot ki kell adnia a hálózatra.) A probléma akkor jelentkezik, amikor egy másik hálózaton lévő rendszerhez kell küldeni datagrammot. Itt lépnek be az átjárók (gateway). Az átjáró egy olyan hálózati eszköz, amely egy hálózatot két vagy több másikkal köt össze. Ez a gyakorlatban legtöbbször egy olyan számítógépet jelent, amelynek több hálózati interfésze van. Ez a számítógép a két hálózat között átjáróként üzemelhet. A hálózati szoftvert úgy kell beállítani, hogy az átjáró a két hálózat között datagrammokat tudjon küldeni. Ha egy gép a 128.6.4 hálózatról olyan datagrammot küld az átjáró felé, amely a 128.6.3 hálózaton lévő gépek egyikének szól, akkor azt az átjáró továbbítja a célállomás felé. A főbb kommunikációs központokban több átjáró is található, amelyek különböző hálózatokat kötnek össze egymással. Az IP szerinti útvonal-választás teljes mértékben a célállomás hálózati számán alapszik. A hálózatba kötött minden egyes számítógép rendelkezik egy táblázattal, amelyben a hálózati számokat tárolják. Minden hálózatszámhoz tartozik egy átjáró, amelyen keresztül az adott hálózathoz eljuthatunk. Azt észre kell venni, hogy az átjáró nincs feltétlenül arra a hálózatra kötve: egyszerűen csak az a legjobb út, amelyen keresztül az adott hálózathoz el lehet jutni.
85.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Amikor egy számítógép datagrammot akar küldeni egy másiknak, akkor először azt ellenőrzi, hogy a fogadó nincs-e a saját hálózatán. Ha ott van, akkor a datagrammot közvetlenül neki küldi el. Ha nincs ott, akkor a rendszer keresni kezdi a táblázatban a célállomás hálózati számát, és a datagrammot annak a hálózatnak az átjárója felé küldi. A hálózati számokat és átjárókat felsoroló táblázat esetenként igen nagy terjedelemre tehet szert. Az Internet például több száz hálózatot foglal magába. Különböző stratégiákat dolgoztak ki annak érdekében, hogy az útvonal-választási táblák méretét a lehető legkisebb értéken tartsák. Az egyik ilyen módszer az alapértelmezett útvonalak használata. Gyakran fellép az az eset, hogy egy hálózatból csak egyetlen átjárón keresztül lehet kijutni. Egy ilyen átjáró például egy Ethernet alapú lokális hálózat és egy gerinchálózat között létesíthet kapcsolatot. Ilyenkor persze nincs szükség arra, hogy az útvonal-választási táblában az összes külső hálózat szerepeljen. Az átjárót egyszerűen alapértelmezettnek definiáljuk, és így a választott útvonallal nem rendelkező datagrammok egyenesen az átjáróhoz kerülnek. Egy így beállított átjáró akkor is használható, ha egy hálózaton több is működik belőle. Az átjárókat úgy tervezték, hogy a "Nem ez a legjobb átjáró -használd inkább ezt és ezt." üzenetet generálni tudják. (Az üzenetet az ICMP-n keresztül adják le.) A hálózati szoftverek többsége ezt az üzenetet használja arra, hogy az útvonal-választási táblájába bejegyzéseket helyezzen el. Tegyük fel, hogy a 128.6.4 hálózatnak két átjárója van: a 128.6.4.1 és a 128.6.4.59. Tegyük fel továbbá, hogy alapértelmezett átjáróként a 128.6.4.59-t állítottuk be, és az útvonal-választási táblában nincs más bejegyzés. Mi történik, ha olyan hálózatra akarunk datagrammot küldeni amelyiknek nem ez az átjárója? Mivel ilyen célcím bejegyzés nincs a felhasználói gép táblázatában, ezért a datagramm egyenesen a beállított géphez, a 128.6.4.59-hez kerül. Ez persze a rossz átjáró. A datagrammunkat a 128.6.4.1-hez fogja továbbítani. Ezen kívül egy hibaüzenetet is küld nekünk "Ehhez a hálózathoz használd a 128.6.4.1 átjárót" szöveggel. A hálózati szoftverünk pedig bejegyzi az adatot a táblázatba. Ennek eredményeképpen az e felé a hálózat felé irányuló jövőbeli datagrammok egyenesen a 128.6.4.1 átjáró felé mennek. (A hibaüzenet küldéséhez az ICMP használatos. Ezt a fajta üzenetet ICMP átirányításnak (ICMP redirect) hívják.) Az IP szakértők többsége azon a véleményen van, hogy a hálózati számítógépek ne próbálják meg az egész hálózat forgalmát nyomon követni. Ehelyett azt ajánlják, hogy alapértelmezett átjárókat használjanak, és rájuk támaszkodjanak az útvonalak megállapításánál, ahogy azt a fentiekben is leírtuk. Arról nem volt szó, hogy az átjárók hogyan határozzák meg az útvonalakat. Az esetükben a fenti stratégia nem használható, hiszen az útvonal-választási táblázatuknak megfelelően teljesnek kell lennie. Ezért valamiféle útvonal-választási protokoll jelenléte szükséges, amely azt írja le, hogy az átjárók hogyan találhatják meg egymást, és hogyan frissíthetik az adatbázisukat a különböző hálózatokhoz vezető (legjobb) útvonalakról. A leggyakrabban használt routolási (útválasztási) protokoll a statikus útvonalmeghatározás mellett a RIP (Routing Information Protokoll).
86.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Alhálózatok, hálózati maszkok, CIDR Az Internetes címeket aszerint sorolták osztályba, hogy mekkora bennük a hálózatazonosító és a kiszolgáló-azonosító rész. Azok az IP-címek, amelyekben a kiszolgáló-azonosító rész nulla, magának az alhálózatnak a címei. Ezért beszélhetünk például B osztályú alhálózatról és nem csak B osztályú IP-címről. Logikus gondolat, hogy egy-egy saját hálózatot üzemeltető szervezet - cég vagy szolgáltató - a hálózatba kapcsolt gépei számának megfelelő számú alhálózatot, pontosabban alhálózatcímet kapjon. A címek eredeti osztályba sorolása azonban meglehetősen rugalmatlan, túlságosan nagy különbség van a legfeljebb 254 gépet tartalmazó C osztályú hálózat és a több mint 65 ezret tartalmazó B osztályú hálózat között. Sok szervezet néhány száz vagy ezer gépet működtet, s ennyihez B osztályú cím kell, de a B osztályú hálózat címkapacitását egyáltalán nem használja ki. A címpazarlás miatt egy időben félő volt, hogy a B osztályú címek hamarosan elfogynak. Ezen egy új megoldás, az 1985-ben bevezetett alhálózati maszk (subnet mask) segített. Az alhálózati maszk (AHM) lehetővé teszi, hogy az IP-címet rugalmasabban osszuk fel hálózat- és kiszolgáló-azonosítóra: az eredeti, például B osztályú felosztáshoz képest a kiszolgáló-azonosító részből néhány bitet hozzácsapunk a hálózatazonosítóhoz. Az átcsoportosított bitek számát az AHM adja meg. Mint az előző részben példákon láttuk, ezzel a B osztályú hálózat kisebb, egymástól független - s a C osztályúnál nagyobb - részekre osztható, s ezek független szervezetekhez rendelhetők. Korábban minden szervezetnek saját B osztályú cím kellett, de ettől fogva egy-egy B osztályú hálózaton többen is megosztozhatnak. Az AHM tehát egyfajta hálózati címtartomány-darabolóként működik. Megtehetjük ezt fordítva is: kisebb, C osztályú hálózatokból állíthatunk össze egy nagyobbat. Egy, mondjuk, 600 gépet használó cég három C osztályú hálózati címmel megcímezheti a gépparkját, és viszonylag kevés cím marad kihasználatlanul (3x254 = 762). Csakhogy a kis, C osztályú hálózatok jókora további munkát rónak a gerincútválasztókra. Egy B osztályú hálózatnak megfelelő kapacitás 256 darab C osztályú hálózatból állítható össze; de ezzel 256 bejegyzést kell beírni az útválasztó táblá(k)ba, a megfelelő B osztályú hálózatban csak egyetlen egyet. Az osztályok szerinti címkiosztás problémáján csak ideig-óráig segített az alhálózati maszk bevezetése. A kilencvenes évek elején újra felmerült a B osztályú címek elfogyásának a veszélye és az a probléma, hogy az Internet növekedésével a gerincútválasztók útválasztó-táblái kezelhetetlen méretűre növekednek. Ezért dolgozták ki 1993-ban a CIDR (Classless Internet Domain Routing) technikát. A CIDR, mint a neve is mutatja, megszünteti a hagyományos, osztályok szerinti címkiosztást, és csak a szükségleteknek megfelelő, vagyis a gépek számától függő alhálózatokat enged kialakítani az egységes címtartományon. Legalábbis elvileg, mert nem alkalmazható minden esetben, nem lévén kompatibilis sok korábbi hardver- és szoftvereszközzel. A CIDR szerint az IP-címben a hálózatazonosító mérete szinte tetszőleges lehet, és ezt a méretet vagy a hálózati prefix adja meg, vagy a CIDR maszk. A hálózati prefix azt rögzíti, hogy az IP-címben hány bit a hálózatazonosító. A formája IP-cím/hossz; a 87.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
200.5.160.0/19 például azt jelenti, hogy a 32 bites címből 19 bit a hálózat címe, s a fennmaradó 13 bit a kiszolgáló-azonosító. A CIDR ebből a szempontból felülről kompatibilis a korábbi osztályokkal, mert az A osztályú címek az IP-cím/ 8 alakban állíthatók elő, a B osztályúak IP-cím/16 alakban, a C osztályúak pedig IP-cím/24 alakban. A CIDR maszknak ugyanez a funkciója; a formája az alhálózati maszkhoz hasonlóan IP-címszerű, vagyis egy 32 bites bináris szám. Az 1-es bitek jelzik benne a hálózatazonosítót, és a 0-sak a kiszolgáló-azonosítót. A CIDR lényegében az alhálózati maszk funkciójának a kiterjesztése a teljes címtartományra. Ez azt jelenti, hogy az útválasztó táblákban immár minden IP-címhez tartozik egy prefix szám vagy egy maszk (AHM vagy CIDR), s nem kell foglalkozniuk a csomag IP-címekben az osztályt jelző első bitekkel, hiszen az osztályokra bontás megszűnt. Nézzünk erre egy példát! Tegyük fel, hogy egy Internetszolgáltatónak (Internet Service Providernek, ISP-nek) 16 ezer címre van szüksége. Az osztályokra bontás szerinti rendszerben ehhez egy B osztályú címet kellene kapnia. Ha nem használnánk alhálózati maszkot, akkor a B osztályú cím 65 ezer címéből 49 ezer (65 - 16) kihasználatlan maradna. Az AHM-mel ez elkerülhető, de az Internetszolgáltatónak továbbra is a B osztály címtartományából kell címet kapnia.
A CIDR rendszerben - mivel abban nincsenek osztályok - kaphat címet a C osztályhoz tartozó címtartományából is; legyen ez a báziscím 200.5.128.0. A táblázatból látható, hogy a hálózatprefix a 16 ezres igény miatt 18 bit hosszú, a CIDR maszk pedig ennek megfelelően 255.255.192.0. Mint a 2. ábra mutatja, ez azt jelenti, hogy a C osztályú cím hálózatazonosító részéből hat bitet hozzáteszünk a kiszolgáló-azonosítóhoz. Az így kapott hálózati címtartomány kezdőcíme 200.5.126.1, az utolsó cím pedig 200.5.191.254. Ez 16381 gép címzésére elegendő. Az osztályokra bontott rendszer szerint - mivel hat bitet tettünk hozzá a kiszolgálóazonosító részhez - 64 C osztályú hálózatot vontunk egybe. A gerinc-útválasztók útválasztó táblájába tehát 64 darab C osztályú hálózatcím helyett csak egy IP-cím került, meg annak a CIDR maszkja. Az útválasztó IP-címszerű CIDR maszkkal és a továbbítandó csomag IP-címével bitenkénti ÉS művelet végez, így állítja elő a hálózat báziscímét. Azokkal a hardvereszközökkel és szoftverekkel, amelyek nem ismerik a CIDR-t, támadhatnak bizonyos kompatibilitási nehézségek. Előfordulhat, hogy némelyik szoftver nem fogadja el a példában szereplő, s eredetileg a C osztályhoz tartozó címhez a 18 bit hosszúságú maszkot, mert a C osztályban 24 bit hosszú a hálózatazonosító. 88.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A példában említett 16 ezer gépre elegendő címtartományt az ISP feloszthatja az ügyfelei között, s önálló, egymástól független hálózati szegmenseket alakíthat ki belőle. Tegyük fel, hogy az Internetszolgáltató négy céget szolgál ki, és a lenti ábrán látható arányban osztja szét közöttük a birtokában levő címtartományt. Hogyan állítja be a címeket, és hogyan kell ehhez a saját útválasztóját konfigurálnia?
Az lenti ábrán tüntettük fel a négy cég címtartományát; az alhálózatuk címét bekereteztük. Az Internetszolgáltató teljes hálózata egyetlen bejegyzésként szerepel a gerinc-útválasztó útválasztó táblájában, a cégek alhálózatai pedig az ISP útválasztójának az útválasztó táblájában vannak bejegyezve.
Tegyük fel, hogy érkezik egy csomag az Internetről, mondjuk, a 200.5.162.54 címre. A fenti ábrán rögtön látszik, hogy ez a II. cég hálózatán levő gépnek szól. A gerincútválasztó azonban nem tudja ezt, hiszen a csomag célcímének csak az első két száma egyezik az ő útválasztó táblájában lévő hálózati IP-címmel. 89.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az útválasztó a csomag célcímével és a CIDR maszkkal bitenkénti ÉS műveletet végez, ahogyan ezt a 6. ábra mutatja, és így kapja meg a hálózat címét: az megegyezik az ehhez a CIDR maszkhoz tartozó hálózatcímmel. Ebből tudja, hogy az ISP útválasztójának kell továbbítania a csomagot. Az ISP útválasztója ugyanígy jár el: veszi az útválasztó tábla első bejegyzésének a CIDR maszkját, ÉS műveletet végez vele és a csomag célcímével, az eredményt pedig összehasonlítja a CIDR-rel együtt szereplő IP-címmel. Ha nem egyeznek, abban az esetben veszi a következő bejegyzés CIDR maszkját. Példánkban a második bejegyzéssel talál egyezést, a II. cég hálózatára fogja tehát elküldeni a csomagot. RIP A RIP (Routing Information Protocoll) a XEROX PARC által kifejlesztett GWINFO nevű protokollból származik, melyet az XNS-be RIP néven integráltak. Az Internethez 1982-ben kapcsolódik, amikor a BSD UNIX egy „routed" elnevezésű RIP implementációval került forgalomba, mely segítségével a munkaállomások routeolhattak. A RIP egyszerűsége miatt a mai napig legnépszerűbb Internetes dinamikus útválasztási protokoll, bár időközben több hiányosságára fény derült. Számos más routing protokollnak szolgál alapjául, például az AppleTalk RTMP-nek (Routing Table Maintenance Protocol), de a Novell, a 3Com és a Banyan is használt RIP származékokat. Mi a RIP IP verzióját tekintjük át. A RIP alapvetően egy lapos, egyutas, protokoll. A RIP-et futtató routerben konfigurálni kell az interfészeire kapcsolt hálózatok (linkek) címeit és egy csomagnak az adott linken való átküldésének költségeit, valamint az időzítéshez használt időértékeket. A célok, amikhez vezető utakat a RIP nyilvántart, lehetnek hálózatok, alhálózatok, állomások, vagy az alapértelmezett átjáró . Azt, hogy egy cím alhálózat vagy állomás, csak az alhálózati maszk segítségével lehetne eldönteni, ami viszont a RIP feltételezése szerint csak az adott hálózaton belül áll rendelkezésre. Éppen ezért a hálózat határain kívülre nem szabad a hálózat belső alhálózatait célként hirdetni, csak az egész hálózatot (subnet hiding). Hasonlóképpen egyedi állomások hirdetése sem célszerű, csak a routerek közötti kommunikációt növeli. A RIP egy célponthoz táblázatában a következő információkat tárolja: - A célpont IP címét (0.0.0.0 a default route címe) - Az odavezető út költsége, a 16-os költség a „végtelent", az elérhetetlen célpontot jelöli. - Az odavezető út első routere - Időzítők
90.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A default route egy teljesen közönséges cél, amit az alapértelmezett átjárók hirdetnek 0 költséggel, akár többen is. Így minden router a hozzá legközelebbi alapértelmezett átjáró felé irányítja az ismeretlen csomagokat. A frissítő üzeneteket 30 másodpercenként küldik a routerek, kis varianciával, hogy elkerüljük a szinkronizációt, azaz azt, hogy minden router egyszerre küldje frissítő üzeneteit 30 másodpercenként nagy tumultust okozva ezzel a linken. Minden bejegyzéshez két időzítő tartozik, az egyik a timeout, a másik a szemétgyűjtés ideje. A timeout időzítő méri a bejegyzés utolsó frissítése óta eltelt időt. Ha egy útvonal végtelen költségűvé válik, vagy 180 másodpercig semmiféle információ nem érkezik róla, akkor végtelenre állítjuk, azonnal szétküldünk egy üzenetet, hogy megváltozott a bejegyzés költsége és elindítjuk 120 másodpercről a szemétgyűjtő időzítőt. Ha ebben az időszakban sem változik a bejegyzés állapota, töröljük. A RIP meglehetősen robosztus és magán viseli az egyszerű protokollok két fő jellemzőjét, az egyszerűséget és a nem túl gyors konvergenciát (topológia-változás esetén a végtelenig számolás miatt eltelhet egy kis idő, mire stabilizálódik a router-ek állapota). A 16-os végtelen érték miatt, ha minden link költsége is csupán 1 (ami a tipikus), akkor is csak meglehetősen kis hálózatokban használható. Ez azonban nem is baj, lévén, hogy az algoritmus nem igazán nagy hálózatokon optimális. NAT Napjainkban a szabad IP-címek lassan kezdenek elfogyni, így mind technikailag, mind pedig anyagilag egyre nagyobb kihívás egész hálózatokat az Internethez csatlakoztatni. E probléma áthidalására többféle megoldás is született: - a különböző alkalmazás-specifikus proxy-k (pl. squid), - alkalmazás-független proxy (ún. socks proxy) - és a NAT (Network Address Translation - hálózati címfordítás). Ezek közül az utolsó a „legigénytelenebb”: a hálózathoz kapcsolt, ún. kliens gépek alkalmazásaiban általában nem kell semmit konfigurálni, hiszen számukra az egész „trükk” rejtve marad. Továbbá ennek a megoldásnak a legkisebb az erőforrás-igénye. Mi is az a NAT? Kezdetnek válasszuk olyan speciális, privát hálózatok számára fenntartott IP-cím tartományból a hálózatunk IP-címeit, amelyek az Interneten biztosan nem fordulnak elő. (Így egyedi marad minden gép IP-címe.) Alapértelmezett átjárónak pedig állítsuk be rajtuk a hálózati címfordítást végző gépet/eszközt. (Utóbbi alapértelmezett átjárója az Internet szolgáltatónk által megadott cím lesz.) Ekkor az összes, a hálózatunkból kifelé irányuló csatlakozás „át fog folyni” a címfordító eszközön, ahol bekövetkezik a varázslat. Az áthaladó csomagok forráscímeit ui. a gép továbbításkor lecseréli a saját, Interneten érvényes címére és megjegyzi a kapcsolat adatait. A válasz-csomagokat az előbb feljegyzett adatok alapján már könnyedén felismeri, és azokon a célcímet átírva visszajuttatja a hálózatunk megfelelő gépének. A hálózatunk gépe így mit sem sejt arról, hogy út közben címfordítás történt.
91.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
IP Multicast (többesküldés) Az Interneten a multicast nem megoldott kérdés. Finoman fogalmazva alig léteznek ezzel kapcsolatos szabványos megoldások. Csupán az utóbbi időben került a figyelem középpontjába, hiszen több előnnyel is jár. Egyrészt segítségével a hálózaton manuális konfiguráció nélkül kereshetünk bizonyos szolgáltatásokat (anycast), számottevően csökkenti a hálózat terheltségét és jól illeszkedik a multimédia konferenciákhoz. A multicast két problémakörből tevődik össze, az egyik az állomások megváltozott feladatai, a másik a routing Internet Group Management Protocol (IGMP) Az IGMP az egyik legrégebbi és sokáig egyetlen a multicast-tal foglalkozó Internet szabvány, megvalósítása mára kötelező az állomásokban, az IPv6-ban pedig az ICMP szerves része. Nem broadcast (üzenetszóró) linkek esetén a multicast úgy valósítható meg, hogy minden a csoporthoz tartozó állomás számára egyesével elküldjük a multicast csomagot. Broadcast link-ek esetén azonban fontos, hogy a csomag csak egyszer haladjon végig a linken. Az állomásoknak itt fel kell készülniük arra, hogy meghallják az összes D osztályú címmel feladott csomagot és kiszűrjék azokat, melyek nekik nem szólnak. Valamilyen módon azonban a routerek tudomására kell hozni, hogy az adott link-en van-e valaki, aki tagja valamely multicast csoportnak, hogy azok egyáltalán körbeadják itt az annak a csoportnak szóló csomagokat. Erre való az IGMP. Két IGMP üzenet létezik, az egyik segítségével a routerek kérdezik le a csoporttagságot, a másikkal pedig az állomások válaszolnak, egy-egy választ küldve minden csoporthoz, melynek tagjai. Minthogy broadcast linken mindegy, hogy hány tagja van az adott csoportnak, csak az fontos, hogy van-e vagy nincs, ha valamely állomás hallja, hogy más már jelezte tagságát a routernek, egy olyan csoportra, aminek ő is tagja, akkor ő már nem jelez külön. Multicast routing A multicast routing legegyszerűbb módja az árasztás. Az árasztás lényege az, hogy a bejövő csomagot minden interfészünkön továbbadjuk (kivéve azt, amelyiken kaptuk), csak arra kell figyelni, hogy ha egy csomagot már továbbítottunk, akkor ne továbbítsuk még egyszer. Ehhez bizonyos algoritmusok időbélyegeket használnak, erre itt nincsen lehetőségünk, hisz egy IP csomagba nem tehetünk időbélyeget. Nincs mese meg kell jegyezni a „néhány" legutoljára továbbított multicast csomagot, s ha valamelyik újra elérkezik hozzánk, nem továbbítjuk. A módszer hátránya éppen ez a lista, ami gyors hálózatokon meglehetősen hosszú lehet, másfelől azt ugyan garantálja, hogy egy router nem küld el egy csomagot kétszer, de azt nem, hogy nem is kapja meg kétszer, pedig ez is jó lenne.
92.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Sokkal hatékonyabb megoldás a feszítőfa módszere. Ezt használják a bridgek, lényege az, hogy a hálózat fölött megállapítunk egy feszítőfát és a bejövő multicast csomagot e fa mentén továbbítjuk minden a fához tartozó interfészen, kivéve azon, amelyiken kaptuk. Minthogy a fa körmentes, egy csomag kétszer senkihez sem jut el. Ráadásul igen kevés információt kell tárolnunk, csupán minden interfészhez egy bitet, hogy az adott interfész tagja-e a fának vagy sem. A hátrányok között említeném, hogy a módszer mindenhova eljuttatja az összes multicast csomagot, függetlenül attól, hogy arrafele van-e tagja a csoportnak, másfelől pedig minden multicast forgalom a fa linkjein zajlik, más linkeken pedig egyáltalán nem, ami a hálózat egyenlőtlen terheltségéhez vezet. Kérdés még, hogy miként határozzuk meg a feszítőfát. Másik eljárás a visszirányú továbbítás (Reverse Path Forwarding, RPF). Ez explicit módon minden forráshoz külön fát épít egy tetszőleges routing protokoll táblázata alapján. Ha multicast csomagot kapunk F forrástól az I interfész-en, akkor - Ha az I interfész vezet a legrövidebb úton S-be, akkor továbbítjuk a csomagot minden interfész-en, kivéve I-n. - Ha nem, akkor eldobjuk a csomagot.
Tehát, ha C csomagot ad fel A-nak és E-nek, akkor ezeket először D-nek és B-nek postázza. Ezek, minthogy a C felé vezető legrövidebb úton kapták a csomagot, továbbadják A-nak és E-nek, valamint egymásnak. Az egymástól kapott csomagokról nem tudják azonban, hogy ők ezt a csomagot már továbbították, hiszen nem árasztásról van szó és nem jegyezzük a legutóbbi néhány csomagot. Viszont például B, aki D felől kapta a csomagot láthatja, hogy C felé a legrövidebb út nem D-n át vezet, így ezt a csomagot eldobja, mondván, hogy a legrövidebb úton úgyis megkapja majd (ha eddig még nem kapta meg). Hasonlóan D is eldobja B-től kapott a csomagot. A csomag így eljut A-ba és E-be is, melyek feldolgozzák és, minthogy a C felé vezető legrövidebb úton kapták, továbbadják egymásnak, ám minthogy ezt a másodpéldányt már nem a legrövidebb úton kapták, ezért eldobják. A módszer előnye, hogy nem igényel semmi mást, mint egy teljesen tetszőleges routing protokoll táblázatát, sem külön memória, sem különösen nagy számítási teljesítmény nem kell hozzá. Ha a hálózat költségei szimmetrikusak, azaz a forrás felé ugyanannyi a költség, mint a forrás felől, akkor a multicast csomag minden célponthoz a legolcsóbb úton jut majd el, minden forrásból külön feszítőfa keletkezik. Emiatt a hálózat is egyenletesebben terhelt.
93.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A leggyakoribb Internetes alkalmazásprotokollok HTTP A World Wide Web napjaink leggyakrabban használt Internet szolgáltatása. Kommunikációjához a HTTP(HyperText Transfer Protocol)-t használja. Ez a protokoll lehetővé teszi, hogy a HTTP kliensek (browser) oldalakat töltsenek le a HTTP szerverekről, és információkat küldjenek vissza a szervernek. Mit is csinál ez a protokoll? Amikor a browser-el (Netscape, Internet Explorer, Lynx) lekérünk egy oldalt, a browser elküld egy HTTP kérést a Web szervernek, majd megjeleníti a szerver által visszaadott adatokat. Az állomány amit visszakap bármilyen tipus lehet. Általaban egy HTML(HyperText Markup Language) nyelv használatával felépített web oldal. Mint sok más kliens a HTTP browser is kiküld egy parancsot, majd várakozik a szerver válaszára. Ez a válasz tartalmazhat egyszerű szöveg állományt, HTML oldalt, képeket, hang állományokat, animációkat, és minden egyebet amit file-okban tárolni lehet. Eredetileg a HTTP egy-egy új kapcsolat felépítését igényelte minden kéréshez. Azonban már a 1.0-ás verzió végefelé megjelent bővítésként, később az 1.1 verziótól kezdve pedig már szerves része a protokollnak, egy opció, amellyel a browserek kérhetik a szervertől, hogy egy kapcsolattal több adatot is átvihessenek. Mint az előzőekből kiderült, több verziója is van a protokollnak. Lehetőség van arra, hogy a különböző verziójú browserek, proxyk, és szerverek is együtt működjenek. Ez úgy valósulhat meg, hogy mindegyik eszköz támogatja visszamenőleg is a különböző verziókat. A közös HTTP verzióban, illetve opciókban az egyes eszközök úgy állapodnak meg, hogy a saját képességeiknek megfelelően korlátozzák a kommunikációs szintet. Vagyis a gyakorlatban a browser a kérés fejlécében közli, az általa támogatott legnagyobb HTTP verziót, illetve legcélszerűbb opciókat. Ezeket a továbbítás során a proxy, illetve válasz során a szerver korlátozza az általa támogatott legnagyobb verziójú protokollra, illetve az ismeretlen opciókat kiszűri. Ezáltal a kommunikáció végére kialakul az eszközök által közösen támogatott legjobb protokoll.
94.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
A protokoll elemei Az alábbiakban a HTTP 1.0 verzió protokoll elemeit tárgyaljuk. A browserek által küldött kérések általános formája: command document-URL protocol-ID header body
A szerver által küldött válaszok általános formája: protocol-ID error-code message header body
A kliensek parancsai: -
HEAD: A HEAD request arra kéri a szervert, hogy a megnevezett dokumentum fejlécét küldje vissza. A szerver által visszaküldött fejlécnek minimum tartalmaznia kell a dokumentum hosszát, az utolsó módosítás dátumát, és a típusát. Példa: HEAD /htdocs/index.html HTTP/1.0
-
-
GET :A GET request arra kéri a szervert, hogy a megnevezett dokumentumot keresse meg és küldje vissza. A szerver visszaküldi a HEAD-nél is visszaadott fejlécet, és ezt követi a dokumentum maga. A GET parancs arra is használható, hogy információkat küldjön vissza a scriptek számára, azonban erre a feladatra elsősorban a POST parancs szolgál. Példa: GET /htdocs/index.html HTTP/1.0 POST: A POST request arra szolgál, hogy adatokat küldjünk vele a klienstől a szervernek. Leggyakrabban a HTML form-ok ezt a metódust alkalmazzák az adatok elküldésére. Természetesen a kérés a parancson kívül tartalmaz egy fejlécet minimum az adatokat tartalmazó body hosszával, és a body részben magukat az adatokat. Példa: POST /htdocs/forms/question.html HTTP/1.0 Contentlength: 6 data=5
A szerverek gyakoribb hibakódjai: - 200 Ok - 302 Redirect - 403 Access denied - 404 Not found - 500 Server error
95.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
FTP Az Interneten az állományok mozgatására (lehozására a távoli szerverekről, vagy a feltöltésre) leggyakrabban az FTP(File Transfer Protocol) használatos. Mit is csinál ez a protokoll? Amikor használjuk a az FTP protokollt, akkor kilistázhatjuk a másik Internet site állományait, lemásolhatjuk az állományait, vagy feltehetünk újakat. Az FTP kliensek általában az alábbi funkciókkal rendelkeznek: - kapcsolódás a távoli géphez - könyvtár váltás - az aktuális könyvtár kilistázása - állományok letöltése az aktuális könyvtárból - állimányok feltöltése az aktuális könyvtárba - kapcsolat bontása Ezeken kívül gyakran támogatják bináris és az ASCII (szöveges) átviteli módok közötti választás lehetőségét. A szöveges átvitel során a rendszer elvégzi az eltérő operációs rendszerek közötti konvertálást. A protokoll elemei Egy FTP session két kapcsolatot igényel a kliens és a szerver között. Az egyiket használja a parancsok, a másikat az adatok átvitelére. Az FTP leggyakrabban használt parancsai: - USER - user ID - PASS - jelszó - CWD - könyvtár váltás - CDUP - szülő könyvtár - LIST - könyvtár listázás - TYPE - átviteli mód (A vagy I) - RETR - állományok lehozása - STOR - állományok tárolása A CWD munka könyvtárat változtatja. A CDUP paranccsal választhatjuk a szülő könyvtárat az aktuális könyvtárnak ha a szerver nem támogatja a ".." speciális könyvtárnév használatát. A LIST a megadott, vagy az aktuális könyvtárban található állományok listájával tér vissza. A TYPE paramétere lehet A (ASCII) vagy I (Image más néven bináris). És végül a RETR és a STOR parancs végzi az állományok mozgatását. A RETR lehoz egy állományt a távoli gépről a felhasználó gépére, a STOR pedig feltölti a felhasználó gépéről a szerverre. Ezeket a parancsokat a vezérlő csatornán továbbítja a rendszer. Az egyszerű választ, amely gyakran a siker vagy a hiba jelzése, szintén ezen a csatornán kapja a kliens. Az állományok listájának, vagy magának az állománynak az átviteléhez a szerver egy adat kapcsolatot hoz létre. Amikor az átvitel befejeződik az értesítés szintén a vezérlő csatornán továbbítódik. 96.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
E-mail Az E-mail az Internet egyik leglényegesebb szolgáltatása. Az Internet minden felhasználója ismeri és használja, mint az egymás közötti kapcsolat tartás eszközét. A levelezés alapvetően két protokoll-ra épül: - Az SMTP a levelek elküldésére, továbbítására - A POP3 a távoli levelesládákban lévő üzenetek elérésére A POP3-on kívül más protokollokkal, vagy közvetlenül a mail szerverre való belépéssel is elérhetjük a levelesládánkat, azonban ez a leggyakrabban használt metódus. SMTP A Simple Mail Transfer Protocol (SMTP) a hálózat egyik legrégebbi és legstabilabb protokollja. Az SMTP lehetővé teszi, hogy két gép az Internet-en üzeneteket váltson egymással. Mit is csinál ez a protokoll ? Egy kapcsolat épül fel a két gép között. A kommunikáció ezen folyik. A kezdeményező "üdvözli" a fogadót. Közli a küldő és a címzett címét, majd a levelet adja át. Végül "elbúcsúzik" és bontja a fogadó bontja a kapcsolatot. A protokoll elemei A kezdeményező parancsai: - HELO hostname.domain - MAIL FROM: mail addr. - RCPT TO: mail addr. - DATA - QUIT Minden parancs -el záródik. A válaszok egy három digites response kóddal kezdődnek, és ezt követi egy ember által is olvasható szöveg. A HELO paranccsal kezdődik minden session. Amikor egy kapcsolat felépül a kezdeményező gép egy HELO parancsot küld a saját teljes nevével. Mintha körülbelül azt mondanánk "Hello, én vagyok joe.cool.hu". A vevő egy 220-as kóddal válaszol. Tipikusan a szöveg a vevő neve. A MAIL FROM: parancs paramétere a küldő teljes e-mail címe. A vevő válasza 250 OK. Az RCPT TO: parancs mondja meg, hogy ki a címzettje a levélnek. Ha a levélnek több címzettje van, akkor minden címzett egy-egy RCPT TO: paranccsal adunk meg. Mindegyikre küld egy-egy választ a vevő.
97.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
Az RCPT TO: parancsra az alábbi válaszok érkezhetnek: -
250 OK 251 Forwarding to username 550 No such user 551 User not local; try username
Az első kettő azt jelenti, hogy sikeres volt a kérésünk. Az utóbbi kettő hibát jelez, tehát a címzett nem fogja megkapni. Miután megadtuk az összes címzettet következik a maga a levél. Az SMTP nem specifikálja a levél formátumát. Természetesen a fogadó programok megkövetelnek bizonyos formátumot. A DATA parancs vezeti be a levelet. Ezt követi a levél fejléce és teste. Miután az egész üzenetet elküldtük egy uj sorban egy "."-al jelezhetjük a levél végét. Mivel minden sor -el végződik, ezért a záró jelzés ".". (Kicsi a valószínűsége, hogy egy sorban egyedülálló "." legyen, de mivel nem zárhatjuk ki, ezért a küldőnek ".."-t kell küldeni helyette, amit a vevő visszaalakít.) A QUIT parancs zárja a kapcsolatot a gépek között. Összegezés képpen nézzünk egy példa kommunikációt. A küldő avalon.aut.bme.hu, jelezzük "S"-el az általa küldött sorokat. A vevő mail.rulez.org, jelezzük "R"-el. A címzettek kate, aki létezik és jack, aki nem létezik az adott szerveren. (A sorok végén áll.) R: 220 mail.rulez.org SMTP ready S: HELO avalon.aut.bme.hu R: 250 mail.rulez.org S: MAIL FROM:<[email protected]> R: 250 OK S: RCPT TO: R: 250 OK S: RCPT TO:<[email protected]> R: 550 No such user S: DATA R: 354 Start mail input: end with . S: Date: 14 Nov 1999 10:20:30 S: From: [email protected] S: To: [email protected], [email protected] S: S: Hi! This e-mail is a cool thing. S: . R: 250 OK S: QUIT R: 250 mail.rulez.org closing the session.
98.
Barhács OktatóKözpont
Linux rendszergazdai modul - 3. fejezet
POP3 A POP3 a Post Office Protocol version 3 rövidítése. Ha a gépünk folyamatos Internet kapcsolata van, és folyamatosan működik, és egy mail szervert futtatunk rajta, akkor tudja fogadni a leveleket SMTP-n keresztűl is. Ezek a feltételek általában nem teljesülnek a felhasználóknál. A Post Office Protocol-t ahoz fejlesztették ki, hogy lekérhessük vele a leveleinket a mail szervertől, amelyre a fenti feltételek teljesülnek. Mit is csinál ez a protokoll ? A fogadó gép bekapcsolódik a küldő szerverhez, és lekérdezi, hogy vannak-e új leveleink, és lehozza, ha van. A POP3 kommunikáció is parancsokból és válaszokból áll. Csak egy csatornát használ. Egyes parancsokra egy soros, másokra több soros válaszok kapunk. A több soros válaszok egy egyedül álló "."-al záródnak, mint az SMTP-nél a levél. (A levélben szereplő pontokat is úgy kezeli mint az SMTP.) A válaszok "+OK" vagy "-ERR" taggal kezdődnek attól függően, hogy sikeres vagy hiba jelzést kapunk. A protokoll elemei - USER usernév:Felhasználó azonosítása - PASS jelszó: Jelszó - STAT Levelek száma: Hány új levele van a felhasználónak - LIST [levél száma] Levelek: A levelek listája - RETR levél száma A levél: Lehozza a kiválasztott levelet - DELE levél száma: Törli a kiválasztott levelet - LAST Az utolsó levél száma: Az utolsó levél száma - QUIT: A kapcsolat vége Nézzünk egy példa kommunikációt. A "C" jelzi a klienst, az "S" a szervert: S: +OK POP3 server ready C: USER joe S: +OK C: PASS jelszo S: +OK joe's mailbox has 3 messages C: STAT S: +OK 3 460 C: LIST S: +OK 3 messages (460 octets) S: 1 120 S: 2 240 S: 3 100 S: . C: LIST 2 S: +OK 2 240 C: RETR 1 S: +OK 120 octets S: Date: 14 Nov 1999 11:22:33 S: From: [email protected] S: To: [email protected] S: S: Hi Joe ! S: . C: DELE 1 S: +OK message 1 deleted C: QUIT S: +OK session closed (2 messages left)
99.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A Linux telepítése és alapkonfigurációja A Linux telepítése disztribúciónként különböző lehet, de az alapelvek nem változnak. Minden disztribúció tartalmaz valamilyen szöveges, vagy grafikus telepítőeszközt, mellyel egyszerűen és gyorsan elvégezhető a Linux telepítése és konfigurálása. A következőkben egy jellemző SuSE telepítést mutatunk be. Az új rendszer telepítése már a SuSE Linux 6.3 óta jelentősen egyszerűsödött. A YaST2 (az új YaST) intelligens eszközként áll rendelkezésünkre, grafikus felhasználói felülettel. A YaST2 gyorsan teszi lehetővé a SuSE Linux telepítését modern számítógépeken – de ha akarjuk, vagy szükséges, a telepítés elvégezhető szöveges módban is. A telepítésen érthető párbeszédablakok vezetnek végig minket. Adatmegadás vagy választás csak akkor szükséges, ha nem található meg automatikusan a megfelelő adat. Íme a legjobban megfelelő telepítési módok összegezése: Telepítés a YaST2-vel – közvetlen az első CD-ről ("Telepítő CD") – ez legjobban akkor végezhető el, ha gépünk megfelel az alábbi feltételeknek: - A számítógépünk – CD-ROM meghajtóról indítható – célszerű, hogy a VESA 2.0 szabványnak megfelelő grafikus rendszere legyen (újabb számítógépeknél már feltételezhetően ez a helyzet) – ha lehetséges, rendelkezzen 64 MB RAM-mal (memóriával) – Pentium (vagy azzal kompatibilis, pl. AMD K6) processzorral rendelkezzen - Nem megfelelő konfigurációnál lehet, hogy el kell fogadnunk néhány korlátozást, pl.: – Meg kell változtatni az indítási módot az "indító lemezre (boot disk)" – Szoftvert CD-ROM-ról csak a "közbenső indítás (intermediate booting)"után lehet telepíteni, ha nincs elegendő memória – amennyiben a grafikus kártya felismerése nem lehetséges, a telepítés szöveges módban megy. – Merevlemezünkön elegendő helynek kell lenni a telepítéshez: 150 MBkell a minimum rendszerhez, megközelítőleg 500 MB egy átlagoshoz, és még több hely a további elemekhez (components). Az alábbi esetek lehetségesek: – Új számítógép, operációs rendszer nélkül, első alkalommal történő telepítés. – Egy merevlemez, amin már van egy operációs rendszer telepítve, de amin még van elég szabad hely a lemez végén. – Egy második merevlemezt akarunk a SuSE Linuxnak szánni. – Létező, már használt partíciók, amik letörölhetők. Ha ezt csináljuk, meg kell fontolnunk, hogy mely adatokat kell biztonsági mentéssel eltennünk a telepítés előtt!
100.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A telepítés megkezdése Kapcsoljuk be a számítógépet, és tegyük be az első CD-t a meghajtóba. Ha a gép nem indul el a CD-ről, meg kell változtatnunk az indítási sorrendet a gép BIOS-ában CDROM,C,A-ra; ötleteket a beállítás megváltoztatásához a gépünkkel kapott dokumentációban találhatunk. Pár másodperc múlva megjelenik az üdvözlő képernyő, és a "boot:" prompt is feltűnik a képernyő alján. 3 másodpercünk van arra, hogy megszakítsuk az automatikus eljárást, és kihasználjuk a YaST2 alábbi két speciális lehetőségét: 1. A telepítés szöveges módban kerül végrehajtásra. – Ez hasznos lehet bizonyos körülmények között. Szöveges módban például az adatbeviteli ablakokat jobban felismerik a csökkentlátók. Ehhez nyomjuk meg a Ctrl billentyűt. Egy üzenet a képernyő jobb alsó sarkában közli velünk, hogy szöveges módban kezdjük el a telepítést. 2. A "YaST Extension Disk" telepítése. – Aktuális kiterjesztések (extensions), frissítések, stb. A YaST2-vel mindezek betölthetők, mielőtt a tényleges telepítés megkezdődne. Ebben az esetben meg kell nyomnunk az Alt billentyűt. Egy üzenet jelenik meg a képernyő jobb alsó sarkában, "Have your extension disk ready (Legyen kéznél az extension lemezünk)", később kérni fogja ezt tőlünk a rendszer. A képernyő alján üzenetek jelennek meg (mint "initrd..." és "Loading linux..."); majd pár másodperccel később a +rendszermag elindul (boot) – ez felismerhető a jellegzetes "rendszermag-üzenetekről, amik átfutnak a képernyőn. A YaST2 elindul, és pár másodperc múlva a grafikus felület is megjelenik. A YAST (Yet Another Setup Tool) A YaST2 képernyőinek baloldalán HELP információ olvasható az aktuális telepítési lépéshez. Minden adatbeviteli mező, választéklista és gomb ("kapcsoló") kiválasztható egy egérkattintással is. A YaST2 megvizsgálja a hardvert, és beépíti (integrálja) a felismert elemeket a rendszerbe, grafikusan ábrázolva a telepítés állapotát. Amint végzett, automatikusan lép a következő tételre.
101.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Itt kell először döntenünk a telepítési eljárás során, az egér, vagy a billentyű használatával. Minden adatbeviteli mező, választéklista és gomb ("kapcsoló") kiválasztható egérkattintással is. A billentyűzet használata elég egyszerű. A Tab lépked a mezők, beviteli/kiválasztási mezők, gombok között; Shift + Tab lehetővé teszi, hogy kiválasszunk egy másik kiválasztási csoportot. A " és # -val választhatunk – az aktivizált területtől függően – vagy körbemehetünk egy listán. A - billentyűvel kiválasztódik az aktuális elem. A Space -szel kijelölhetjük az aktuális elemet. A legtöbb akciót elindíthatjuk az Alt + az aláhúzott betű billentyű kombinációval is. A következőkben a YaST2 megtudakolja, hogy milyen nyelvet választunk. Amikor kiválasztunk egy nyelvet, az ‘Alkalmaz’ átvált minden szöveget saját nyelvünkre. Az egér kiválasztása ablak csak akkor jelenik meg, ha a YaST2 nem volt képes automatikusan felismerni az egeret. Egy ablak jelenik meg, több egértípus felsorolásával, amiből nekünk kell kiválasztani a megfelelő típusú egeret. A nyílgombokkal mehetünk végig a listán; amikor megtaláltuk a megfelelő típust, menjünk át a Tab -bal a ‘Teszt’ gombra, és nyomjuk meg a - -t. Most mozdítsuk meg az egeret. Ha az egérkurzor rendesen mozog, minden rendben van, már kattinthatunk is az egérrel a ‘Tovább’ gombra :-) Ha nem jó egértípust választottunk első alkalommal, visszamehetünk a Tab -bal a választéklistába, ahol újabb típust választhatunk ki. Milyen billentyűzet-kiosztást használunk, és a Föld melyik részén , azaz melyik időzónában vagyunk? Meg kell adnunk azt a helyet, ahol tartózkodunk. Lehetőségünk van a billentyűzet tesztelésére. A beviteli mezőbe kattintva az egérrel, vagy a Tab -bal, aktivizáljuk azt, és már írhatunk is betűket ide. Le kell tesztelnünk, különösen a ‘y’/‘z’ betűket és a speciális karaktereket. A második tétel, egy lista az országokról, faszerkezetben (kontinens/ország/terület). Válasszuk ki országunkat, vagy a teületet; a YaST2 meg fogja találni a megfelelő időzónát. A ‘Tovább’ gomb átvisz a következő párbeszédablakba. 102.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A merevlemez előkészítése A következő lépésekben ki fogjuk választani a merevlemez(eke)t és előkészítjük az(oka)t a SuSE Linux telepítésére. Gépünk hardverétől függően, esetleg egy kicsit más lesz a párbeszédablakban, mint ami itt megjelenik. Első lépésként, ha több merevlemezünk van, először meg kell határoznunk, melyiket fogjuk használni a telepítéshez. A megtalált lemezeket ki fogja írni a gépünk.Választhatjuk az utolsó opciót, a (‘Haladó Beállítások (Advanced Settings)’)-at, hogy kézzel "partícionáljunk", ha speciális körülmények megkívánják ezt. Ezt itt későbbre is hagyhatjuk, ha kiderül, hogy még több helyet kell létrehoznunk... Alapesetben rákattintunk az egy merevlemezre, és utána ‘Tovább’. Az alábbiak közül az egyik helyzet fordulhat elő: 1. Ha a merevlemez nem üres, a YaST2 megmutatja az összes létező partíciót a merevlemezen, és a ‘Használja a Teljes merevlemezt’ tételt is. Az Üres, nem partícionált területet a merevlemez "végén" szintén megjeleníti, és automatikusan előre kiválasztja. A YaST2 fel tudja használni az üres helyet a SuSE Linux-nak, de csak akkor, ha az folyamatos, azaz a partíciók a lemez azonos részén vannak, egymás után, például, az 1. partíció és a 2. marad, és mi meghatározzuk, hogy a 3. partíciót használja. 2. Ha az egész merevlemezt a SuSE Linux-nak szánjuk, válasszuk az ‘Egész Merevlemez’-t. 3. Egy teljesen üres merevlemeznél az egész merevlemezt a SuSE Linux fogja használni. Ha megnyomjuk a ‘Tovább’ gombot, többféle ellenőrzés történik, pl. hogy elegendő-e a hely a minimum telepítéshez, a 3 szükséges partíció létrehozható-e, és a merevlemez indítható-e (bootable). Ha valami nem megfelelő, ezt megmutatja nekünk, és e szerint végezhetjük el a változtatásokat. Amikor a telepítés megkezdődik, és minden megfelelt az elvárásnak, a YaST2 partícionálni és formattálni fogja a szükséges merevlemezterületet. Az egész merevlemezt, vagy a rendelkezésre álló partíciókat, a SuSE Linux felosztja 3 szabványos partícióra, ami egy kis partíció a /boot-nak (kb. 16 MB), amennyire csak lehet, közel a merevlemez elejéhez, egy partíció a swapnek (128 MB), a megmaradt többi pedig a /, a root partíció. Szoftver-kiválasztás Ebben az ablakban meghatározhatjuk SuSE Linuxtelepítésünk méretét. Ahhoz, hogy ezt megtegyük, ki kell választanunk egy opciót a megjelenítettekből, valamint, ha van, további elemeket, amelyeket esetleg szeretnénk még telepíteni.
103.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Első lépésként meg kell határoznunk az alapszoftverek kiválasztását a rendszerünkben: 1. ‘Minimál rendszer’ – A ‘Minimál rendszer’ egy teljes, működőképes Unix operációs rendszer, szöveges módban (alaprendszer, plussz az összes fontos szolgáltás programja). Ha a merevlemezen a hely korlátozott, a SuSE Linux alapfunkciói kipróbálhatók; vagy ha van egy konkrét alkalmazásunk, ami nem kíván semmi további rendszerbeállítást (helyigénye, megközelítőleg 150 MB). 2. ‘Szabványos rendszer’ – A ‘Szabványos rendszer’ az alapszoftverek alapos válogatását tartalmazza, minden olyant, ami kell az induláshoz, pl. a grafikus felület, nyomtatás, játékok, szoftver az interneteléréshez és -használathoz, szerkesztők, CD lejátszók, stb. (helyigénye megközelítőleg 500 MB). 3. ‘Majdnem Minden’ – ‘Majdnem Minden’-t kell telepíteni, ha tudjuk, hogy szükségünk van az egész szoftver kínálatra, vagy ha meg akarjuk ismerni a SuSE Linux teljes szoftver kínálatát. Ehhez az a feltétel, hogy legyen elég hely a merevlemezünkön (helyigénye több, mint 6 GB). A ‘Szabványos rendszer’ különösen akkor ajánlott, ha csak most kezdünk; ha szükségünk van további szoftverre, mindig adhatunk hozzá később. Az ("alaptelepítéseknél") említett egyik összeállítást használva a ‘Haladó Választás (Advanced Selection)’ gomb lehetővé teszi, hogy hozzáadjunk vagy eltávolítsunk egyedi elemeket vagy speciális alkalmazásokat ("csomagokat"). Ha a ‘Haladó Választás’-t (Advanced selection) jelöltük ki az előző ablakban, megváltoztathatjuk az összeállítás részleteit. A ‘Haladó Választás’-ban csomagcsoportok vannak; bármelyik elem (components) hozzáadható ezekhez. Ezzel egyidőben – ingyenes szoftverek esetében – lehetőségünk van a forráscsomag telepítésére is. Válasszuk az ‘elérhetö források telepítése’ pontot. Egyes esetekben a forrás igen sok helyet foglal el, és azt mondják, hogy ez csak a programozókat érdekli. ‘Kereskedelmi Szoftver’-ek is rendelkezésünkre állnak. Ebben az ablakban válasszuk ki azokat a programcsomagokat, amelyeket telepíteni akarunk. Az ‘Egyedi csomagok választása’ segítségével egyenkénti hozzáférésünk van az alkalmazásokhoz vagy szoftvercsomagokhoz. Amikor kijelölünk vagy eltávolítunk csomagokat ebben az összeállításban, a YaST2 leellenőrzi, hogy az összes függőség feloldásra került-e, és ha szükséges, javasolja további csomagok telepítését is. A szoftverek megfelelő működéséhez lényeges, hogy ne legyenek megoldatlan függőségek. LILO boot manager telepítése Ahhoz, hogy a Linux később indítható legyen, megfelelő indító (boot) mechanizmust kell létrehozni. Meg kell határozni, hogy a rendszer melyik pontjára legyen telepítve a LILO boot manager "LInux LOader", vagy másféle indítási eljárást kell használnunk Ha a YaST2 nem érzékel semmilyen más operációs rendszert a gépen a SuSE Linux-on kívül, és tényleg nincs is, egyszerű a dolog, csak kattintsunk a ‘Tovább’ gombra.
104.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Ha a YaST2 érzékel egy másik operációs rendszert (pl. Windows) , vagy ha akár a merevlemez beállítása nem indítható (bootable), (1024 cilinder-es korlátozás), vagy ha a PC hardverelemeink (egy SCSI- és (E)IDE merevlemez kombinációja) nem érzékelhetők megfelelően vagy biztonságosan az indíthatóságuk (bootability) szempontjából, még mindig van egy megbízható mód: az indító floppylemez készítése. Ha azonban a YaST2 még mindig nem megfelelően méri fel a helyzetet, vagy ha más ötletünk van a rendszer indítására, akkor válasszuk a ‘Másik beállítás (Another configuration)’-t, hogy kézzel állítsuk be a rendszerindítást. A YaST2 jelenleg négy különböző lehetőséget kínál fel: 1. ‘LILO telepítése a boot diskre (MBR)’ – Ha a SuSE Linux egyetlen operációs rendszerként van telepítve, akkor a LILO mindenképp az Master Boot Recordba kerüljön. LILO-val az MBR-ben több operációs rendszert is elindíthatunk. Csak akkor válasszuk ezt az opciót, ha teljesen biztosak vagyunk abban, hogy a már telepített rendszer indítható a LILO segítségével (általában DOS és Windows 95/98 esetén lehetséges). Ha bármi kétségünk van, válasszuk az ‘Indító lemez készítése’ opciót. 1. ‘Indító lemez készítése (Create a Boot Floppy)’ – Ha gépünk több operációs rendszert is használ, lehetőségünk van indító lemez készítésére a SuSE Linux-hoz. Ennek az az előnye, hogy a bootmechanizmusunk érintetlen marad. Bármikor elindíthatjuk a SuSE Linux-ot erről az indító lemezről. Kétség esetén ezt a lehetőséget kell választanunk. 1. ‘A LILO telepítése a /boot partícióra’ – Feltételezzük, hogy van másik boot managerünk. – E pontot választva továbbra is használhatjuk saját boot managerünket. Semmi sem változik az MBR (Master Boot Record)-ban; a LILO a /boot partícióba kerül telepítésre. Azonban ekkor saját magunknak újra be kell állítanunk a meglévő boot managert. 4. ‘A LILO telepítése egy másik partícióra’ – Válasszuk ezt a lehetőséget, ha egy másik partíciót akarunk meghatározni; a továbbiakért nézzük meg az előző pontot. Amennyiben szükséges, a ‘Kernel-bootparaméterek’ mezőben "kernelparamétereket" is; itt egy append (hozzáfűzött) sor jön létre.
megadhatunk
A linear opció ritkán szükséges. Ez az opció arra szolgál, merevlemezszektorok adatait logikaiként tárolja fizikai cím helyett.
hogy
a
Felhasználói információ A SuSE Linux-ban több felhasználó dolgozhat egyidejűleg. Aki használni akarja a rendszert, először azonosítania kell magát. Ezt "beléptetésként" (logging in) ismerjük. Az ablakban látható adatok a "felhasználói (user) accountunk" létrehozásához kell enek (vezetéknév, utónév, felhasználói név, jelszó). A vezeték- és utónevünk megadására kérnek meg minket. Ezt követően a "felhasználói nevünk" és jelszavunk is megállapításra kerül, amivel majd be tudunk jelentkezni a SuSE Linux-ba.
105.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Lehetőségünk van a ‘Javaslatok (Suggestions)’ gombbal "felhasználói név" automatikus létrehozására, vezetéknevünk és utónevünk kombinációjából (bár a javaslat megváltoztatható), vagy saját magunk adhatjuk meg a kívánt nevet. Befejezésül meg kell adnunk egy jelszót, amit biztonsági okból meg kell ismételnünk. A betűk itt kis- és nagybetű-érzékenyek. A jelszónak legalább 5 karakter hosszúnak kell lennie (maximum 8 karakter), és nem tartalmazhatnak ékezeteket. Megengedettek a "különleges karakterek" (pl. #,.;) és a számok 0-tól 9-ig. Alaposan jegyezzük meg a saját "felhasználói nevünket" és jelszavunkat. Szükségünk lesz rá minden alkalommal, amikor dolgozni akarunk a SuSE Linux-szal. A ‘Tovább’-bal egy másik ablakot érünk el, ahol megadhatjuk a ‘root’ jelszót. A ‘root’ felhasználó különleges előjogokkal rendelkezik a Linuxban. Például elindíthat és leállíthat folyamatokat (processes), létrehozhat és eltávolíthat felhasználókat, megváltoztathat fontos rendszerfájlokat, stb. Más szóval, ellátja a rendszeradminisztrátor feladatát. Ehhez meg kell adnunk egy jelszót a ‘root’ felhasználónak; ugyanazok a szabályok vonatkoznak erre is, mint a normál felhasználó jelszavára. Nagyon pontosan emlékeznünk kell a ‘root’ jelszóra, mivel nem tudjuk később visszahívni, hogy megnézzük azt. Mindig szükségünk lesz erre a jelszóra, amikor adminisztratív feladatokat végzünk a rendszeren. Ha most megnyomjuk a ‘Tovább’ gombot, megkezdődik a tényleges telepítés. Beállítások jóváhagyása – a telepítés megkezdése Itt kapunk lehetőséget a dolgok leellenőrizésére, átnézhetjük összes beállításunkat, amiket eddig jóváhagytunk. Abban az esetben, ha változtatni akarunk, átlapozhatjuk az ablakokokat a ‘Vissza’ gombbal, egészen vissza a legelső ablakig. Ha mindent megfelelőnek találunk, és megnyomjuk a ‘Tovább’ gombot, ismét felszólítást kapunk a telepítés megkezdésének megerősítésére. – Megerősítés után az ‘Igen - telepít’-tel a YaST2 megkezdi a rendszerbeállítást. – ‘Nem’-mel megvan a lehetőségünk az adatok újraellenőrzésére, és ahol szükséges, a tételek megváltoztatására. A ‘Vissza’ gomb megnyomásával elérhetjük a kívánt ablakot. Ha mégis meggondoljuk magunkat, és el akarjuk halasztani a SuSE Linux telepítését egy későbbi időpontra, megvan a lehetőségünk, hogy teljesen megszakítsuk a telepítést. Sajnos ekkor minden beállítás, és minden megadott információ el fog veszni. Ha a ‘Telepítés elvetése (Abort installation)’-t választjuk, gépünk a megerősítés jóváhagyása után le fog állni, és lekapcsolhatjuk gépünket, vagy akár újra is indíthatjuk azt, minden probléma nélkül. Egészen eddig a pontig semmi változtatást nem hajtottunk végre gépünkön. "Szakértőknek" van egy speciális lehetőség, a ‘Beállítások Mentése Hajlékony Lemezre’. Ez minden adatot elment a lemezre, ahonnan az adatokat későbbi 106.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
telepítéskor visszatölthetjük. Ezt csak akkor választhatjuk, ha a hardverünk is támogatja ezt. Ha az ‘Igen - telepít’-et választottuk, most láthatjuk, ahogy a YaST2 dolgozni kezd. Partíciókat hoz létre, és leformattálja őket. Rendszerünk kapacitásától és merevlemezünk méretétől függően ez eltarthat egy darabig. Itt el kell kerülnünk a megszakítást, mert merevlemezünk ettől előre nem látható hibákat szenvedhet. Miután az első CD-ről a csomagok, és a SuSE Linux alaptelepítése megtörtént, valamint ezt a ‘Következö’-vel megerősítettük, elindul a szöveges alaprendszer. A YaST2 folytatja a szoftverek telepítését, szükség esetén bekérve további CD-ket; ha ‘Megszakít’-juk a telepítést ebben a szakaszban, a rendszer használhatatlan lehet! Attól függően, hogy mit határoztunk meg, felszólítást kapunk, hogy tegyünk be egy hajlékonylemezt az indító lemez létrehozása céljából, vagy hogy biztonsági mentést készítsünk a Master Boot Record-ról, mielőtt a LILO-t telepítenénk. Ehhez ne használjuk a SuSE Linux csomagban lévő egyetlen hajlékonylemezt sem! Ha a LILOt az MBR-be telepítettük, üzenetet kapunk arról, hogy miként állíthatjuk helyre az eredeti MBR-t; ezt a parancsot tanácsos feljegyezni. A SuSE Linux-ot ezzel sikeresen telepítettük.
Bootmanager konfiguráció A LILO (Linux Loader) Mi a LILO? A LILO egy sokoldalú rendszerbetöltő program. A következő módon tud elindítani egy operációs rendszert: – betölti egy partíció indító szektorát és elindít egy operációs rendszert erről a partícióról. Ez az, amit más rendszerbetöltők is megcsinálnak. – betölti a Linux rendszermagot és elindítja a Linuxot. Ez az amit más rendszerbetöltők nem tudnak megtenni. Továbbá a LILO egy fontos lehetőséggel rendelkezik; képes parancssort átadni a rendszermagnak. Biztonsági okoból ez jelszóval levédhető teljesen, vagy részlegesen. Hogy indítunk a LILO-val? Amikor a LILO elindul, megjeleníti a LILO szöveget és egy üdvözlő üzenetet (amit mi adtunk meg a telepítés során). Ezután egy parancs prompt jelenik meg: boot:
Itt kiválaszthatjuk az operációs rendszerünket, a nevének beadásával, ami azután elindul. Az operációs rendszer nevét már korábban beállítottuk, a telepítés során. Ezen a ponton átadhatunk egy paraméter sort a Linux rendszermagnak. Kaphatunk egy listát az összes elérhető operációs rendszer nevével, ha megnyomjuk a TAB billentyűt.
107.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A LILO alkotórészei A LILO gépezete az alábbi részekből áll: – kezdetben, első lépésként, a LILO kód az indító szektorban, ami aktiválja a rendszerindítást – a szíve a LILO kódnak, a /boot/boot.b-ban található – egy map fájl, normálisan a /boot/map, ahová a LILO bejegyzi a Linux rendszermagok helyét és a telepítés soráni egyéb adatokat. – opcionális: egy üzenet fájl aminek a tartalma üdvözlő üzenetként megjelenik a LILO indító kiválasztása előtt. Ez rendszerint a: /boot/message (vagy hasonló) alatt található – a különböző Linux rendszermag és indító szektorok, amit a LILO felajánlhat Hová telepíthető a LILO? Ez a fentebb említett LILO első lépésére vonatkozik. Mielőtt a részletekbe mennénk, szeretnénk rámutatni egy nagyon lényeges korlátozásra: Minden LILO alkotóelemnek és a /boot/vmlinuz rendszermag fájlnak a merevlemez első 1024 cilinderén belül kell lennie. Ez megoldható egy kis külön partíció által, ami "becsatolható" a /boot könyvtárba, és ami teljes egészében az első 1024 cilinderen belül található. Ez azért van, mert csak ezek az elérhető cilinderek amikor a BIOS elindítja a rendszert. A régebbi BIOS-okkal és IDE meghajtókkal szintén korlátozódhat az egyik első két merevlemezre (/dev/hda és /dev/hdb). Ha egy régebbi BIOS-unk van, lehetséges, hogy a meglévő (E)IDE merevlemezek megakadályozhatják a SCSI eszközünk indítását. Sok újabb BIOS lehetővé teszi további eszközök elérését, például az EIDE merevlemez vezérlőkkel kapcsolatban még akár 4 EIDE eszközt is. Sok modern SCSI host vezérlő is lehetővé teszi a SCSI eszközök sorrendbeli "kiemelését" azért, hogy indíthatóvá váljanak. Az alábbi helyeken lehet tárolni a LILO indító szektorát. – egy mágneslemezen. Ez a legbiztonságosabb de a leglassabb alternatíva a LILOval való indításra. Akkor válasszuk ezt a lehetőséget, ha nem akarjuk megváltoztatni az indító szektorokat. – az indító szektorába az elsődleges Linux partíciónak az első merevlemezen. Ez érintetlenül hagyja az MBR-t. Mielőtt indíthatnánk, a partíciót aktívnak kell kijelölnünk az fdisk-kel. Ha a Linux teljesen logikai meghajtókra van telepítve vagy a második merevlemez partícióira, ekkor csak az első meghajtó kiterjesztett partíciójának indító szektora marad (ha van ott egy). A Linux fdisk programja aktiválni is tud egy ilyen partíciót. Ha több rendszert akarunk indítani a merevlemezről, ez meglehetősen hosszadalmas. Minden alkalommal amikor indítani akarunk, előzőleg aktiválnunk kell a vonatkozó indító szektort. A következő két változat sokkal kevésbé kényelmetlen.
108.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
– a Master Boot Record-ba. Ez a változat kínálja a legnagyobb rugalmasságot. Ráadásul csak ez az egyetlen lehetséges alternatíva ha az összes Linux partíciók a második merevlemezen vannak és nincs kiterjeszett partíció az első meghajtón. Minden beállítást az MBR-on rendkívül körültekintéssel kell szerkesztenünk, mivel a hibák súlyos következményekkel járhatnak. – ha eddig más rendszerbetöltőt használtunk és továbbra is azt akarjuk használni. A rugalmasságuktól és teljesítményüktől függően különböző változatok vannak. Elterjedt eset: az elsődleges Linux partíciónk a második merevlemezen van ahonnan indítjuk a Linuxot. A rendszerbetöltőnk képes indítani ezt a partíciót az indító szektoron keresztül. Ezután aktiválhatjuk a Linux partíciónkat a LILO-nak ebbe az indító szektorba történő telepítésével, és megmondva a rendszerbetöltőnknek, hogy ez aktív. A LILO beállítása A LILO egy rugalmas rendszerbetöltő ami sokféle módszert kínál az egyedi igényű beállítások alkalmazására. A legfontosabb lehetőségeket és értelmezéseket alant írjuk le. A LILO beállítása a /etc/lilo.conf-ban történik. Ha most telepítjük a LILO-t első alkalommal, akkor ajánlatos a YaST-ot használni a LILO beállítására A finomhangolást később is elvégezhetjük a /etc/lilo.conf szerkesztésével. A /etc/lilo.conf-nak csak a ‘root’ számára szabad olvashatónak lennie, mivel az jelszókat is tartalmazhat; ez az alapértelmezett beállítás a SuSE Linux-szal. Ha kétség merül fel, csak hajtsuk végre az alábbi parancsot, rendszergazdaként:) gépnév: # chmod 0600 /etc/lilo.conf
JavasoIt, hogy tartsunk a meglévő régi (és működő) lilo.conf-ból biztonsági másolatot egy biztos helyen. A beállításunk csak akkor lép életbe, amikor újratelepítjük a LILO-t a /etc/lilo.conf megváltoztatása után. A lilo.conf szerkezete A /etc/lilo.conf egy global section-nel kezdődik, amit egy vagy több system sections követ minden egyes operációs rendszerre, amiket majd a LILOnak kell elindítania. Egy új rész (section) kezdő sora mindig image vagy other. A /etc/lilo.conf-ban a bejegyzések sorrendje csak annyira számít, hogy a listán az első indul el alapértelmezettként, ha nincs felhasználói beavatkozás — ezt be lehet állítani a delay= és timeout=-al. Minden ami a ‘#’ jel és a sor vége között van, megjegyzésnek tekintendő. A szóközöket és megjegyzéseket a LILO figyelmen kívül hagyja, ezek az olvashatóság javítására használhatók.
109.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Most végigmegyünk a legfontosabb sorokon lépésről lépésre: 1. Global section (Paraméter rész) - boot= Az eszköz amelynek az első szektorába a LILO-t telepíteni kell. Az lehet: egy mágneslemez meghajtó (/dev/fd0), egy partíció (pl. /dev/hdb3), vagy egy egész lemez (pl. /dev/hda). Ez az opció azt jelenti, hogy a LILO az MBR-ba kerül. Alapértelmezés: ha ez az opció hiányzik, a LILO telepítése a jelenlegi root partícióra kerül. - prompt A LILO prompt mindig megjelenik. Az alapértelmezés: nincs prompt (hasonlítsuk össze a delay-vel távolabb lent). Ez akkor javasolt, ha a LILO-nak több mint egy rendszert kell kezelnie. Továbbiakban, a timeout-ot be kell állítanunk, hogy biztosítsuk az automatikus indítást, ha semmit nem adunk be a prompt-nál. - timeout= Állítsuk be a timeout-ot a prompted opcióra, így lehetővé téve egy automatikus indítást, ha az adott időn belül semmi beadás nem történik. A a hátralévő idő 0.1 másodperces lépésekben. Nyomjuk meg a Shift-et és a timeout újraindul. Alapértelmezés: végtelen, pl. nincs automatikus indítás. 2. A Linux section - image= Ide az indítandó rendszermag fájl nevét kell beadni a könyvtárának helyével együtt. Az új rendszerünkkel ez a legvalószínübben /boot/vmlinuz, vagy /vmlinuz a régebbi SuSE Linux rendszerhez. - label= A rendszer választásunk szerinti neve. Használata javasolt, mert az alapértelmezés, a kernelfájl neve kevésbé informatív. Egyedi névnek kell lennie. Különben szabadon választhatunk nevet a rendszer részére (pl. Linux). Maximális hossza 15 karakter. Csak betűket, számokat és aláhúzást használhatunk a nevekhez — sem szóköz, sem speciális karakterek nem lehetnek 9 . A rendszermag fájl alapértelmezett azonosítója. A LILO promptnál e név megadásával választhatjuk ki melyik rendszer (kernel) induljon. Ha sok rendszert telepítettünk, célszerű használnunk a message= opciót, aminek segítségével tájékozató üzenetet írathatunk ki a LILO prompt elé. - root= A Linux rendszerünk root partíciójának megadása a kernel részére (pl. /dev/hda2). Használatát biztonsági célból javasoljuk. Ha ezt az opciót kihagyjuk, a rendszermag a saját eredeti root partícióját tekinti aktív root partíciónak. 3. Más rendszerek - other=<partíció> Az other mondja meg a LILO-nak, hogy az adott partíción más indítható rendszer van, mint a DOS / Windows (pl. /dev/hda1). - loader= Egy másik operációs rendszerhez tartozó indító szektor betöltéséhez, a LILO létrehoz egy hamis (pseudo) MBRt a map fájlban. Induláskor a LILO először elindítja ezt a hamis MBR-t, ami elindítja a másik indító szektort. Ez az opció meghatározza azt a fájlt, amiben a hamis MBR-hez való kód található. Alapértelmezés: /boot/chain.b (rendszerint ez a helyes). - Néha a LILO-val olyan OS-t akarunk indítani, amely csak az első merevlemezről indítható (pl. a DOS-t), de azt mégis másik merevlemezre akarjuk telepíteni. A LILO az alábbi lehetőségeket nyújtja, hogy a merevlemezek logikai sorrendje felcserélődjön:
110.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 4. fejezet
map-drive=<Szám> és to=<Szám>. Az os2_d.b betöltő szolgál arra, hogy betöltse az OS/2-t a második merevlemezről. Újdonság a LILO v 2.0-ban: eszközök "felcserélése". table= A megadja a forrás eszközt a hamis (pseudo) MBRbe beírásra kerülő partíciós tábla részére (általában ez a /dev/hda vagy a /dev/sda).
Egyéb LILO beállítási opciók Az előző részek tárgyalták a /etc/lilo.conf-ban használható bejegyzéseket. A többi hasznos opciót itt tárgyaljuk meg. Ezek a lehetőségek image options-ként vannak megjelölve, és az operációs rendszer megfelelő részéhez (section) tartoznak. A többieket a /etc/lilo.conf global részéhez tervezték. - backup= A fájl amibe a LILO az indító szektor biztonsági mentését teszi. Alapértelemezés a /boot/boot.xxxx, ahol az xxxx a telepítési partíció - belső eszköz száma. Nem javasoljuk "zavaros" név használatát (lásd fenti példánkat). Nem fogjuk tudni használni a LILO beépített telepítésből való eltávolítási (uninstall) képességét; de úgy gondoljuk ezt különben is jobb óvatosan, - kézzel elvégezni. - compact Akkor használatos, ha a LILO-t mágneslemezre akarjuk telepíteni. Ha engedélyezzük, a LILO megpróbál több szektort olvasni egyszerre, ami gyorsabb indítást eredményez. Sajnos nem működik minden gépen. Használatát nem javasoljuk, mivel a normál módszer biztonságosabb és csak egy-két másodperces különbséget tud nyújtani. - disk=<device file>, bios=, cylinders=, heads=, sectors= A fentiekkel mondhatjuk meg a LILO-nak, hogy pontosan milyen BIOS eszköz számot és geometriát kell használnia. Ritkán van rá szükség. Van azonban egy kivétel: az IDE-SCSI vegyes rendszer: Ha olyan BIOS-unk van ami képes váltani az indító eszközöket (pl. a SCSI-t az IDE elé), és ha használni is akarjuk ezt a képességét, akkor meg kell mondanunk a LILO-nak a kapcsolási sorrendet a BIOS szempontjából. Ez megvalósítható egy külön bejegyzéssel a lilo.conf global szekciójában. - linear A LILO telepítésekor ezen opció megadása azt eredményezi, hogy az összes merevlemez-szektorra vonatkozó adat logikaiként tárolódik a fizikai címek helyett, így azok függetlenek minden merevlemez geometriától. Ezt a lehetőséget arra az esetre tervezték, ahol indításkor a BIOS eltérő geometriát érzékel, mint amin a Linux rendszer fut. Csak ritka esetekben szükséges! A linear opció nem oldja meg az 1024-es cilinder-határ korlátozást, ami a BIOS által meghatározott indító merevlemez geometriája. - message=<üzenetfájl> Egy szövegfájlt határoz meg, melynek tartalma a rendszer indításakor a képernyőn megjelenik. Nem szabad 24 sornál többet tartalmaznia és tájékoztatást nyújthat a LILO indítási választékáról, növelve az információt, ami a TAB lenyomására érhető el. Alkalmazása javasolt.
111.
Barhács OktatóKözpont
-
-
-
Linux rendszergazdai modul - 4. fejezet
password=<jelszó> Lehet akár a global akár a rendszerspecifikus részben. Védett elérést nyújt a LILO szolgáltatásokhoz. Ha a biztonságot komolyan vesszük, el kell távolítanunk a jelszót a lilo.conf-ból miután installáltuk azt. Mint ‘root’, annyiszor állítunk be új jelszót a LILO-nak, ahányszor csak akarunk (csak újra kell telepítenünk utána). Az is javasolt, hogy állítsuk be a korlátozott (restricted) opciót, különben lehetőség van egy parancsértelmező (shell) elindítására read-only Ez az opció megmondja a rendszermagnak, hogy kezdetben csakolvasásra csatolja be a root partíciót, ami normális egy Linux rendszer indításakor. Ha ezt kihagyjuk, a rendszermag a saját belső beállítását használja delay= Ha a prompt nincs egyértelműen beállítva, prompt-ot a Shift, Ctrl, Alt gombok lenyomásával kérhetünk. A delay= opció beállítja azt az időt, miután a LILO elindítja az első rendszert a belső listájáról. Az alapértelmezés 0, tehát nincs várakozás. A delay opciónak nincs hatása ha a prompt-ot a prompt opció jelenítette meg. vga= A kívánt VGA üzemmód beállítása indításkor. Használható módok a normal (80x25), az ext (80x50), vagy az ask, (utóbbi esetben indításkor kérdezi meg az üzemmódot). append="<paraméter>" Paraméterátadási lehetőség a Linux rendszermag számára. Lehetővé teszi a rendszermagok és hardver alkotórészek meghatározását, ugyanúgy, ahogy ez a LILO prompt-nál is lehetséges. A rendszermag először az append sorban, majd a LILO prompt-nál a megadott paramétereket kapja meg. append="mcd=0x300,10"
A LILO telepítése és eltávolítása Új Linux telepítése során, vagy később, a YaST átvezet minket a LILO interaktív telepítési lépésein. Ebben a részben feltételezzük, hogy néhány olyan dolgot kell megtennünk, amit a YaST nem tud megtenni, emiatt közelebbről szemügyre vesszük, hogyan is működik a LILO a telepítés és az eltávolítási eljárás alatt. Telepítés a beállítások megváltoztatása után Ha a LILO bármelyik alkotóelemét megváltoztattuk, vagy módosítottuk a beállításokat a /etc/lilo.conf-ban, újra kell telepítenünk a LILO-t. Ezt egyszerű elvégezni a "Map Installer" elindításával: gépnév: # /sbin/lilo
Ezután az történik, hogy a LILO megpróbál kiírni egy biztonsági másolatot a cél indító szektorról, felírja saját első részét, és létrehoz egy új map fájlt. A LILO megjeleníti az összes telepített rendszert. Added Linux* Added Linux.old Added DOS
Amikor a telepítés befejeződött, a gépet újra lehet indítani (különben az új LILO opciók feleslegesek voltak :-) ).
112.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Újraindítás közben, a BIOS először elvégzi a rendszertesztet és közvetlenül utána látni fogjuk a LILO-t, és annak parancs prompt-ját, ahol megadhatunk paramétereket, kiválaszthatunk egy indító lenyomatot (image) a legutóbb telepített beállításokból. A TAB megjelenít egy listát az összes telepített rendszerről. Telepítés a rendszermag újrafordítása (recompiling) után Ha egy újonnan készített rendszermagot bele akarunk foglalni a LILO beállításunkba, a Linux rendszermag forrásában a Makefile mindenben megfelelő megoldást kínál erre. Minden parancs a rendszermag létrehozásához és beállításához együtt a /usr/src/linux/Makefile fájlban megtalálható; ebben az INSTALL_PATH=/boot van meghatározva. A Makefile megfelelő opcióját bzlilo-nak hívják, ami a rendszermag lefordítása után, automatikusan átmásolja a jelenlegi rendszermagot, a /boot/vmlinuz-t (ez régebben a /vmlinuz volt) a /boot/vmlinuz.old alá, az új rendszermagot pedig a /boot/vmlinuz alá, és utána újratelepíti a LILO-t. Ezt az alábbi paranccsal indíthatjuk el: make bzlilo
a make zImage vagy make bzImage helyett. Ez csak akkor hasznos, ha már előre átszerkesztettük a /etc/lilo.conf-ot, és ha a jelenlegi rendszermagunk valóban a /boot/vmlinuz alatt van. Az új, valamint a régi rendszermag most a listán kell hogy legyen. Újraindítás után, a LILO prompt-nál, a két rendszermagból bármelyiket elindíthatjuk. Ez a rendszerindítást biztonságosabbá teszi, mert még mindig elindíthatjuk a régi rendszermagunkat, ha az új valamiért nem indul. A LILO eltávolítása Talán egy nap szükséges lehet, hogy eltávolítsuk a LILO-t. :-( Ez megvalósítható, ha visszaírjuk az eredeti indító szektort oda, ahová a LILO telepítve lett. Ez nem probléma Linux alatt, ha van érvényes biztonsági mentésünk. Egy indító szektor biztonsági mentése használhatatlanná válik, ha a kérdéses partícióra közben új fájlrendszer kerül (DOS használóknak: formattálva lett). Egy partíciós tábla (MBR) biztonsági mentése érvénytelenné válik, ha a kérdéses merevlemezt időközben átpartícionálták. Ezek az elavult "biztonsági mentések", időzített bombák. Legjobb letörölni azokat olyan gyorsan, ahogy csak lehet. A rendszerszektorokba kicsomagolni, régi és érvénytelen biztonsági mentéseket, biztos út az adatvesztéshez! Nagyon könnyű visszaállítani a DOS, Windows 95/98 vagy OS/2 MBR-t. Csak adjuk ki az alábbi MS-DOS parancsot egy rendszerlemezről (5.0 óta elérhető): C:\> FDISK /MBR
vagy OS/2-n C:\> FDISK /NEWMBR
113.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A fenti parancsok csak az első 446 bájtot, (az indító kódot) írják az MBR-ba és érintetlenül hagyják a partíciókat 14 . Egyéb helyreállításokra, először készítsünk biztonsági mentést a kérdéses LILO-ról — csak a biztonság kedvéért. Most le kell ellenőriznünk (legalább kétszer :-) ), vajon a régi biztonsági mentés fájlunk helyes-e, és pontosan 512 bájt-e a mérete! Végül, írjuk vissza, de fel ne cseréljük az if=-et az of=-al! Ha a LILO az y partíción található (pl. /dev/hda1, /dev/hda2 . . . ): gépnév: # dd if=/dev/y of=ÚjMBR bs=512 count=1 gépnév: # dd if=RégiMBR of=/dev/y
Ha a LILO a z eszköz MBR-jében található (pl. /dev/hda, /dev/sda): gépnév: # dd if=/dev/z of=ÚjMBR bs=512 count=1 gépnév: # dd if=RégiMBR of=/dev/z bs=446 count=1
Az utolsó parancs "óvatos" és nem írja felül a partíciós táblát. Ne feledjük el: az fdiskkel meg kell jelölnünk a kívánt indító partíciót bootable-ként. Egyébként, figyeljük meg, hogy milyen könnyű és gyors egy indító szektor biztonsági mentés készítése. Javasoljuk, hogy tegyük meg gyakran!
A Grub Háttérinformációk és felépítés A GRUB a Grand Unified Bootloader rövidítése. Hasonlóan a LILO rendszertöltőhöz, a Grub két részből áll: az első rész (512 byte méretű), amely az MBR-be vagy más boot-szektorba íródik és egy nagyobb második rész, amely a programkódot tartalmazza, amely a későbbiekben be fog töltődni. Az alapvető különbség a LILO-val szemben az, hogy a GRUB direkt módon támogat néhány fájlrendszert (beleértve a SuSE Linux által használt összes fájlrendszert és természetesen a vfat-ot is). Éppen ezért nem szükséges újra telepíteni a Grub-ot miután a beállításokat megváltoztattuk. Amikor a rendszer elindul, a Grub beolvassa a menüfájl tartalmát. Hacsak nem új rendszermagot (/boot/vmlinuz) telepítünk, vagy a kezdeti ramlemezt (/boot/initrd) módosítottuk, a Grub képes megtalálni a maga számára. A grub nem igényli a rendszermag fizikai pozíciójának ismeretét, Éppen ezért a rendszertöltőt nem kell újratelepíteni a rendszermag újrafordítása után sem. A Grub egy másik nagy előnye az összes rendszertöltő paraméter szerkesztése a rendszerindítás megkezdése előtt. Ez nagyon hasznos akkor, ha hibák találhatók a menüfájlban. Mindezeken felül továbbra is lehetőségünk is van a promptban is megadni a rendszertöltő paramétereit. Éppen ezért bármely, a boot menüben nem szereplő operációs rendszert is elindíthatunk. A grub lehetővé teszi a rendszermag, valamint az initrd nevének és helyének megadását a rendszerindítást megelőzően.
114.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A rendszertöltési folyamat és az érintett GRUB komponensek Amikor a számítógép elindul, a Grub két komponense érintett: 1. A GRUB első részének betöltése A SuSE Linux telepítését köbetően a GRUB első része a merevlemez MBRébe vagy más indítószektorába kerül telepítésre, esetleg egy hajlékonylemez indítószektorába. Az első rész nagyon kis méretű, mivel az MBR-ben korlátozott hely áll rendelkezésre. Éppen ezért ennek feladata csupán a GRUB következő részének betöltése. 2. A GRUB második részének betöltése A Grub második része nyújtja a tulajdonképpeni rendszertöltő funkcionalitást, beleértve a menüt is (természetesen az ekkor nem látható Grub-burkot is; lásd lent) és azt a programkódot, amely átadja az irányítást az operációs rendszer számára. A SuSE Linuxban a második rész a /boot/grub/stage2 fájlban található. Amikor a rendszertöltőt telepítjük, a rendszertöltő második részének helye rögzítésre kerül az első részben is. A Grub rendszertöltő menü lehetőségei Amikor a Grub megjelenik a képernyőn, egyszerűen kiválaszthatunk egy menübejegyzést a megfelelő operációs rendszer elindításához (akárcsaka LILO rendszertöltőnél megszokott módon). A rendszertöltő paraméterek hozzáadhatók a Linux rendszerekhez is. A grub több lehetőséggel is szolgál. Kiléphetünk a menüből az ESC megnyomásával és egyéni menübejegyzéseket szerkeszthetünk az "e" (edit) gomb segítségével. Általában a paraméterek módosítása csak hiba elhárításakor szükséges, például akkor, ha az operációs rendszer nem indul. A módosítások csak erre az egy indításra vonatkoznak, azaz nem rögzülnek végérvényesen. A menübejegyzés szerkesztéséhez először is nyomjuk meg az ESC gombot. Ezután a kurzormozgató gombokkal válasszuk ki azt a bejegyzést, amelyet módosítani akarunk, majd nyomjuk meg az "e" billentyűt. Ha például a "Linux" bejegyzést választottuk ki, a következő sorok jelennek meg: kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd
Válasszuk ki a szerkesztendő sort a kurzormozgató billentyűkkel. Nyomjuk meg az "e"-t mégegyszer az adott sor szerkesztéséhez. Ezen a módon az olyan paramétereket javíthatjuk ki, mint a partíciók és elérési útvonalak. Nyomjuk meg az Enter gombot a menübe történő visszalépéshez, itt el is indíthatjuk az adott bejegyzéshez tartozó rendszert a "b" billentyű megnyomásával. A további lehetőségekről a képernyő alján található segítségnyújtó szövegben olvashatunk. Másik lehetőség a szakértők számára, hogy a "c" (command line) billentyű lenyomásával egy parancsértelmezőbe, a Grub burokba jutunk. Adjuk ki a "help" parancsot a felhasználható parancsok listájának megtekintéséhez. Nyomuk meg az "ESC" gombot a rendszertöltő menübe történő visszalépéshez.
115.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A Grub burok használatával olyan operációs rendszert is betölthetünk, amelyet nem tartalmaz a Grub menü. Ez az opció nagyon hasznos akkor, ha tesztelni szeretnénk a saját magunk által fordított rendszermagot és nem készítettünk hozzá bejegyzést a Grub menüben. A Grub burokban történő rendszerindításhoz a következő parancsokat adhatjuk ki manuálisan (ebben a példában Linux rendszert indítunk a /dev/hda5 partícióról és a /dev/hda7 gyökérkönyvtárral): grub> kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 [Linux-bzImage, setup=0x1400, size=0xe9a45] grub> initrd (hd0,4)/initrd [Linux-initrd @ 0x369000, 0x863c9 bytes] grub> boot
A szintaktika a /boot/grub/menu.lst fájlban látható. Fontos: amikor végeztünk, ne felejtsük el beírni a "boot" parancsot a rendszer indításához. Egy praktikus tanács: mivel a Grub direkt módon eléri a Linux fájlrendszert a rendszerindításkor, a TAB billentyűt használhatjuk a fájlnevek automatikus kiegészítéséhez (a bash-ban megszokott módon). Ez különösen hasznos lehet akkor, ha nem tudjuk pontosan a megfelelő fájlnevet. Ezenfelül megtekinthetjük az egyes fájlok tartalmát a cat paranccsal. Például a Grub beállítási fájl tartalmát, vagy bármely más fájlt. Természetesen e módon azok a fájlok is megtekinthetők, amelyeket a futó rendszerben rendszergazdai jogosultság nélkül nem is olvashatunk. Mivel ez nem kívánt dolog a biztonság szempontjából, egy jelszót állíthatunk be a /boot/grub/menu.lst fájlban. E módon az operációs rendszerek továbbra is indíthatók a menüből, de az interaktív opciók ("e" és "c") használatához meg kell adnunk a jelszót. Ehhez a "p" billentyűt kell lenyomnunk. A Grub beállítása A Yast2 segítségével A legegyszerűbb módja a Grub beállításának a YaST2 használata. Indítsuk el a YaST2 vezérlőközpontot és menjünk a következő részre: Rendszer \ Rendszertöltő beállítása
A jelenlegi beállítások megváltoztatása menüpontban megváltoztathatjuk a globális beállításokat és az egyes operációs rendszerekhez tartozó egyéni beállításokat is. A menü kiválasztott pontjait követve először is el kell döntenünk, hova települjön a Grub: az első merevlemez MBR-ébe, egy másik partíció rendszerindító szektorába vagy a gyökérpartícióba, esetleg hajlékonylemezre. Nyomjuk meg a Tovább gombot és a következő párbeszédablakban megadhatjuk a rendszerindító menü időtúllépését, valamint megadhatjunk egy jelszót a Grub számára. Ez a jelszó véd a speciális Grub parancsok kiadása ellen, amelyet már bemutattunk a korábbi "A Grub rendszerindító menü lehetőségei" részben).
116.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Nyomjuk meg a Tovább gombot a szekciók táblájának szerkesztéséhez. Minden egyes szekció a rendszerindító menü egy bejegyzésének felel meg. Hozzáadhatunk vagy törölhetünk szekciókat, valamint kijelölhetjük az alapértelmezettet. Kattintsunk a Szerkesztés gombra a szekció átnevezéséhez vagy a rendszermag paraméterek módosításához (Szakértői beállítások). Kattintsunk a Tovább gombra a szekcióbeállításokhoz való visszatéréshez. Válasszuk ki a Jelenlegi beállítások mentése pontot és kattintsunk a Befejezés gombra a változások mentéséhez. A Szakértői kézi beállítás pontban manuálisan szerkeszthetjük a Grub beállítási fájlokat (/boot/grub/menu.lst és /etc/grub.conf). További információkat erről a következő bekezdésekben olvashat. Válasszuk ki az Eredeti beállítások visszaállítása pontot a telepítési állapotra történő visszaállításhoz. A menüfájl A telepítést követően a menü fájl a legfontosabb beállítási fájl. A SuSE Linuxban a /boot/grub/menu.lst fájl tartalmazza az információkat az összes partícióról és operációs rendszerről, amely a menü segítségével betölthető. Vegyük figyelembe, hogy a Grub a megszokott Linux eszköznevekkel (mint /dev/hda1) szemben saját elnevezéseket használ a merevlemezek és partíciók jelölésére. A hajlékonylemezes meghajtó mint fd0 érhető el, az összes merevlemez mint hd0, hd1 és így tovább. A partíció sorszáma vesszővel elválasztva következik: hd0,0 az első merevlemez első partíciója. Fontos: az eszköz és partíció számozás nullával kezdődik. Példák: (fd0) (hd0) (hd1) (hd0,0)
Hajlékonylemezes meghajtók A rendszer első merevlemeze (rendszerindító merevlemez) Második merevlemez Az első merevlemez első partíciója
A 0-3-ig számozott partíciók a négy elsődleges partíciót jelölik. A logikai partíciók 4től számozódnak: (hd0,0) (hd0,1) (hd0,2) (hd0,3) (hd0,4) (hd0,5) (hd0,6) stb.
1. elsődleges partíció az első merevlemezen 2. elsődleges partíció 3. elsődleges partíció Kiterjesztett partíció Első logikai partíció Második logikai partíció Harmadik logikai partíció
Egy másik fontos pont: amikor merevlemez címkéket rendelünk hozzá, a Grub nem tesz különbséget az IDE, SCSI vagy egyéb eszközök között.
117.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Az összes BIOS által felismert merevlemezek vagy egyéb vezérlők (SCSI, RAID, stb.) a rendszertöltés közbeni felismerés sorrendje szerint számozódnak. A (hd0,0) minden esetben az első merevlemez, amelyet a BIOS felismer, attól függetlenül, hogy az IDE, SCSI, vagy RAID eszköz. Például: Egy két IDE és két SCSI merevlemezzel rendelkező rendszerben ha a BIOS-ban be van kapcsolva az "IDE before SCSI" opció, akkor a Grub a következő címkéket használja: (hd0) (hd1) (hd2) (hd3)
Első IDE merevlemez Második IDE merevlemez Első SCSI merevlemez Második SCSI merevlemez
A következő példában látható a /boot/grub/menu.lst menüfájl felépítése. Ebben a példában /dev/hda5 a Linux rendszerindító partíciója, /dev/hda7 a gyökérpartíció és /dev/hda1 tartalmazza a Windows operációs rendszert. gfxmenu (hd0,4)/message color white/green black/light-gray default 0 timeout 8 title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd title windows root (hd0,0) makeactive chainloader +1 title floppy root (fd0) chainloader +1 title failsafe kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 vga=normal nosmp maxcpus=0 3 initrd (hd0,4)/initrd.shipped
ide=nodma
apm=off
acpi=off
A bejegyzéseknek a következő jelentése van: Ahogyan az látszik, az első két sor a splash menü beállításait tartalmazza: a háttérkép a /dev/hda5 meghajtón található, a "message" néven. Előtérszín: fehér, háttérszín: zöld, kijelölés: fekete, a kijelölés háttérszíne: világosszürke. A harmadik sorban található "default 0" bejegyzés jelzi azt, hogy az első menübejegyzés ("title linux") az alapértelmezett választás rendszerindításkor. sor: az időtúllépés 8 másodperc. A bejegyzések szerint az alábbi operációs rendszer fog indulni: 1. Az első bejegyzés ("title linux") SuSE Linux-t indít. A Linux rendszermag az első merevlemez elsó logikai partícióján található (hd0,4) (ebben a példában a rendszerindító partíció); a fájl neve vmlinuz. A rendszermag paraméterek (mint a gyökérpartíció, vga stb.) közvetlenül vannak hozzáfűzve. Figyelem: A gyökérpartíciót mint Linux eszköznevet kell megadni, mert ez át lesz adva a Linux rendszermagnak, mint paraméter. 118.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Információ az initrd helyére vonatkozóan: Az initrd szintén az első merevlemez első logikai partícióján található. 2. A következő szekció a Windows-t indítja az első merevlemez első partíciójáról (hd0,0). Hogy mindezt biztonságosan tegye, a "makeactive" paraméter beállításra kerül a következő sorban, mivel a Windows csak olyan partícióról képes indulni, amely aktívvá van téve. A "chainloader +1" bejegyzés miatt a jelzett partíció első szektora betöltődik és végrehajtásra kerül. 3. A következő bekezdés használható az operációs rendszer indítására egy hajlékonylemezről a BIOS-ban történt bárminemű változtatás nélkül is. 4. Az utolsó szekció a Linuxot biztonságos módban indítja (failsafe mode). A fentiek alapján a menüben történt változtatások automatikusan érvénybe lépnek a következő rendszerindításkor. A térkép (map) fájl A térképfájl egy másik fontos Grub beállítási fájl. A legtöbb esetben ezt a fájlt nem szükséges módosítanunk. Most térjünk vissza kicsit ahhoz a témához, hogyan számozza a Grub a lemezeket egy összetett rendszerben. Egy olyan rendszerben, amelyben a merevlemezek különböző vezérlőkre csatlakoznak (pl. mind IDE, mind SCSI merevlemezek vannak), a Grub megkísérli meghatározni a rendszerindítási sorrendet, egy speciális eljárással (ha a Grub nem tudja feldolgozni a BIOS adatait). E helyett a Grubnak ki kell számolnia hogy a rendszer az IDE vagy SCSI merevlemezről indul. A Grub menti az eredményt a /boot/grub/device.map fájlba. A mi példánkban a fájlnak a következő a tartalma (a rendszertöltési sorrend a BIOS-ban: "IDE before SCSI"): (fd0) (hd0) (hd1) (hd2) (hd3)
/dev/fd0 /dev/hda /dev/hdb /dev/sda /dev/sdb
Fontos: ha a fájltartalmat manuálisan szerkesztettük (rendszerindítási problémák miatt), mindenképp ki kell adnunk a grub --batch --device-map=/boot/grub/device.map
parancsot a Grub újratelepítéséhez. A --device-map paraméter adja meg azt, hogy a Grub a meglévő térképfájlt használja. A többi parancs az /etc/grub.conf fájlból vehető át, amelyet a következő bekezdésben ismertetünk.
119.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Az /etc/grub.conf fájl Az /etc/grub.conf fájl tartalmazza a "grub" parancs paramétereit. Például: root (hd0,4) install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst quit
A root bejegyzés a Grub fájlokat tartalmazó partíciót csatolja. Az install parancsra a Grub telepítésre kerül. A fenti példában az 1. fájl az első merevlemezen található MBR-be kerül telepítésre (d (hd0)). A 2. lépéshez tartozó fájl 0x8000 memóriacímre kerül betöltésre (/grub/stage2 0x8000). A (hd0,4)/grub/menu.lst bejegyzés mutatja meg a menü fájl pozícióját.
A futási szintek konfigurálása Egy UNIX rendszer bootolása (elindítása), és alapállapotba hozása (inicializálása), még egy tapasztalt rendszeradminisztrátornak is kihívás lehet. Ez a fejezet a SuSE Linux boot koncepciójának rövid áttekintését tartalmazza. Ez a koncepció sokkal bonyolultabb, de egyben sokkal rugalmasabb is, mint más Linux disztribúcióké. Alapját a System V UNIX munkaállomások boot koncepciója adja. Az "Uncompressing Linux..." üzenet jelzi, amikor a kernel veszi át az irányítást a hardver felett. Ellenőrzi és beállítja a konzolt 1 miközben kiolvassa a BIOS beállításokat és inicializálja az alapvető hardveres csatolókat. Ezután a meghajtók végigszondázzák a gépben lévő hardveregységeket és alapállapotba hozzák őket. A partíciók ellenőrzése, és a gyökér fájlrendszer becsatolása után (amit a “ / ” jelhez rendelünk), a kernel elindítja a /sbin/init programot, ami a főrendszert indítja el, annak minden programjával és beállításával. A kernel irányítja az egész rendszert, beleértve a hardveres hozzáféréseket és a programok rendelkezésére álló CPU időt is. Az init program A /sbin/init program felelős minden rendszerfolyamat megfelelő alapállapotba hozásáért. Ennélfogva ő az őse (szülője) minden folyamatnak (processznek) az egész rendszerben. Az init-nek különleges szerepe van: az init-et közvetlenül a kernel indítja el és, ellenáll a 9-es SIGNAL-nak, ami normál esetben a folyamatok leállítására szolgál. Minden további programot vagy közvetlenül az init , vagy valamelyik leszármazott, ún. gyermekfolyamata (”child process”) indít el. Az init beállítása központilag történik a /etc/inittab fájlban. Itt kell meghatározni az ún. futási szinteket is - ezekről majd a következő részben lesz szó. Ugyanitt van megadva, hogy mi történjen a különböző szinteken. A /etc/inittab-ban található bejegyzésektől függően több szkriptet is elindít az init program, amelyek az egyszerűség kedvéért mind ugyanabban a könyvtárban vannak (/etc/init.d).
120.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A rendszer elindításának (és egyben lezárásának is) az egész folyamatát az init felügyeli és irányítja. Ebből a szempontból a kernelt mintegy "háttérfolyamatnak" lehet tekinteni, amelynek feladata minden más folyamat felügyelete, il. a CPU idő és a hardveres hozzáférések szabályozása más programoktól jövő kérések alapján. Futási szintek A Linuxban a futási szintek határozzák meg, hogy hogyan fog elindulni a rendszer. Elindítás után a rendszer a /etc/inittab fájl initdefault bejegyzése szerint indul el. Egy másik megoldás, hogy különleges futási szinteket adunk meg indításkor (pl. a LILO promptnál): a kernel minden paramétert, amire nincs szüksége, közvetlenül sz init programnak ad át. Amikor már fut a rendszer, a futási szintek megváltoztatásához elég elindítani az init programot a megfelelő paraméterrel. Ezt viszont, csak a rendszergazda tudja megtenni: root@gépnév:/ # init S
Az előbbi parancs egyfelhasználós módba küldi a rendszert, amely a rendszer karbantartására és adminisztrálására szolgál. Az S módban elvégzett munka végeztével a rendszeradminisztrátor ismét a 2-es szintre tudja visszatenni a futási szintet a következők begépelésével: root@gépnév:/ # init 2
Ekkor minden alapvető program újra elindul és más felhasználók is bejelentkezhetnek, dolgozhatnak a rendszerben. Az alábbi táblázat áttekintést nyújt a rendelkezésre álló futási szintekről. Az 1-es futási szintet soha nem szabad használni olyan rendszerben, melynek a /usr partíciója NFS-en keresztül lett becsatolva. Futási szint 0 S 1 2 3 4 5 6
Jelentése Halt (állj!) Egyfelhasználós mód Többfelhasználós mód hálózat nélkül Többfelhasználós mód szabványos hálózattal Többfelhasználós mód hálózattal és xdm-mel Nem használt Nem használt Újraindítás
A rendszert (többek között) az: root@gépnév:/ # init 0
begépelésével lehet megállítani, újraindítani pedig ezzel: root@gépnév:/ # init 6
Ha az X Window rendszer már megfelelő módon telepítve van, és be lett állítva és azt szeretnénk, hogy a felhasználók grafikus módban jelentkezzenek be, ehhez egyszerűen lehet a futási szintet a 3-as szintre módosítani. 121.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Először érdemes kipróbálni, hogy a következő paranccsal: root@gépnév:/ # init 3
úgy működik-e a rendszer, mint ahogy azt elvárjuk. A futási szintek megváltoztatása Rendszerint két dolog történik a futási szint megváltoztatása során. Először a jelenlegi futási szint ún. stop szkriptjei lefutnak, amelyek lezárnak néhány, a jelenlegi futási szint számára nélkülözhetetlen programot. Ezután elindulnak az új futási szint start szkriptjei. Általában ekkor indul el több program. Ennek illusztrálására bemutatjuk, mi történik, ha a futási szintet a 2-es szintről a 3-asra változtatjuk: A rendszergazda (‘root’) utasítja az init-et a futási szint megváltoztatására: root@gépnév:/ # init 3
-
-
Az init program ekkor belenéz a /etc/inittab beállítási fájlba, amiből kiderül, hogy el kell indítania a /sbin/init.d/rc programot, paraméterként adva át neki az új futási szint számát. Ezután az rc program elindítja a jelenlegi futási szint összes stop szkriptjét, de csak azokat, amelyekhez nincs megfelelő start szkript a kiválasztott új futási szinten. A mi példánkban, ezek azok a szkriptek, amelyek a /etc/init.d/rc2.d fáljban vannak (mivel az előző futási szint a 2-es volt), és amelyek ‘K’ betűvel kezdődnek 2.A 'K’ betűt követő szám adja a szkriptek leállási sorrendjét, mivel vannak bizonyos függőségek, amelyeket figyelembe kell venni. Az utolsó teendő az új futási szint start szkriptjeinek elindítása. Ezek példánkban a /etc/init.d/rc3.d fájlban találhatók, és ‘S’ betűvel kezdődnek. Ezek indítási sorrendjére is ugyanaz vonatkozik, mint fentebb. Ha a futási szintet ugyanarra változtatjuk, amiben a rendszer eddig is volt, akkor az init csak a /etc/inittab-ot ellenőrzi (hogy történt-e benne valami változtatás), majd elindítja a megfelelő lépéseket (pl. elindít egy getty-t egy másik interfészen).
Inicializáló szkriptek A /etc/init.d könyvtárban található szkriptek a következő két nagy csoportra oszthatók: - azon szkriptek, melyeket közvetlenül az init indít el. Ezek csak a rendszer azonnali elindítása és lezárása során fognak lefutni (például egy áramkimaradás, vagy a Ctrl+Alt+Del megnyomása után). - azon szkriptek, amelyeket az init közvetett módon indít el. Ez a futási szint megváltoztatása során történik. Rendszerint a /etc/init.d/rc program indul el ekkor, amely garantálja, hogy az idevágó szkriptek a megfelelő sorrendben fognak lefutni. Minden szkript a /etc/init.d könyvtárban található. A futási szint megváltoztatása során használt szkriptek is itt találhatóak, de azok szimbólikus hivatkozásokon keresztül hívódnak meg a /etc/init.d/rc0.d-től /etc/init.d/rc6.d-ig terjedő alkönyvtárak valamelyikéből. 122.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Ez pusztán a duplikált szkriptek elkerülése (pl. amikor több futási szint is használja ugyanazt a szkriptet), és a könnyebb érthetőség miatt van így. Mivel minden szkriptet start és stop szkriptként is el lehet indítani, ezért ezeknek a szkripteknek értelmezniük kell a "start" és "stop" paramétereket. Példa /etc/init.d/rc2.d/K40network
A 2-es futási szint elhagyása során ez egyike azon szkripteknek, amely elindul. Ennek eredményeként a /etc/init.d/rc elindítja a /etc/init.d/network szkriptet "stop" paraméterrel. A 3-as futási szintre lépés során ugyanez a szkript indul el, csak a "stop" helyett a "start" paraméterrel. A futási szintek meghatározott alkönyvtáraiban található hivatkozások (linkek) a szkripteket egyszerűen az adott futási szintekhez utalják ki. A következőkben röviden bemutatjuk az elsőként (avagy értelemszerűen lezárás legutóljára) elindított boot és stop szkripteket, valamint megmagyarázzuk a karbantartó szkriptet. - boot: A rendszer indítása során közvetlenül hajtódik végre az init programon keresztül. Ez a szkript független a kiválasztott futási szinttől, és csak egyszer indul el. Futása során ellenőrzi a fájlrendszereket, elindítja a kernel démont, letörli a /var/lock felesleges fájljait, és a hálózatot beállítja a visszacsatoló eszközre (ha az ki van választva a /etc/rc.config-ban). Továbbá beállítja a rendszerórát, és induló helyzetbe hozza a Plug-and-Play (automatikusan felismert és telepített) hardveregységeket az isapnp segédprogram segítségével. Ha a fájlrendszer automatikus ellenőrzése és javítása során hiba történik, a rendszeradminisztrátor a jelszó megadása után avatkozhat be. A szkripthez a /etc/init.d/boot.d könyvtár van rendelve. Minden itt található szkript el fog indulni a rendszer elindulása (bootolása) során. Ide lehet tenni azokat a saját szkripteket is, amelyeknek csak egyszer kell lefutnia. A boot.local szkript legutolsóként fut le. - boot.local: Ebben lehet olyan parancsokat megadni, amelyeknek a rendszer indulása során, de még egy futási szintre való belépés előtt kell lefutniuk. Szerepe hasonló, mint az AUTOEXEC.BAT fájlnak DOS rendszereken. - boot.setup: E szkript feladata azon általános beállítások elvégzése, amiket az egyfelhasználós módból más futási szintre váltás során kell megcsinálni. Ekkor töltődik be a billentyűzetkiosztás, és ekkor indul el a kernel démon, amely automatikusan betölti a modulokat. - halt: Ez a szkript csak a 0-ás vagy a 6-os futási szintekre való váltás során indul el. Vagy halt , vagy reboot programként fut le. A halt program lefutásától függ, hogy a rendszer újraindul, avagy leáll. - rc: E szkriptnek a futási szintek megváltoztatása során van különösen nagy jelentősége. Ez hívja meg az aktuális futási szint stop szkriptjeit, és az újonnan kiválasztott futási szint start szkriptjeit. Saját szkripteket nagyon könnyen lehet hozzáadani ehhez a vázhoz. A /etc/init.d/skeleton fájl sablont szolgáltat ehhez. Ajánlatos hozzáadni egy <START_> változót ehhez a szkripthez, hogy a /etc/rc.config fájlban érvényessé váljon a szkript. További paramétereket csak akkor adjunk hozzá, ha igazán szükséges (példának lásd a /etc/init.d/gpm szkriptet). 123.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Ezután bele kell írni a hivatkozásokat a megfelelő rc?.d fájlba, hogy a szkript valóban el is induljon a futási szint megváltoztatása során (a szkript fájlok neveit, stb. lásd fentebb. A /etc/rc.config Gyakorlatilag az egész SuSE Linux beállítása elvégezhető a /etc/rc.config nevű központi konfigurációs fájl használatával. Ez jópár környezeti változó állít be, melyeket - többek között - az init szkriptek ellenőriznek. A /etc/init.d könyvtárban található szkriptek mindegyike első lépésként a /etc/rc.config-ot indítja el, hogy kiolvassák belőle azon változók értékeit, melyek rájuk vonatkoznak. Ezenfelül nagy számú beállítási fájlt lehet készíteni a /etc/rc.config-ból. Ez a /sbin/SuSEconfig feladata. Ha például megváltoztatjuk a hálózati beállításokat, a /etc/resolv.conf fájl újra elkészül, mivel ez az általunk megadott beállításoktól függ. Így ha saját magunk változtatjuk meg a /etc/rc.config-ot, akkor ezt követően el kell indítanunk a /sbin/SuSEconfig-ot, annak biztosítására, hogy minden beállítási fájl a megfelelő beállításokat tartalmazza a megfelelő helyen. Ha a beállítást a YaSTtal változtatjuk meg, erre nincs szükség, ugyanis a YaST automatikusan elindítja a /sbin/SuSEconfig-ot és frissíti a beállítási fájlokat. Ez a koncepció képessé tesz minket arra, hogy alapvető beállításokat a rendszer újraindítása nélkül is meg tudjunk változtatni. Mivel néhány változtatás nagyon bonyolult, egyes programokat valószínűleg újra kell indítani ahhoz, hogy a beállítások érvényesüljenek rajtuk. Ezt az eljárást részletesebben is taglaljuk a hálózati beállításokról szóló fejezetben, ahol ezeket a programokat a következő parancsokkal indítjuk újra: root@gépnév:/ # /etc/init.d/network stop root@gépnév:/ # /etc/init.d/network start
Amint látható, a start és stop szkripteket könnyedén el tudjuk magunk is indítani. A rendszer beállításához a következő lépések megtételét javasoljuk: Küldjük a rendszert egyfelhasználós üzemmódba: root@gépnév:/ # init S
Alternatív módon az 1-es futási szintet is kiválaszthatjuk. Ekkor megvan a lehetőség több konzolon való bejelentkezésre is: root@gépnév:/ # init 1
Szükség szerint változtassuk meg a /etc/rc.config beállítási fájlt. Ezt egy tetszés szerint kiválaszott szerkesztővel lehet megcsinálni, vagy a YaST-tal a ‘A konfigurációs állomány módosítása’ menüponton keresztül. Indítsuk el a /sbin/SuSEconfig-ot, hogy érvényesüljenek a beállítások. Ha a /etc/rc.config-ot YaST-tal változtattuk meg, ez a lépés automatikusan végrehajtódik.
124.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Küldjük vissza rendszerünket az eredeti futási szintre: root@gépnév:/ # init 2
Ez az eljárás főként akkor szükséges, amikor az egész rendszerre kiható (például a hálózati) beállításokat változtatunk meg. A kisebb változtatásokhoz nem szükséges egyfelhasználós üzemmódba lépni, de segítségével biztosítjuk, hogy minden szükséges program megfelelő módon újraindul.
Fájlrendszer konfiguráció Fájlrendszer típusok Linux alatt, Több fajta fájlrendszer is használható Linux alatt. Ezeket az alábbi táblázat ismerteti. Filerendszer Affs Ext Ext2 Hpfs Iso9660 Minix
Msdos Ncpfs Nfs Proc Smb Sysv Ufs Umsdos
Vfat Xiafs Ntfs
Leírás Amiga Fast Filesystem: az Amiga számítógépek fájlrendszere. Extended Filesystem: az ext2 fájlrendszer elődje. Ma márnincs lényeges szerepe. Second extended Filesystem: a szabvány Linux fájlrendszer. High Performance Filesystem: az IBM OS/2 szabványos fájlrendszere – csak az olvasása támogatott (read-only). a CD-ROM-ok szabványos fájlrendszere. Ez a fájlrendszer az egykori egyetemi “operációs rendszerek” projektből származik. Ez volt az első fájlrendszer, amit Linuxra használtak. Manapság csak hajlékonylemezekre használt fájlrendszer. Eredetileg a DOS használta ezt a fájlrendszert, ma már egyéb operációs rendszerek is használják. Fájlrendszer Novell kötetek (volumes) becsatolására. Hálózati fájlrendszer (Network Filesystem): Segítségével adatok tárolhatók a hálózat bármely gépén, és az elérhetőség megadható a hálózaton keresztül. A processzek fájlrendszere (virtuális). Server Message Block: olyan termékek használják, mint a Windows for Workgroups, a Windows NT és a Lan Manager hogy a fájlokat el lehessen érni a hálózaton keresztül is. Az SCO UNIX, a Xenix és a Coherent használják (ezek kereskedelmi UNIX rendszerek PC-kre). A BSD, a SunOS és a NeXTstep használják. Csak az olvasása támogatott (read-only). UNIX az MSDOS-on: egy normál fat fájlrendszeren alkalmazható.Speciális fájlok használatával megvalósítja a UNIX funkcióit (úgymint engedélyezés, linkek, hosszú fájlnevek). Viszont nagyon lassú. Virtuális FAT: a normál fat fájlrendszer kiegészítése (támogatja a hosszú fájlneveket). Egy régi fájlrendszer, amit ma már nemigen használnak. A Windows NT fájlrendszere (csak olvasásra támogatott). 125.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Az /etc/fstab A mountolható fájlrendszereket az /etc/fstab fájl tartalmazza. Ez a fájl rendkívül fontos, így csak fokozott óvatossággal lehet szerkeszteni, amit egy sima szövegszerkesztővel is át lehet alakítani. Íme egy példa a /etc/fstab fájlra (saját!): #eszköz Csatlakozásipont LABEL=/ / none /proc /dev/hda3 swap /dev/cdrom /mnt/cdrom /dev/fd0 /mnt/floppy /dev/hda1 /mnt/windows
Fájlrendszer ext3 proc swap iso9660 auto vfat
Beállitások Bizt. defaults defaults defaults noauto,owner,ro noauto,owner defaults
fsck 1 1 0 0 0 0 0 0 0 0 0 0
Ebben a fájlban - és mindenhol a Linux beállítási fájljaiban - a "#" kezdetű sorok csak magyarázatra szolgálnak. A /proc fájlrendszert a Linux automatikusan hozza létre a saját folyamatai kezelésére, tehát nem tényleges eszköz, így azzal nem kell törődnünk. Látható, hogy a swap tártelület az elsődleges HDD 3. pertícióján van alapbeállításokkal (defaults).A CD-ROM fájlrendszere: iso9660. Ez fontos! A noauto jelentése egyértelmű: nem automatikusan mountolható. Az owner jelentése: tulajdonos, vagyis a felületet éppen használó mountolhatja az eszközt. Magyarul, ha valamelyik felhasználót ki kell zárni a CD-ROM használatból, akkor itt ezt meg lehet könnyedén oldani. Az "ro" jelentése pedig Read Only (csak olvasható). Látható továbbá az is, hogy az elsődleges HDD 1. partícióján egy "vfat" típusú fájlrendszer van. Ez a Windows helye. Saját gépen éppen Windows XP, de gond nélkül mountolható bármilyen Windows fájlrendszer is. Az utolsó két oszlop egész értéket tartalmaz: az elsőt a dump rendszer használja annak meghatározására, hogy egy fájlrendszert ki kell-e írni a külső tárolóra (dumping). Az utolsót az fsck használja annak jelzésére, hogy kell-e ellenőrizni egy fájlrendszert és milyen sorrendben! További részletekkel a man fstab és az info fstab parancsok szolgálnak. Sérült fájlrendszer megjavítása A megsérült fájlrendszerek trükkös problémák a rendszer számára. Ez előfordulhat egy áramkimaradás okozta váratlan leállásnál, vagy egy rendszer-összeomlás esetén is. Általában, fájlrendszerek nem javíthatók futó rendszeren. Ha valóban súlyos problémával találkozunk, akkor még a root fájlrendszerünket se tudjuk becsatolni, mivel a rendszerindítás egy "kernel panic" üzenettel leáll. Ekkor egyetlen esélyünk a rendszer megjavítására, egy "külső" rescue rendszert használata. A SuSE Linux rescue rendszere tartalmaz egy segédprogramot, az e2fsck-t, és probléma diagnosztizálásra, a dumpe2fs-t. Ezek meg kell, hogy oldják a legtöbb problémát. Vészhelyzetben, általában a kézikönyvlapok sem elérhe-t ők. Ha egy fájlrendszer hibás pl. invalid superblock miatt, akkor, nagy valószínűséggel az e2fsck is hibázni fog. Ha ez a helyzet, akkor a superblock-unk is megsérülhetett. 126.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
A superblock-ról van másolat minden 8192 blokknál (8193, 16385, ...). Ha megsérült egy superblock-unk, megpróbálhatjuk az egyik másolatát használni helyette. Ezt az alábbi paranccsal tudjuk végrehajtani: gépnév: # e2fsck -f -b 8193 /dev/sérült_partíció
A -f opció kényszeríti (forces) a fájlrendszer ellenőrzést, és felülírja az e2fsck hibáit, így – mivel a superblock másolat érintetlen – minden rendben lesz. e2fsck Az e2fsck program a Linux ext2 fájlrendszerének ellenörzésére szolgál. A parancs használata: e2fsck [ -pacnyrdfvstFSV ] [ -b szuperblokk ] [ -B blokkméret ] [ -l|-L hibás_blokkok_listája ] [ -C fájlleíró ] eszközfájl A parancs opciói: - a: Ez az opció a visszafelé való kompatibilitást szolgálja, jelentése megegyezik a -p opcióval. Emiatt - ahol csak lehet - a -p opció használata javasolt. - b szuperblokk: Ezzel az opcióval a normál szuperblokk helyett a megadott másolatát használja a program. Erre az opcióra akkor van szükség, ha az elsödleges szuperblokk megsérül; a legtöbb fájlrendszer tartalmazza a másolatát a 8193, 16385, stb. blokkokban. Ha alternatív szuperblokk megadásra kerül, és a fájlrendszer nem csak olvasható módon lett megnyitva, az e2fsck az elsödleges szuperblokkot is kijavítja a fájlrendszer ellenörzése során. - B blokkméret: Alapértelmezés szerint az e2fsck több, különbözö blokkmérettel vizsgálja a szuperblokkot, hogy megállapítsa a pontos blokkméretet. Ez a vizsgálatbizonyos esetekben problémát okozhat. Ezzel az opcióval kényszeríthetö az e2fsck arra, hogy a megadott blokkméretet használja. Ha nem talál Szuperblokkot, hibával kilép. - c Az opció következtében az e2fsck futtatja a badblocks programot, amely megkeresi azokat a hibás blokkokat, amelyek az adott fájlrendszerhez tartoznak, és bejelöli azokat hibásnak a hibás blokkok inode-jához kapcsolással. - C: Ezzel az opcióval az e2fsck a megadott fájlleíróba írja, hogy az ellenörzés hol tart, ezzel megoldható az e2fsck futásának programból való monitorozása. Ez az opció kifejezetten az e2fsck más programból való futtatásakor használatos. Ha a megadott fájlleíró 0, az e2fsck státuszát egy sávval ábrázolja. Ehhez videokonzolon, vagy terminálon kell a programnak futnia. - d Hibakeresési információk nyomtatása. (Csak az e2fsck program hibakereséséhez használatos.) - f Akkor is végrehajtja az ellenörzést, ha a fájlrendszer "tisztának" tünik. - F Az eszközhöz tartozó buffer cache-t kiüríti az ellenörzés elött. Csak akkor használatos, ha az e2fsck program futási idejét szeretnénk vizsgálni. - l fájlnév A fájlnév fájlban felsorolt blokkokat hozzáadja a hibás blokkok listájához. Ennek a fájlnak a formátuma azonos a badblocks program által generálttal. - L fájlnév A hibás blokkok listájának beállítása a fájlnév fájlban megadottakra. (Ez az opció hasonló, mint a -l, azzal az eltéréssel, hogy itt a hibás blokkok aktuális listáját törli, majd a megadottakra állítja be a program.)
127.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 4. fejezet
n A fájlrendszert csak olvasható módon nyitja meg, és valamennyi kérdésre ‘nem’-et válaszol. Az e2fsck nem interaktív futtatására szolgál. (Megjegyzés: Amennyiben a -c, -l, vagy a -L opciót megadjuk a -n mellett, a fájlrendszert írásraolvasásra nyitja meg, a hibás blokkok listájának aktualizálásához. Ezen kívül más módosítás nem történik az fájlrendszerben.) p Automatikus helyreállítás mindennemü kérdés nélkül. r Ez az opció csak kompatibilitási okból szerepel, semmilyen hatása nincs. s Ezzel az opcióval bájtfelcserélés, azaz a normali zált, szabványos bájtsorrend (ez i386, vagy little endian) használata érhetö el. Amennyiben a fájlrendszer már szabványos bájtsorrendet használ, az opciónak nincs hatása. S Ez az opció bájtcserét hajt végre, a fájlrendszer aktuális bájtsorrendjétöl függetlenül. t Az e2fsck futási idöadatait megjeleníti. Ha az opciót kétszer használjuk, akkor az egyes menetekröl külön statisztikát ad. v Böbeszédü mód. V Megjeleníti a program verzióinformációit. y valamennyi kérdésre ‘igen’ választ adva lehetövé teszi az e2fsck nem-interaktív futtatását (Lásd a -n opciót is.)
A töredezettség (fragmentation) elleni harc Amikor egy fájlt a lemezre írunk, nem lehet mindig egymást követõ blokkokat használni. Azokat a fájlokat, melyek blokkjai nem egymást követik, töredezettnek (fragmented) nevezzük. A töredezett fájlok olvasása lassabb, mivel a lemez íróolvasó feje sokat mozog ilyenkor. Ezért szükséges védekezni a töredezettség ellen, habár a probléma csökkenthetõ jó cache puffer és elõreolvasás (read-ahead) alkalmazásával is. Az ext2 fájlrendszer a töredezettséget igyekszik a minimálisra szorítani a fájlok blokkjainak egymás közelébe rakásával még akkor is, ha egymást szorosan követõ blokkok nem találhatók a lemezen. Ezt úgy éri el, hogy gyakorlatilag mindig a legközelebbi blokkot foglalja le egy fájl következõ blokkjaként. Ezért az ext2 fájlrendszerek esetén többnyire nem kell a töredezettség miatt aggódnunk. Ha mégis szükség lenne a töredezettségmentesítésre ext2 fájlrendszer esetében, létezik erre program. Sok MS-DOS töredezettségmentesítõ program létezik, mely a blokkok átrendezésével csökkenti a töredezettséget. Más fájlrendszerek esetén a töredezettség úgy szüntethetõ meg, hogy lementjük a rendszer fájljait, újra létrehozzuk a fájlrendszert, majd visszaállítjuk az elmentett fájlokat. A töredezettségmentesítés elõtt mindenképp jó ötlet a mentés elkészítése (ext2 és msdos típus esetében is), mert egy töredezettségmentesítés közben sok minden elromolhat.
128.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Kvótarendszer Linuxon Mi az a quota? A quota engedi számodra, hogy korlátokat határozz meg a lemezen megvalósuló tárolásra két szempontból is: meghatározhatod a felhasználó és egy felhasználói csoport bitrokában lévő lehetséges csomópontok (inodes) számát, valamint definiálhatod a felhasználóhoz és egy felhasználói csoporthoz tartozó lemezblokkok számát is. A quota alapötlete mögött az áll, hogy rákényszeritsük a felhasználókat arra, hogy maradjanak a részükre kijelölt lemezfogyasztási korlát alatt, ezzel megfosztva őket a rendszeren található lemezterületek korlátlan felhasználásától. A quota felhasználónként, valéamint fájlrendszerenként kezelhető. Amennyiben valószínűsíthető, hogy egynél több fájlrendszeren hozhat létre fájlokat a felhasználó, akkor a kvótát valamennyi fájlrendszerre külön-külön be kell állítani. A Linux quota jelenlegi állapota A quota támogatás - legalábbis amint hallottam - az 1.3.8x verziójú kernelektől kezdődően integrált a kernelbe. Manapság része a 2.0 verziójú Linux kernelnek. Amennyiben a rendszered nem támogatja a kvótát, javaslom a rendszer frissítését (upgrade). Pillanatnyilag a quota csak az ext2 tipusú fájlrendszerek számára használható. A quota szoftvere Attól függően, hogy milyen disztribúciónk van; lehet, hogy installált, de lehet, hogy nem installált a quota szoftver a rendszerünkön. Amennyiben nincs installálva, letölthető a quota szoftverének forrása. A quota beállítása A konfiguráció 1. Konfiguráld újra a kerneled és add hozzá a quota támogatását begépelve egy "y"-t a következő helyen: Quota support (CONFIG_QUOTA) [n] y
2. Fordítsd le és installáld a quota programot. 3. Változtasd meg a rendszered inicializációs scriptjét, ahol a quota vizsgálata történik és kapcsold be a qoutá-t bootidőben.
129.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Íme egy példa: # Ellenőrizd a quota-t és kapcsold is be/Check quota and then turn quota on. if [ -x /usr/sbin/quotacheck ] then echo "Ellenőrzöm a quotát./Checking quotas. This may take some time." /usr/sbin/quotacheck -avug echo " Kész/Done." fi if [ -x /usr/sbin/quotaon ] then echo "Bekapcsolom a quota-t./Turning on quota." /usr/sbin/quotaon -avug fi
Aranyszabály, hogy a mindíg kapcsoljuk be a quota-t, mihelyt a /etc/fstab fájlban felsorolt fájlrendszereink mountolásra kerültek, ellenkező esetben a quota nem működni. Javaslom, hogy kapcsold be a quota-t a rendszered inicializáló scriptje végén, vagy ha úgy gondolod, akkor rögtön azután, hogy a fájlrendszereid mountolásra kerültek a rendszered inicializáló scriptjében. 4. Változtasd meg a /etc/fstab fájlt.Az olyan partíciók, amelyeken még nem engedélyezett a quota, normális esetben valami ilyesféleképpen festenek: /dev/hda1 /dev/hda2
/ /usr
ext2 ext2
defaults defaults
1 1
1 1
Ahhoz, hogy engedélyezzük a felhasználói quota támogatását egy fájlrendszeren, adjuk hozzá a "usrquota" stringet a negyedik mezőben tartalmazott "defaults" szóhoz. /dev/hda1 /dev/hda2
/ /usr
ext2 ext2
defaults defaults,usrquota
1 1
1 1
Helyettesítsük a "usrquota"-t a "grpquota"-val, amennyiben a csoport quota támogatás szükséges a rendszerünkön. /dev/hda1 /dev/hda2
/ /usr
ext2 ext2
defaults defaults,grpquota
1 1
1 1
Szükséges egyszerre a felhasználói és a csoport quota támogatása is egy fájlrendszeren? /dev/hda1 /dev/hda2
/ /usr
ext2 ext2
defaults defaults,usrquota,grpquota
1 1
1 1
5. Hozz létre quota rekord "quota.user" és "quota.group" fájlokat. Minkét quota rekord fájlnak - a quota.user és a quota.group fájlnak is - a root tulajdonában kellene lennie és csak a root részére kellene olvasható- és írhatónak lennie, ezen kívűl senki más részére sem.
130.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Lépjünk be a rendszerbe root-ként. Menjünk annak a partíciónak a gyökerébe, amelyre engedélyezni kívánjuk a quota-t, majd hozzuk létre a quota.user és a quota.gruop fájlokat a következőképpen: touch touch chmod chmod
/partition/quota.user /partition/quota.group 600 /partition/quota.user 600 /partition/quota.group
6. Most bootoljuk életbeléptetésére.
újra
a
rendszert
az
általunk
kieszközölt
változtatások
Jegyezzük meg azt, hogy amennyiben engedélyezni kívánjuk a quota-t további partíciókra is, a jövőben már csak a 4-es, 5-ös és a 6-os lépés szükséges. Quota kijelölés felhasználók és csoportok számára Ez a művelet véghezvihető az edquota paranccsal. Én csak lefuttatnám a quotacheck parancsot az -avug kapcsolókkal ahhoz, hogy hozzájussak a legfrissebb, korábbi fájlrendszer-használathoz, amely szükséges a quota szerkesztéséhez. Ez persze csak egy személyes megszokás, nem pediglen egy mindenáltal megkívánt lépés. Quota engedélyezése adott felhasználó számára Következzen egy példa. Van egy bob felhasználói azonosítójú (login id) ember a rendszeremen. Az "edquota -u bob" parancs elindítja számomra a vi szövegszerkesztőt (vagy azt a szövegszerkesztőt, amelyiket a $EDITOR környezeti változóban meghatároztam), a bob nevű felhasználó quotá-jának szerkesztéséhez, valamennyi particióra, amelyre a quota engedélyezve lett. Quotas for user bob: /dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500) inodes in use: 356, limits (soft = 1000, hard = 1500)
A "block in use/használatben lévő blokkok" a felhasználó által a partíción elhasznált összes blokkok számát jelenti (kilobyte-okban). Az "inodes in use/használatban lévő csomópontok" a felhasználó tulajdonában lévő fájlok számát jelöli az adott partíción. Quota engedélyezése adott csoport számára Tegyük fel, hogy van egy games nevű csoport a rendszeremen. Az "edquota -g games" parancs ismételten elindítja a számomra a vi szövegszerkesztőt, hogy megszerkeszthessem a games csoport számára a quota-t: Quotas for group games: /dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000) inodes in use: 1454, limits (soft = 3000, hard = 4000)
131.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Quota engedélyezése nagyobb számú felhasználó számára ugyanazon értékekkel Hogy gyorsan beállítsam a quota-t mondjuk 100 felhasználó részére a rendszeremen ugyanazokra az értékekre, mint amit a bob nevű felhasználóm számára megadtam, előszőr a bob quota információit kellene megszerkeszteni, majd futtatni a következőt: edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
feltételezve azt, hogy te csh-t használsz és azt, hogy a felhasználói azonosítóid (UID) 500-tól kezdődnek. Továbbá az edquota esetében létezik 3 tag, amelyekhez hozzá kellene szoktatnod magadat: Soft Limit, Hard Limit és a Grace Period. - Soft Limit: Jelzi a partíción lévo quota felhasználó átlagos maximális lemezhasználatát. Amikor kombináljuk a grace period -dal, ez határvonalként fog működni, és azon quota felhasználó részére figyelmeztetéseket fog eredményezni a küszöbön álló quota áthágással kapcsolatosan, amikor ez megtörténik. - Hard Limit: A hard limit csak olyankor működik, ha a grace period érték is be van állítva. Ez meghatározza a lemezhasználat abszolút korlátját, amelyet egy quota felhasználó már nem tud túllépni. - Grace Period: Lefuttatva az "edquota" paranccsal, a grace period jelenti azt az időkorlátot, mielőtt a soft limit kierőszakolja a fájlrendszer részére a quota engedélyezését. Az időegységek közül a sec(onds), hour(s), day(s), week(s), és a month(s) értékek használhatók. Amit az "edquota" -t parancsra látni fogsz, az a következő: Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days, file grace period: 0 days
Változtasd meg a 0 napok (days) részt bármilyen más elfogadhatónak érzett időtartamra. Személy szerint én a 7 napot (7 days) vagy az 1 hetet (1 week) valasztanám. Különféle Quota parancsok Quotacheck A quotacheck használatos egy fájlrendszer lemezhasználatának figyelésére és a quota rekord fájl "quota.user" legfrissebb állapotra való frissítésére. A quotacheck futtatása megkívánt a rendszer bootolása idején, vagy a cron munkálatain keresztül (mondjuk, minden héten ?).
132.
Barhács OktatóKözpont
Linux rendszergazdai modul - 4. fejezet
Repquota A repquota letrehoz egy összesített quota információt a fájlrendszerrel kapcsolatban. Következzen egy egyszerű kimenet (output), amelyet a repquota ad: # repquota -a User
used
Block limits soft hard
grace
File limits used soft hard
grace root bin uucp man user1 user2
-------
175419 18000 729 57 13046 2838
0 0 0 0 15360 5120
0 0 0 0 19200 6400
14679 735 23 10 806 377
0 0 0 0 1500 1000
0 0 0 0 2250 1500
Quotaon és a Quotaoff A quotaon a quota számlázás (accounting) bekapcsolására; a quotaoff pedig kikapcsolja azt. Valójában a két fájl megegyezik egymással. Ezek a parancsok a rendszer indításakor (startup) és leállításakor (shutdown) kerülnek futtatásra.
133.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Rendszergazdai feladatok Felhasználó és csoportkezelés Mivel több felhasználó is használhatja egyszerre a rendszert, annak el kell tudni döntenie, hogy ki milyen jogosultságokat kaphat. Ezért a felhasználóknak azonosítaniuk kell magukat a rendszer számára. Tehát minden felhasználó egyedi azonosítóval rendelkezik (UID - felhasználói azonosító), és egy vagy több csoportba tartozik (GID - csoportazonosító). Ezeket az információkat a /etc/passwd és a /etc/group fájlok tartalmazzák. Létezik még ezeken kívül a /etc/shadow fájl is, ami a titkosított jelszavakat tartalmazza és csak a root számára olvasható. ,A név azonban nem minden. Egy számla (account) az összes fájlt, erőforrást és információt jelenti, mely egy felhasználóhoz tartozik. Az elnevezés a bankokra utal, és az üzleti rendszerekben valóban pénz kapcsolódik a számlához, amely fogy a rendszer használatával. Pl. a lemezterületnek lehet napi ára megabájtonként, a feldolgozási időnek pedig másodpercenkénti ára lehet. A Linux kernel maga egyszerű számokként kezeli a felhasználókat. Mindegyik felhasználót egy egyedi egész szám, az ún. felhasználói azonosító (user id vagy uid) azonosít, mivel a számítógép gyorsabban és könnyebben kezeli a számokat, mint a szöveges meghatározásokat. A kernelen kívül létezik egy adatbázis, mely egy szöveges nevet, a felhasználói névet hozzákapcsolja egy felhasználói azonosítóhoz. Az adatbázis még más információkat is tartalmaz. Egy felhasználó létrehozásához a felhasználó személyről információkat kell bevinni az adatbázisba és egy home könyvtárat kell létrehozni számára, ahol saját fájljait tárolhatja. Szükséges lehet még némi alapképzés az új felhasználó számára, és egy megfelelően beállított induló környezet létrehozása is. A legtöbb Linux terjesztésben található program a számlák létrehozására. Több ilyen létezik. Két (viszonylag általánosan ismert) parancssori program, melyek egymásnak alternatívái az adduser és a useradd ; de léteznek grafikus felületű (GUI) programok is. Bármelyik programot is használjuk, kevés, jóformán semennyi munkát kell végeznünk "puszta kézzel". Még ha a részletek tekervényesek is, ezek a programok csupa magától értetődő dolgot művelnek. A UNIX rendszerek alapvető felhasználói adatbázisa a /etc/passwd szöveges fájl, amit jelszófájlnak (password file) nevezünk. Ez felsorolja az összes érvényes felhasználói nevet és a hozzájuk kapcsolt információkat. A fájlban minden felhasználói névhez egy sor tartozik, és 7, kettősponttal elválasztott mezőre oszlik: 1. Felhasználói név (username). 2. Titkosított jelszó. 3. Felhasználói azonosító szám (uid). 4. Csoportazonosító szám (gid). 5. Teljes név, vagy egyéb leírás. 6. Home könyvtár. 7. Bejelentkezési burok (login shell), azaz a bejelentkezéskor futtatandó program. 134.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
A rendszer minden felhasználója olvashatja a jelszófájlt, így pl. megtanulhatják a többi felhasználó nevét. Ez azt is jelenti, hogy még a jelszó (a második mezőben) is mindenki számára elérhető. Igaz, itt csak egy titkosított változata van, azaz elméletileg ez megfelelő megoldás. Azonban a titkosítás feltörhető, különösen gyenge jelszavak esetén (pl. ha az túl rövid, vagy benne van egy szótárban). Ezért nem jó ötlet, hogy itt vannak a titkosított jelszavak. Sok Linux rendszer rendelkezik az árnyék jelszó (shadow password) lehetőségével: a titkosított jelszó ekkor egy külön fájlban, a /etc/shadow-ban van, melyet csak a root olvashat. Ekkor a /etc/passwd fájl csak egy speciális jelet tartalmaz a második mezőben. Minden program, melynek egy felhasználó azonosításával kell törődnie, el kell érje az árnyék jelszőfájlt. A szokásos programok elérhetnek a jelszón kívül minden információt az eredeti jelszófájlból, de magát a jelszót nem.'' A legtöbb rendszeren teljesen mindegy, milyen számok a felhasználói- és csoportazonosítók (uid és gid), de ha a hálózati fájlrendszert (NFS) használjuk, a felhasználóknak azonos uid-jük és gid-jük kell legyen a gépeken. Ez azért van, mert az NFS is a számszerű azonosítókat használja. Azonban ha nem használunk NFS-t, a konkrét számértékek közönbösek, rábízhatók valamilyen automatikus rendszerre. Kezdeti környezet: /etc/skel Amikor egy új felhasználó home könyvtára létrejön, a /etc/skel tartalma alapján töltődik fel új tartalommal. Ezért ebbe a könyvtárba a rendszeradminisztrátor létrehozhat egy szép környezetet az új felhasználók számára. Pl. létrehozhat egy /etc/skel/.profile fájlt, amely az EDITOR környezeti változót egy népszerű, új felhasználóknak szánt szövegszerkesztőre állítja be. Általában az a legjobb, ha a /etc/skel a lehető legkisebb, mivel csaknem lehetetlen a már létrehozott felhasználói fájlok frissítése. Pl. ha a közkedvelt editor megváltozik, minden már létező felhasználónak meg kell szerkeszteni a .profile fájlját. A rendszeradminisztrátor megkísérelheti ezt automatikusan, shell szkriptből megtenni, de ilyenkor nagyon nagy valószínűséggel sérülhet valakinek a módosított .profile fájlja. Hacsak lehetséges, a globális konfigurációt globális fájlokba érdemes tenni, mint pl. a /etc/profile. Ezáltal a felhasználói fájlok megsértésének veszélye nélkül változtathatjuk meg a beállításokat.
135.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Felhasználók létrehozása kézzel Egy új felhasználói számla kézzel is létrehozható, ha követjük az alábbi lépéseket: 1. Szerkesszük meg a /etc/passwd fájlt egy szövegszerkesztő programmal, és adjunk egy új sort hozzá, mely az új számlát írja le. Nagyon vigyázzunk a szintaxisra! Ne szerkesszük egy általános szövegszerkesztővel a jelszófájlt! A vipw lefoglalja a fájlt, így más programok nem fogják frissíteni a szerkesztés ideje alatt. A jelszó mezőjébe írjunk `*'-ot, hogy még ne lehessen bejelentkezni a számlára. 2. Hasonlóan szerkesszük meg a /etc/group fájlt, ha új csoportot is létre kell hoznunk. 3. Hozzuk létre a home könvtárat az mkdir paranccsal. 4. Másoljuk a /etc/skel tartalmát a home könyvtárba. 5. Korrigáljuk a tulajdonosokat és az engedélyeket a chown és chmod parancsokkal. 6. Állítsuk be a jelszót a passwd paranccsal. Az utolsó lépés után a számla működni fog. Ezért ezt valóban csak legutoljára szabad megtenni, különben a felhasználó bejelentkezhet, miközben készítjük a számláját, ami bonyodalmakhoz vezethet. Néha szükséges olyan buta számlák létrehozása, melyet nem használ egy ember sem. Pl. egy anonymous FTP-szerver létrehozásához egy ftp nevű felhasználót kell létrehozni. Ilyen esetekben nem szükséges a jelszót beállítani, sőt, jobb, ha nem tesszük meg, mert így senki sem tudja azt használni, csak a root, mivel ő minden felhasználó nevében dolgozhat. A felhasználók létrehozására használhatjuk az useradd parancsot, a csoportokéra pedig a groupadd-ot. Felhasználók törlése Egy felhasználó törléséhez először le kell törölni az összes fájlját, levelesládáját, nyomtatási feladatait, cron és at feladatait, és minden egyéb hivatkozást a felhasználóra. Azután törölhető a megfelelő sor a /etc/passwd fájlból, és a rá vonatkozó bejegyzések a /etc/group-ból. Jó ötlet először kikapcsolni a számlát, ahogy fentebb láttuk, majd utána elvégezni ezeket, hogy ne használhassa a rendszert a felhasználó, miközben töröljük számláját. Figyeljünk arra, hogy a felhasználónak lehetnek fájljai a home könyvtárán kívül is. A find használható ezek keresésére. Ez a parancs hosszú ideig futhat, ha nagyok a lemezeink. Ha NFS-en keresztül csatolt lemezeink is vannak, akkor vigyázni kell, hogy ne terheljük túl a hálózatot vagy a szervert. Néhány Linux terjesztés speciális parancsokat tartalmaz a felhasználók törlése céljából, melyek szokásos neve deluser vagy userdel. Igaz, ez a munka kézzel is könnyen elvégezhető, és ekkor biztosak lehetünk abban, hogy minden rendben és hiánytalanul zajlott.
136.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Egy felhasználó időleges kikapcsolása Néha szükséges egy számla ideiglenes kikapcsolása anélkül, hogy törölnénk. Pl. ha a felhasználó nem fizette a használati díjat, vagy a rendszeradminisztrátor észrevette, hogy egy cracker megszerezte a jelszót arra a számlára. A legjobb mód az időleges kikapcsolásra a bejelentkezési burok egy speciális programra való kicserélése, mely egy üzenetet ír ki, majd azonnal kilép. Ily módon akárki próbál bejelentkezni a számlára, nem fog tudni semmilyen parancsot kiadni, de megtudja ennek okát. Célszerű, ha az üzenet felhívást tartalmaz a rendszeradminisztrátorral való kapcsolatfelvételre a hiba elhárítása érdekében. Azt is megtehetjük, hogy a felhasználói nevet vagy a jelszót cseréljük másra, de akkor a felhasználó nem tudja, mi történt. A megzavart felhasználó pedig több munkát jelent. A legegyszerűbb mód ilyen üzenőprogram létrehozására egy `tail szkript' írása: #!/usr/bin/tail +2 Ezen számla a biztonság megsértése miatt lett lezárva. Hívja fel a 555-1234 számot, és várja a fekete öltönyös emberek érkezését. Az első két karakter (`#!') azt mondja a kernelnek, hogy a sor további része egy parancs, mely értelmezni fogja a fájl hátralevő részét. A példabeli tail parancs az első sor kivételével mindent kiír a standard kimenetre. A tail szkripteket külön könyvtárban tarthatjuk, hogy nevük ne zavarja a normális parancsokat. Felhasználók kezelésére a következő programok használhatók: - useradd - felhasználók felvétele - usermod - felhasználók tulajdonságainak módosítása - userdel - felhasználók törlése Useradd, usermod, userdel useradd - létrehoz egy új felhasználót, vagy frissíti az alapértelmezett ,,új felhasználó'' információkat useradd Létrehoz egy új felhasználót, vagy frissíti az alapértelmezett ,,új felhasználó'' információkat A parancs formája: useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir]] [-s shell] [-u uid [ -o]] login useradd -D [-g default_group] [-b default_expire_date] [-s default_shell]
default_home]
137.
[-f
default_inactive]
[-e
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
A parancs paraméterei: login: az új felhasználó loginneve. A parancs kapcsolói: Amikor nem használjuk a ,,-D'' opciót, akkor a useradd parancs létrehozza az új felhasználót felhasználva a parancssorban megadott értékeket, és a rendszer alapértelmezett értékeit. Az új felhasználó bejegyzésre kerül a rendszer fájljaiba, létrejön a home könyvtára és másolásra kerülnek az inicializációs fájljai, függően a parancssori opcióktól: - -c komment: A komment kerül a rendszer jelszófájljába, a felhasználó komment mezőjébe. - -d home_könyvtár: Az új felhasználónak létrehozza a home_könyvtár könyvtárat. Az alapértelmezés megegyezik a felhasználó login nevével a könyvtár neve. - -e lejárati_idő: A dátum, ameddig érvényes a felhasználói számla. A lejárati_idő formátuma: hónap:nap:év, mindegyik két számjegyes formában. - -f inaktív_napok: A jelszó lejárta után ennyi nappal a jelszó tartósan kikapcsolódik. A 0 értéknél azonnal kikapcsolódik, amint a jelszó lejár, a -1 érték pedig kikapcsolja ezt a lehetőséget. - -g kezdő_csoport: A csoport neve vagy száma, amely a felhasználó kezdő csoportja lesz. A csoportnévnek léteznie kell. Az alapértelmezett csoportszám 1. - -G csoport: Egy lista a kiegészítő csoportokról, amelyekhez a felhasználó tartozik. Alapértelmezésben a felhasználó csak a kezdő_csoport-hoz tartozik. - -m: A felhasználó home könyvtára létrejön, ha még nem létezik. Ha a ,,-k'' opciót is használjuk, akkor a skeleton_dir-ből a home könyvtárba másolódnak az ott lévő fájlok, egyébként a /etc/skel könyvtárat használja erre a célra. A ,,-k'' csak a ,,-m'' opcióval együtt érvényes. Alapértelmezésben nem hozza létre a könyvtárat, és nem másolja a fájlokat. - -s shell: A felhasználó login shelljének a neve. Alapértelmezésben ez a mező üres. - -u uid: A felhasználó UID-je numerikus formában. Ez az érték egyedi, az értéknek pozitívnak kell lennie. A 0 és 99 közötti értékeket tipikusan a rendszerszámlákhoz szokták rendelni. Amikor használjuk a ,,-D'' opciót, akkor a useradd parancs kiírja a képernyőre az alapértelmezett beállítási értékeket, vagy frissíti azokat a következő parancssori opciók alapján: - -b default_home: Az elérési út, ahová a felhasználók home könyvtára kerül majd. A felhasználó neve lesz a vége az default_home bejegyzésnek, amikor létrejön az új könyvtár, ha a ,,-d'' opciót nem használod, amikor létrehozod az új felhasználót. - -e default_lejárati_idő: A dátum, amelynél a felhasználói számla ki lesz kapcsolva. - -f default_inaktív: A jelszó lejárta után ennyi nappal a jelszó tartósan kikapcsolódik. - -g default_csoport: A csoport neve vagy száma, amely a felhasználó kezdő csoportja lesz. - -s default_shell: Az új felhasználó login shelljének a neve. Ezt a shellt fogja kapni minden újonnan létrehozott felhasználó. Megjegyzés: nincs. Példa: useradd -d /home/ujuser -e 12/31/2003 -f 0-g tanulo -G root -m -s /bin/bash -u 777 ujuser
138.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
usermod Módosítja egy felhasználó számláját. A parancs formája: usermod [-c comment] [-d home_dir [ -m]] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-l login_name] [-s shell] [-u uid [ -o]] login A parancs paraméterei: -login: a felhasználó bejelentkezési neve A parancs kapcsolói: - -l: az új loginnevet specifikálja Megjegyzés: A usermod nem tudja megváltoztatni a nevét annak a felhasználónak, aki be van jelentkezve a rendszerbe. Az ilyen felhasználónak először le kell állítani az összes processzét, ha a felhasználó numerikus ID-jét is meg akarjuk változtatni. Ha megváltoztattuk, akkor a crontab fájlok tulajdonosát kézzel kell megváltoztatnunk. NIS esetében bármilyen változást a NIS szerveren kell végrehajtani. Példa: usermod -c newujser -d /ujuser -l munka -m ujuser
userdel Törli a felhasználói számlát és a hozzátartozó fájlokat. A parancs formája: userdel [r] login_név A parancs paraméterei: -login név: a felhasználó bejelntkezési neve A parancs kapcsolói: - -r: A fájlok a felhasználó home könyvtárából el lesznek távolítva, a $HOME könyvtárral együtt. Azokat a fájlokat, amelyek más fájlrendszeren helyezkednek el, neked kell megkeresned és kézzel törölnöd. Megjegyzés: Nem engedélyezi a felhasználói számla törlését, ha a felhasználó éppen be van jelentkezve. Le kell állítani (kill) a felhasználó minden futó processzét, mielőtt törölni akarjuk a számláját. Nem lehet eltávolítani semmilyen NIS adatot a kliensekről. Ezt muszáj a NIS szerveren végrehajtanunk Példa: userdel -r munka
passwd Felhasználói jelszó megváltoztatása. A parancs formája: passwd [-f|-s] [név] passwd [-g] [-r|R] csoport passwd [-x max] [-n min] [-w figy] [-i inakt] név passwd {-l|-u|-d|-S} név A parancs paraméterei: -név ill. csoport: a csoport vagy felhasználó bejelntkezési neve. A parancs kapcsolói: A felhasználónak először a régi jelszavát kell beírnia, ha már volt neki. Ezután ennek a jelszónak a kódolt változatát összehasonlítja a tárolt jelszóval. A megfelelő jelszó beírására a felhasználónak csak egy lehetősége van. A rendszergazda átugorhatja ezt a lépést, így az elfelejtett jelszavak is megváltoztathatóak. Miután a felhasználó beírta a jelszavát, a passwd megvizsgálja, hogyan rendelkezett a rendszergazda a jelszavak ,,szavatossági idejéről''. Amennyiben az idő nem alkalmas a jelszó megváltoztatására, passwd kilép minden változtatás nélkül. 139.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Ezekután a program bekéri a felhasználótól az új jelszót, majd megvizsgálja hogy elég bonyolult-e. Általános szabályként elmondható, hogy a jelszavak jók, ha 6-8 karakterből állnak, és a következő jelkészletekből tartalmaz elemeket: - Az ABC kis betűi - Az ABC nagy betűi - Számok 0 és 9 között - Írásjelek Fontos odafigyelni, hogy ne tartalmazzon az adott rendszeren használt ,,erase'' és ,,kill'' kódú karaktereket. A passwd nem fogad el nem eléggé bonyolult jelszót. Ha a jelszó elfogadható, a passwd a biztonság kedvéért még egyszer bekéri az új jelszót, és csak akkor hajtja végre a változtatást, ha a két bevitt jelszó megegyezik. A -g kapcsoló használata esetén a megadott nevű csoport jelszava változik meg. Ezt csak a rendszergazda vagy a csoport adminisztrátora teheti meg. A jelenlegi csoportjelszót nem kéri változtatás előtt. Az -r kapcsolót a -g kapcsolóval használva lehet a csoport jelszavát kikapcsolni, ezáltal minden tag használhatja a csoportot. Az -R kapcsoló a -g kapcsolóval használva a csoport minden felhasználó előtt lezárul. A csoportok jelszavai állandó biztonsági problémát jelenthetnek, mivel nemcsak egy ember ismerheti a jelszót. A csoportkezelés azonban hasznos abban az esetben, ha több felhasználó együttműködését kell megoldani. A jelszavak elévülési idejét a rendszergazda a -x, -n, -w, és -i kapcsolókkal szabályozhatja. A -x kapcsoló a jelszócserék közti maximális időt állítja be. A jelszót legkésőbb max naponként meg kell változtatni. A -n kapcsoló a két jelszócsere közötti minimális időt szabályozza: a felhasználó addig nem változtathatja meg jelszavát, amíg legalább min nap el nem telt az előző változtatás óta. A -w kapcsolóval azt állíthatod be, hogy hány nappal a jelszó lejárta előtt kezdje el a rendszer a felhasználót figyelmeztetni. Az első figyelmeztetés figy nappal a lejárat előtt jelenik meg, és utána naponta tájékoztatja a felhasználót a még hátralévő napok számáról. Az -i kapcsoló inakt nappal a jelszó lejárta után lezárja a felhasználó belépési lehetőségét. A felhasználók lezárhatóak és újra beengedhetőek a -l és a -u kapcsolókkal. A -l kapcsoló a jelszót kicseréli egy olyan értékre, ami semmilyen lehetséges jelszó kódolt értékével nem egyezik. Az -u kapcsoló visszaállítja a jelszót a régire, és így újra engedélyezi a belépést. A jogosultságok az -S kapcsolóval állíthatóak be. Ez 6 részből áll: Az első azt jelzi, hogy a felhaszáló le van zárva (L), nincs jelszava (NP), vagy van érvényes jelszava (P). A második rész az utolsó jelszóváltoztatás dátuma. A következő négy rész a jelszavak minimális és maximális ideje, az első figyelmeztetés a jelszó lejárta előtt és hogy mennyi ideig él a jelszó lejárta után. Megjegyzés: A passwd a felhasználók és a csoportok megváltoztatását végzi. A felhasználók csak a saját jelszavukat változtathatják meg, a rendszergazda bárkiét. A csoportok jelszavát az adott csoport adminisztrátora változtathatja meg. A passwd ezen kívül használható a felhasználói adatok, mint pl. az igazi név, a login shell, vagy a jelszavak ,,szavatossági idejének'' megváltoztatására is.
140.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Példa: passwd -x 3 -n7 -w 3 -i 3 munka
groupadd Új csoportot hoz létre. A parancs formája: groupadd [-g groupid] csoportnév A parancs paraméterei: -csoportnév: az új csoport neve. A parancs kapcsolói: -g: az új csoportazonosítót adja meg. Megjegyzés: nincs. groupmod Létező csoportot adatait változtatja meg. A parancs formája: groupmod [-g groupid] csoportnév A parancs paraméterei: -csoportnév: a csoport neve. A parancs kapcsolói: -g: az új csoportazonosítót adja meg. Megjegyzés: nincs. groupdel Felhasználói csoport törlése. A parancs formája: groupdel csoportnév A parancs paraméterei: -csoportnév: acsoport neve. A parancs kapcsolói: nincsenek. Megjegyzés: nincs. Felhasználói korlátozások Az /etc/login.defs és az /etc/limits Az /etc/login.defs állomány tartalmazza a bejelntkezésre vonatkozó korlátozásokat. Formája a következő: # # # #
Három részt muszáj definiálni: MAIL_DIR, ENV_SUPATH és ENV_PATH. Ha nincsenek meghatározva, akkor néhány önkényes (és valószínűleg rossz) érték lesz feltételezve. Minden egyéb érték opcionális - ha nincsenek definiálva, akkor az akció vagy opció ki lesz kapcsolva.
# A megjegyzések (amik "#" jellel kezdődnek), és az üres sorok ki # lesznek hagyva. # # Ennyi másodpercet várjon a hibás bejelentkezés után, mielőtt megengedné a # következő bejelentkezést. # FAIL_DELAY 3 # # Engedélyezi további jelszavak használatát tárcsázásos vonalra, amelyek a # /etc/dialups fájlban specifikálva. # DIALUPS_CHECK_ENAB yes # Engedélyezi, hogy a /var/log/faillog fájlba kerüljenek a hibás # bejelentkezési kísérletek adatai. # FAILLOG_ENAB yes #
141.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
# Engedélyezi a "hibás felhasználói név" feliratot, amikor a bejelentkezési # eljárás nem sikerül. # LOG_UNKFAIL_ENAB no # # Engedélyezi a sikeres bejelentkezések loggolását. # LOG_OK_LOGINS no # # Engedélyezi, hogy a /var/log/lastlog fájlba kerüljenek a bejelentkezési # idők információi. # LASTLOG_ENAB yes # # Engedélyezi a levelesládának és a státuszának az ellenőrzését a # bejelentkezéskor. # Kapcsold ki, ha a shell indítófájljaiból ellenőrzöd a leveleket # ("mailx -e" vagy hasonló). # MAIL_CHECK_ENAB yes # # Engedélyezi a további ellenőrzést jelszóváltáskor. # OBSCURE_CHECKS_ENAB yes # # Engedélyezi az időkorlátozás meghatározását a /etc/porttime fájlban. # PORTTIME_CHECKS_ENAB yes # # Engedélyezi az ulimit, umask és az előnyösség beállítását a jelszó fájl # (/etc/passwd) gecos mezőjében. # QUOTAS_ENAB yes # # Engedélyezi a su használatának loggolását. A SYSLOG_SG_ENAB ugyanaz # csoportokra és sg-re. # SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes # # Ha definiálva van, akkor a fájl teljes elérési útjával kell, hogy # szerepeljen, vagy egy eszköznév, vagy több eszköz neve kettősponttal # elválasztva egymástól. A root felhasználónak csak ezekről az eszközökről # engedélyezett a bejelentkezés. # CONSOLE /etc/securetty #CONSOLE console:tty01:tty02:tty03:tty04 # # Ha definiálva van, akkor minden su aktivitást loggol ebbe a fájlba a # rendszer. # #SULOG_FILE /var/log/sulog # # Ha definiálva van, akkor a ":" (kettősponttal) elválasztott lista a # nap üzenetei fájlokat tartalmazza, amelyek a bejelentkezést követően # jelennek meg a képernyőn. # MOTD_FILE /etc/motd #MOTD_FILE /etc/motd:/usr/lib/news/news-motd #
142.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
# Ha definiálva van, akkor ennek a fájlnak a tartalma jelenik meg # a login prompt előtt. # #ISSUE_FILE /etc/issue # # Ha definiálva van, akkor ez az a fájl, amely tartalmazza a TERM változó # paramétereit. A fájlnak minden sora a következő formában van: # "vt100 tty01" ("terminál_típusa terminál_száma") # #TTYTYPE_FILE /etc/ttytype # # Ha definiálva van, akkor a bejelentkezési hibák loggolva lesznek # ebbe a fájlba utmp formátumban. last, amikor segítségül hívjuk, mint # lastb, akkor olvasni fogja a /var/log/btmp-t. # FTMP_FILE /var/log/btmp # # Ha definiálva van, akkor ez az a fájl, amely, ha létezik, akkor # megakadályozza a normál felhasználók bejelentkezését. Ez a fájl # tartalmaz egy üzenetet, amely tartalmazza, hogy miért tilos a # bejelentkezés. # NOLOGINS_FILE /etc/nologin # # Ha definiálva van, akkor a parancs neve látható lesz, amikor futtatják # a "su -" parancsot. Például, ha ez van definiálva, mint "su", akkor # egy "ps" parancs mutatni fogja a képernyőn, mint "-su". Ha nincs # definiálva, akkor egy "ps" parancs az aktuálisan futó shellt fogja # mutatni, "-sh" -szerűen. # SU_NAME su # # *SZÜKSÉGES* # A könyvtár, ahol a felhasználó levelesládája található, vagy a fájl # neve, a home könyvtárból kiindulva. Ha mindkettőt definiálod, akkor # a MAIL_DIR bír elsőbbséggel. A QMAIL_DIR-re a Qmail-nek van szüksége. # #QMAIL_DIR Maildir MAIL_DIR /var/spool/mail #MAIL_FILE .mail # # Ha definiálva van, akkor a fájl meggátol minden "fecsegést" a szokásos # bejelentkezési eljárás alatt. Amikor teljes elérési úttal van megadva a # fájl, akkor a "fecsegést" letiltó mód engedélyezve lesz, amennyiben a # felhasználó neve vagy shellje megtalálható a fájlban. Amikor nem teljes # elérési úttal van megadva a fájl, akkor a "fecsegést" letiltó mód # engedélyezve lesz, amennyiben a fájl megtalálható a felhasználó home # könyvtárában. # # HUSHLOGIN_FILE .hushlogin #HUSHLOGIN_FILE /etc/hushlogins # # Ha definiálva van, akkor ennek az értéknek a jelenléte a /etc/passwd # fájl "shell" mezőjében kikapcsolja az adott felhasználót, noha a "su" # engedélyezett marad. # NOLOGIN_STR NOLOGIN #
143.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
# Ha definiálva van, akkor az egyik egy TZ környezeti változó próbaképp, # vagy a teljes elérési úttal megadott fájl tartalmaz egy hasonlót. # #ENV_TZ TZ=CST6CDT #ENV_TZ /etc/tzname # # Ha definiálva van, akkor ez egy HZ környezeti változó próbaképp. # # Linux/x86 ENV_HZ HZ=100 # Linux/Alpha... #ENV_HZ HZ=1024 # # *SZÜKSÉGES* # A PATH környezeti változó alapértelmezés szerinti beállítása a root # és a normál elhasználók számára. # Ez csak egy minimális beállítás, ehhez hozzáadni a shell indító fájljaiban # kell. # ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin ENV_PATH PATH=/bin:/usr/bin # A terminálok hozzáférési jogai # # A bejelentkezési tty a csoport tulajdonába lesz adva. # A bejelentkezési tty-nek megváltoznak a jogai, erre az értékre. # # Ha használsz egy olyan "író" programot, amely "setgid", akkor csinálj # egy speciális csoportot, amely kap egy terminált, definiáld a TTYGROUPban # a csoport számát, és a TTYPERM legyen 0620. Máskülönben kommentezd ki # a TTYGROUP-ot és a TTYPERM-hez rendeld hozzá a 622 vagy a 600 értéket. # TTYGROUP tty TTYPERM 0600 # # A login konfigurációjának inicializálása # # ERASECHAR #Terminálon az ERASE karakter. # KILLCHAR #Terminálon a KILL karakter. # UMASK #Az alapértelmezett "umask" értéke. # ULIMIT #Az alapértelmezett "ulimit" értéke. # # Az ERASECHAR és a KILLCHAR csak System V gépeken használatos. # Az ULIMIT csak akkor használt, ha a rendszer támogatja. # A "0" előtét nyolcas számrendszert, a "0x" tizenhatos számrendszert jelöl. # ERASECHAR 0177 KILLCHAR 025 UMASK 022 #ULIMIT 2097152 #
144.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
# Jelszóváltoztatás ellenőrzése: # # PASS_MAX_DAYS #Maximum ennyi napig használhatja a felhasználó a jelszavát. # PASS_MIN_DAYS #Minimum ennyi napnak el kell telnie a jelszavak megváltoztatása között. # PASS_MIN_LEN # A jelszó minimális hossza. # PASS_WARN_AGE # Ennyi nappal a jelszó lejárta előtt figyelmeztet a rendszer. # PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 # # Ha "yes"-re van állítva, akkor a felhasználónak rajta kell lennie a listán # amely a /etc/group-ban a 0-s gid számot viseli (a legtöbb rendszeren # "root"-nak hívják) a "su" paranccsal 0 uid-ű felhasználóvá válhat. Ha a # csoport üres, vagy nem létezik, akkor nem egynek van lehetősége a "su" # paranccsal 0 uid-ű felhasználóvá válni. # SU_WHEEL_ONLY no # # Ha fordítottál cracklib támogatást, hol található a szótárja. # #CRACKLIB_DICTPATH /usr/lib/passwd/pw_dict # # A minimális és maximális UID érték, amelyek közül az useradd # automatikusan válogat. # UID_MIN 1000 UID_MAX 60000 # # A minimális és maximális GID érték, amelyek közül az groupadd # automatikusan válogat. # GID_MIN 100 GID_MAX 60000 # # A bejelentkezések maximális száma, ha rossz volt a jelszó. # LOGIN_RETRIES 5 # # Maximum ennyi másodpercig vár a login program a jelszóra. # LOGIN_TIMEOUT 60 # # Maximum ennyiszer utasítja vissza jelszóváltoztatásnál a túl könnyű # jelszavakat. # PASS_CHANGE_TRIES 5 # # Figyelmeztet a gyenge jelszavakra (de mégis engedélyezi azt), ha # te vagy a root. # PASS_ALWAYS_WARN yes #
145.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
# A jelszóban figyelembe vett karakterek számát határozza meg. Az # alapértelmezés 8, mert az alap crypt() függvény nem tud többet. # Ha az MD5_CRYPT_ENAB-et beállítjuk, akkor kapcsoljuk ezt ki. # #PASS_MAX_LEN 8 # # Szükséges, hogy a chfn/chsh parancsokkal meg tudják változtatni a # felhasználók a rájuk vonatkozó beállításokat. # CHFN_AUTH yes # # Melyek azok a mezők, amelyeket egy normál felhasználó megváltoztathat # a chfn program használatával - használd a következő betűk tetszőleges # kombinációját "frwh" (f - teljes név; r - szobaszám; w - munkahelyi # telefonszám; h - otthoni telefonszám). Ha nincs definiálva, akkor # semmilyen változtatás nincs megengedve. A visszafelé kompatibilitás # miatt, "yes" = "rwh" és "no" = "frwh". # CHFN_RESTRICT rwh # # A jelszó prompt beállítása. # # Ha nem működik rendesen, akkor kommentezzük ki, és használjuk az # alapértelmezettet, amikor csak annyit ír ki, hogy "Password: ". # #LOGIN_STRING "%s's Password: " # # Csak akkor működik, ha lefordítottuk az MD5_CRYPT definíciót. Ha # "yes"-re van állítva, akkor az új jelszavak az MD5 alapú algoritmussal # lesznek titkosítva, amely kompatibilis a FreeBSD által használtal. # Ez támogatja a korlátlan hosszúságú jelszavakat és a hosszú "só" # sztringet. Állítsd "no"-ra, ha szükséged van a titkosított jelszavak # másolására más rendszerekkel, amelyek nem értik az új algoritmust. # Az alapértelmezés a "no". # #MD5_CRYPT_ENAB no # # Csoportok listája, amelyek ideiglenesen hozzáadódnak a felhasználó # csoportjaihoz, amikor a konzolról jelentkezik be. Alapértelmezésben # ki van kapcsolva. # Csak akkor kapják meg a felhasználók ezeknek a csoportoknak a jogait, # amikor a konzolról jelentkeznek be. # #CONSOLE_GROUPS floppy:audio:cdrom # # Engedélyezzük a belépést, ha nem tudunk belépni a home könyvtárunkba? # Az alapértelmezés a nem. # DEFAULT_HOME yes # # Ha ez a fájl létezik és olvasható, akkor a login környezete innen lesz # kiolvasva. Minden sor formája a következő: név=érték. # ENVIRON_FILE /etc/environment # # Ha definiálva van, akkor ez a parancs fut le, amikor eltávolítunk egy # felhasználót. Ez el tudja távolítani az at/cron/print munkákat, amelyek # az eltávolított felhasználó tulajdonában vannak. # #USERDEL_CMD /usr/sbin/userdel_local
146.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Az /etc/limits állománnyal korlátozhatjuk a felhasználók rendszer eőforrásaihoz való hozzáférését. Formája a következő: # A rendszer erőforrásainak korlátozása a felhasználók számára. # Formátuma: felhasználói név korlátozás # # Alapértelmezett jelzés a '*' a felhasználói név helyén # # Használható jelzők: # A: Maximális címterület kilobájtban # C: A core fájl maximális mérete kilobájtban # D: Maximális adatméret kilobájtban # F: Maximális fájlméret kilobájtban # M: A maximálisan zárolható memóriacím-terület kilobájtban # N: A megnyitható fájlok maximális száma # R: Maximális rezidens méret kilobájtban # S: A verem maximális mérete kilobájtban # T: Maximális processzoridő percben # U: A processzek maximális száma # L: A felhasználó egyszerre maximum ennyiszer jelentkezhet be # # Az alapértelmezett beállítások * L2 D6144 R2048 S2048 U32 N32 F16384 T5 C0 # # Egy másik módszer a felhasználó időszakos kikapcsolására guest L0 # # Ennek a felhasználónak nincs korlátozás #sysadm -
Felhasználói környezet beállítása Bejelentkezés Ahhoz, hogy megértsük milyen lehetőségei vannak a felhasználónak munkakörnyezetének egyedivé alakításában, először azt kell megnéznünk, hogy mi is zajlik le, amikor egy felhasználó bejelentkezik a rendszerbe. Karakteres terminálon a getty program várja a felhasználók bejelentkezését. Ez kiírja a login: feliratot, és még más üzenetet is kiírhat. Amikor a getty megkapja, hogy a felhasználó bejelentkezik a rendszerbe, akkor segítségül hívja a login programot. Ez a program megváltoztatja a felhasználó környezetét, és meghívja a beállított shellt. A login program PATH-ja a /usr/include/paths.h fájlban van definiálva. Ez az általános felhasználóknak: /usr/local/bin:/usr/bin:/bin:.
a root-nak: /sbin:/bin:/usr/sbin:/usr/bin
Az általános felhasználók PATH-ja tartalmazza a pont-ot (.), ami az aktuális könyvtárat jelenti. De ez nagyon veszélyes lenne a root-ra nézve, ezért az övében nincs is benne.
147.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
A bejelentkezéskori PATH gyakran felülíródik a shell elindulásakor. A /etc/passwd fájlban meghatározhatunk más programot is, nem csak shellt, ami a felhasználó bejelentkezésekor elindul, például: etu-ppp:/4WS5p3cVqwzs:1000:1000:,,,:/home/zsiga:/usr/sbin/pppd
A bash login shell amikor elindul, a következő sorrendben olvassa és hajtja végre a parancsokat: - /etc/profile: Ha létezik, akkor először ezt olvassa el, és végrehajtja a benne lévő parancsokat. - ~/.bash_profile: Ezt keresi másodikként, ha nem találja, akkor - ~/.bash_login: ezt keresi harmadikként, ha nem találja, akkor - ~/.profile : ezt keresi utoljára. Tehát ezek közül a fájlok közül azokban állíthatod be a saját környezetedet, amelyek a home könyvtáradban vannak. Bash shell esetén tehát a .bash_profile fájlban célszerű elhelyezni a PATH megváltoztatására szolgáló utasítást, és beállítani a kívánt környezeti változókat. A környezeti változókról ebben a fejezetben olvashatsz részletesen. Amikor kilépsz a login shellből, akkor a bash elolvassa és végrehajtja a ~/.bash_logout fájlt, ha létezik. Ebbe a fájlba szoktak olyan parancsot tenni, ami például letörli a képernyőt a kilépéskor: clear. Környezeti változók A bash shell a következő változókat állítja be (saját használatára): - PWD: Az aktuális könyvtár nevét tartalmazza, megváltoztatására a cd parancs szolgál. - OLDPWD: Az előző aktuális könyvtár nevét tartalmazza. - UID: Az aktuális felhasználó ID-jét tartalmazza, a shell elindításakor inicializálódik. - EUID: Az aktuális felhasználó effektív ID-jét tartalmazza, a shell elindításakor inicializálódik. - GROUPS: Azoknak a csoportoknak a listáját tartalmazza, amelyekbe az aktuális felhasználó beletartozik. - BASH_VERSION: A használt bash shell verziószámát tartalmazza. - RANDOM: Egy véletlenszámot tartalmaz 0 és 32767 között. - HOSTNAME: Az aktuális gép nevét tartalmazza. - HOSTTYPE: Rendszerfüggő a tartalma. - OSTYPE: Rendszerfüggő a tartalma. - SHELLOPTS: Kettősponttal elválasztott listát tartalmaz a shell jelenlegi beállításairól. A következő változókat használja a bash shell (ezeket megváltoztathatod saját magad is): - IFS: A mezőelválasztó, amiből a shell meg tudja állapítani, hogy mit akarsz két szóba írni. Az alapértelmezés: - space (szóköz) - tar (tabulator billentyű) - newline (enter billentyű) 148.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 5. fejezet
PATH: Az itt megadott útvonalon keresi a végrehajtható parancsokat a shell. Kettősponttal elválasztott, teljes elérési úttal megadott könyvtárneveket tartalmaz. HOME: Az aktuális felhasználó home könyvtára. MAIL: Ha itt egy fájl neve szerepel és a MAILPATH változó nincs beállítva, akkor a bash informálja, ha új leveled érkezett a megadott fájlba. MAILCHECK: Másodpercekben megadva az az érték, hogy mennyi időnként ellenőrizze a bash shell a leveleinket. Az alapértelmezés 60 másodperc. Ha ez a változó nincs beállítva, akkor a shell kikapcsolja a levelek ellenőrzését. PS1: Az értékként megadott paramétereket fogja használni, mint elsődleges promptot. Az alapértelmezés: ``\s-\v\$ ''. PS2: Az értékként megadott paramétereket fogja használni, mint másodlagos promptot. Az alapértelmezés: ``> ''. PS3: Az értékként megadott paramétereket fogja használni, mint prompt. PS4 : Az értékként megadott paramétereket fogja használni, mint a PS1. Az alapértelmezés: ``+ ''. HISTSIZE: A parancsoknak a száma, amennyire ,,emlékezzen'' a shell. Az alapértelmezés 500. HISTFILE: Annak a fájlnak a neve, ahová a korábban kiadott parancsokat elmenti a shell. Az alapértelmezés ~/.bash_history. Ha nincs beállítva, akkor nem menti el a parancsokat a shell. : HISTFILESIZE: Maximum ennyi sorból állhat a history fájl. Az alapértelmezés 500. OPTERR: Ha az értéke 1, akkor a bash a képernyőre írja a hibaüzeneteket, amiket belső parancsok generálnak. LANG: A használt nyelv. LC_ALL: Ez a változó felülbírálja a LANG változó értékét. IGNOREEOF: Ha beállítjuk, akkor csak az exit vagy logout paranccsal enged kilépni a login shell, a Ctrl-d-vel nem. Ha nagyon erősködünk, akkor ki tudunk lépni a Ctrl-d-vel is, de a beállított értéknél eggyel többször kell lenyomnunk. Az alapértelmezés szerinti értéke 10. FCEDIT: Az alapértelmezett szerkesztőt hívja meg, amikor az fc beépített parancsot hívjuk meg
A prompt beállításai -
\a: A csengetés ASCII karaktere (07). \d: A dátum formátuma ,,nap_neve hónap_neve nap_száma''. \e: Az escape ASCII karaktere (033). \h: A gép neve az első ,,.'' karakterig. \H: A gép neve. \n: Új sor jel. \s: A shell neve. \t: Az aktuális idő 24 órás formában HH:MM:SS formátumban. \T: Az aktuális idő 12 órás formában HH:MM:SS formátumban. \@:Az aktuális idő 12 órás formában am/pm formátumban. \u: Az aktuális felhasználó felhasználói neve. \v: A bash verziója. \V: A bash verziója a patchlevel-lel együtt. \w: Az aktuális könyvtár teljes elérési úttal (munkakönyvtár). \W: Az aktuális könyvtár neve (munkakönyvtár). 149.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 5. fejezet
\!: A kiadott parancs sorszáma a history fájlban. \#: A jelenlegi bejelentkezéskor kiadott parancs sorszáma. \$ : Ha az effektív UID 0, akkor # lesz a jel, bármilyen más UID esetén $. \nnn: Az ,,nnn'' helyére beírt oktális szám a karakter kódja. \\: egy backslash karakter \[: Nem nyomtatható karakterek beírását ezzel a jellel kell kezdened. A nem nyomtatható karakterek segítségével használhatsz beépített kontrol szekvenciákat a promptban (például színek használata). \]: Nem nyomtatható karakterek beírását ezzel a jellel kell befejezned.
A fenti jeleket úgy tudod kipróbálni, ha a parancssorba beírod a következő parancsot: zsiga@~$ PS1='\u@\v$ '
Ennek a parancsnak a hatására megkapod a fenti promptot. Csak annyi a tennivalód, hogy a ' ' jelek közötti karaktereket kicseréled a fenti listából a neked tetszőekre. Ha állandósítani szeretnéd az ily módon kialakított promptot, akkor írd be a home könyvtáradban lévő .bash_profile fájlba, és a következő bejelentkezés alkalmával már az fog fogadni.
Hozzáférési jogosultságok A fájlokhoz tartozó hozzáférési jogosultságok meghatározzák, hogy melyik felhasználó melyik fájlon hajthat végre műveletet, és még a műveletet is meghatározza. A Linux a felhasználókat három csoportra osztja, amikor a fájlokhoz és könyvtárakhoz való viszonyukat vizsgálja: - a fájl tulajdonosa (user), - csoport (group), - egyéb (others). A ,,csoport'' segítségével csoportosíthatjuk a felhasználókat - lehetőleg - valamilyen logika szerint, hogy meg tudják osztani egymással a megfelelő fájljaikat vagy szabályozni tudjuk a hozzáféréseket. A fájlokkal és könyvtárakkal három dolgot tehetnek a felhasználók: - olvasás (read) - írás (write) - végrehajtás (execute) Mindhárom felhasználói csoportra külön-külön be lehet állítani ezeket az engedélyeket. Fájloknál elég egyértelmű, hogy mit takar ez a három dolog: olvasás, írás és végrehajtás, de könyvtáraknál már nem az. Egy könyvtár olvasása azt jelenti, hogy egy erre a célra szolgáló paranccsal ki tudjuk listázni a könyvtár tartalmát. Egy könyvtárat akkor nevezünk írhatónak, ha a megfelelő parancsokkal bejegyzéseket tudunk létrehozni, módosítani vagy törölni az adott könyvtárban, illetve törölhetjük magát a könyvtárat. Talán a végrehajtás a legnehezebben megérthető, mert hasonlít egy kicsit az olvasás engedélyhez.
150.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
De abban az esetben, ha egy könyvtárra csak olvasási jogunk van, akkor nem tudjuk megnézni a fájloknak a bejegyzéseit; míg ha végrehajtási jogunk van csak, akkor ha ismerjük a fájl teljes nevét - az ls parancs megmutatja a fájlt (de csak azt az egy fájlt, mert a könyvtárban esetleg lévő többi fájlt már nem fogjuk látni), és el is tudjuk indítani (amennyiben az egy végrehajtható script vagy program, és van engedélyünk a fájlra). A legelső karakter a ,,-'' jel helyén a következő jelölések állhatnak: - -: közönséges fájl - b: blokkos eszköz (például: adattároló eszközök) - c: karakteres eszköz (például: nyomtató, terminál, stb.) - d: könyvtár - l: szimbolikus link - p: pipe (csatorna) - s: socket A következő kilenc karakter azt mutatja, hogy ki mit tehet a fájllal: - r: olvasási engedély (read) - w: írási engedély (write) - x: végrehajtási engedély (execute) - : az engedélyek hiánya - s: suid bit - t : sticky bit Suid és sgid bit A suid egy rövidítés, a ,,Set User Identification'' kifejezés rövidítése. Azt jelenti, hogy a ,,felhasználói azonosító megváltoztatása''. Ennek megértéséhez tudnunk kell azt, hogy időnként szükség van arra, hogy egy egyszerű felhasználó egy privilégizált felhasználó jogaival rendelkezzen. Talán a legegyszerűbb eset a jelszó megváltoztatása. Egy egyszerű felhasználó nem írhatja közvetlenül a rendszer jelszófájlját, hiszen akkor bármikor korlátlan jogokhoz juthatna, de a saját jelszavát meg kell tudnia változtatni. Ehhez viszont írnia kell a jelszófájlba. Ezt az ellentmondást oldják fel úgy, hogy a programot ruházzák fel privilégizált jogokkal, a suid bit beállításával. A passwd parancs engedélyei a következők: -rwsr-xr-x
1 root
root
28896 Jul 17
1998 /usr/bin/passwd
Látható, hogy a suid bit be van kapcsolva, így futásának idejére az őt futtató felhasználó rendszergazdai jogkört kap, tehát a root jogosultságaival olvassa és írja a /etc/passwd fájlt (mivel a root tulajdonában van a fájl). A Unix típusú rendszerekben a programok azokkal a felhasználói jogokkal futnak, amivel az őket elindító felhasználó rendelkezik. Ezt lehet megváltoztatni a suid és az sgid bitekkel. Egy suid bittel rendelkező program elindításakor a program a tulajdonosának jogaival fog futni, fájlokat olvasni, írni és más programokat futtatni.
151.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Az sgid bit is egy rövidítés a ,,Set Group Identification'' kifejezés rövidítése. Azt jelenti, hogy a ,,csoportazonosító megváltoztatása''. Beállítása esetén a program annak a csoportnak a jogaival fog futni, akinek a fájl a birtokában van. Az sgid bitet könyvtárak esetén is be lehet kapcsolni. Ennek az eredménye a következő: ha ebben a könyvtárban bárki létrehoz egy fájlt (ehhez az többi jognak rendben kell lennie), akkor a fájl csoporttulajdonosa nem az a csoport lesz, amelyikbe a felhasználó tartozik, hanem az, akinek a könyvtár a birtokában van. A sticky bit A sticky bit bekapcsolása fájlok esetén azt jelzi az operációs rendszernek, hogy a fájlt tartsa a memóriában a végrehajtás után is. Ennek a tulajdonságnak akkor van értelme, ha azt szeretnénk, hogy egy program minél gyorsabban induljon el, ne kelljen várni arra, hogy betöltődjön a memóriába. A sticky bitet be lehet kapcsolni könyvtárak esetén is. Az ilyen bittel ellátott könyvtárban bárki írhat fájlokat (a többi jognak is rendben kell lennie), de mindenki csak a sajátját törölheti. ,,Ezt a lehetőséget pontosan azért tervezték, hogy az olyan, mindenki által írható könyvtárakban, mint például a /tmp, a felhasználók ne tudják a másik felhasználó által írt fájlokat módosítani, letörölni.''[38] A fájlokhoz tartoznak egyéb információk is a jogosultságokon kívül: - a fájlra mutató linkek száma - a fájl tulajdonosának azonosítója - a fájl csoporttulajdonosának azonosítója - a fájl mérete - a fájl utolsó módosításának dátuma - a fájl utolsó hozzáférésének dátuma - a fájl létrehozásának vagy utolsó státuszmódosításának dátuma - a fájl típusa (könyvtár, sima fájl, stb.)
Nyomtatás konfigurálása Áttekintés: Interfészek, várósorok és göngyölítések (spooling) A párhuzamos portok Egy nyomtató általában a párhuzamos porton keresztül csatlakozik a géphez. A 2.2.x-es verzió óta a kernel tartalmazza a párhuzamos portot támogató alrendszert (parport). Az alrendszer működéséhez ismerni kell a párhuzamos port fajtáját, hogy a szükséges meghajtók tölt ődjenek be a. Jelenleg már több eszköz is csatlakoztatható ugyanahhoz a párhuzamos porthoz egyidőben. Ezenfelül a párhuzamos portok számozása /dev/lp0-al kezdődik (nem pedig /dev/lp1-gyel!). A párhuzamos porton történő nyomtatáshoz szükség van a parport, parport_pc és az lp modulok szabványos kernelbe való betöltésére. Ezeket rendszerint automatikusan betölti a kmod, azaz a "kernelmodul betöltő program" amikor a nyomtatási feladat bekerül a várakozási sorba
152.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Ha a párhuzamos portot kezelő meghajtók nem találhatók, feltehetően néhány kernelparaméter megadására van szükség. ‘Root’-ként a nyomtató és az interfész tesztelése (+Rendszeradminisztrátor) közvetlen adatküldéssel, ilyesféle paranccsal lehetséges : meggyfa: # echo hello > /dev/lp0
vagy meggyfa: # cat TEXTFILE > /dev/lp0
Noha ez a módszer működik, nem ajánlott e módszerrel nyomtatni. Helyette előnyösebb a várósorba (queue) küldeni a nyomtatási feladatot. A nyomtatási várósor megengedi a nyomtató több felhasználó közötti megosztását, és a nyomtatási feladatok szabályozottabb kezelését. Spooling mód és nyomtatási várósor A nyomtatók Linux alatt egy spooling rendszeren keresztül érhetők el, ami azt jelenti, hogy a nyomtatási feladatok időlegesen egy fájlba mentődnek, és abban a sorrendben hajtódnak végre, ahogyan a feladatellenőrző program fogadta azokat. Ezt a programot lpd démonnak hívjuk. Ez biztosítja azt, hogy több felhasználó tud egyidőben nyomtatási feladatot küldeni a nyomtatónak bármiféle ütközés kockázata nélkül. A nyomtatónak szánt feladat elküldése után a felhasználó folytathatja tovább a munkáját. A nyomtatási várósor a következőket tartalmazza: - egy bejegyzést a /etc/printcap-ban; ahol a várósor van meghatározva; - egy alkönyvtárat, tipikusan a /var/spool/lpd-t, ahol minden nyomtatási feladatnak van egy adat, és egy ellenőrzőfájlja. Minden várósort egy nyomtató szolgál ki. Viszont több nyomtatási várósor is lehet ugyanazon nyomtató számára. A Linux tartalmaz egy BSD spooling rendszert, melyet a Kaliforniai Berkeley Egyetemen fejlesztettek ki, és amelyet az ‘lprold’ csomag tartalmaz. Hagyományosan hálózaton keresztüli használatra van tervezve, és feltételezi, hogy a TCP/IP protokoll be van állítva és fut. A várósor akár helyinek, akár távolinak van beállítva, a beállításban csak kis különbség van. A nyomtatási feladat négy lépésben hajtódik végre: - Az adatfájl bemásolódik a várakozási alkönyvtárba és hozzárendelődik egy frissen létrehozott ellenőrző fájl. - Az adatfájlnak keresztül kell mennie egy szűrőprogramon, ami átalakítja az adott nyomtatónak megfelelő formára (pl. PostScriptre). Ez az átalakítás több különálló lépést tartalmazhat. - Az adatfájl keresztülmegy egy szűrőprogramon, ami átalakítja azt nyomtatóspecifikus formátumra (pl. PostScript), t.i. a szűrőprogram hozza létre az adatfolyamot nyomtatóspecifikus formátumban (pl. PostScript, PCL, Esc/P2 stb.). Ez az átalakítás néha több lépésben megy végbe és a Linuxban az apsfilter (az ‘aps’ csomagban) gondoskodik róla. 153.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 5. fejezet
A nyomtató típusához átalakított fájl ezután bekerül a várósorba és később kinyomtatódik.
Nyomtatási várósorok: futtatás és beállítás Vizsgáljuk meg milyen szintjei vannak a nyomtatási feladatnak mielőtt a nyomtatás megtörténne, valamint vizsgáljuk meg az ehhez szükséges programokat is. Az lpr program az "interfész" a felhasználó és a nyomtatási várósor között. Egy nyomtatási feladat rendszerint a következő parancs kiadásával kezdődik: jancsi@meggyfa: > lpr [-Pqueue] text-file
Ha kihagyjuk a -P opciót (a "nyomtató" várósorának neve), az alapértelmezés a PRINTER környezeti változóból kerül kiolvasásra. Ha ez nincs beállítva, alapértelmezésként az lp név kerül behelyettesítésre. Az lpq, lprm és az lpc parancsoknak is azonos az alkalmazásuk. Nem kell szóköznek lenni a -P opció és a nyomtató várósorának neve között. Az lpr ellenőrzi, hogy ez a várósor létezik-e, kiolvasva a /etc/printcap állományból. Ha létezik, akkor az ellenőrző fájl (cffájl), és az adatfájl másolata létrejön a spool alkönyvtárban. Ha nagyméretű a nyomtatandó anyag, hasznosabb csak egy csatolást létesíteni másolat helyett. Ez az lpr -s paranccsal tehető meg. Persze addig nem lehet a fájlba írni, amíg a nyomtatási feladat végre nem hajtódik. Az lpr megengedi, hogy meghatározott szűrőt (nyomtató meghajtót) állíthassunk be a feladathoz, de ez nagyon ritkán szükséges. További vezérlő eszközök: áttekintés Bármely ebben a részben leírt parancs elfogadja a P opciót, amivel a feladatot átadhatja egy megadott várósornak, ahogyan az lpr is teszi. További részletek az idevágó kézikönyvlapokon találhatók. ‘root’ hozzáféréssel kell rendelkezni ahhoz, hogy manipulálni tudjuk a nyomtatási várósort, pl. ha törölni akarjuk egy másik felhasználó nyomtatását. Az lpq megmutatja a várósorban lévő feladatokat: jancsi@meggyfa: > lpq -Pqueue queue is ready and printing Rank Owner Job Files Total Size active newbie 676 Hello.txt 259420 bytes 1st newbie 677 letter.dvi 11578 bytes 2nd newbie 683 picture.gif 37464 bytes
Az lprm a várósorban lévő feladatok törlését teszi lehetővé: jancsi@meggyfa: > lprm -Pqueue 676 dfA676Aa05005 dequeued cfA676Aa05005 dequeued
154.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Ha nem adunk meg feladatszámot, akkor az aktuális feladat törlődik feltéve, hogy az saját feladat. Az lpc végrehajtja a várósor vezérlő parancsait. Ezt a parancsot csak a "root" használhatja. Az lpc (/usr/sbin/lpc) vezérli a várósort. A várósor nevének megengedett az all. A legfontosabb opciók: status queue kijelzi a várósor állapotát. Ha a queue argumentum hiányzik, akkor a parancs úgy működik, mint az all, azaz minden várósor állapotát kijelzi. disable queue Leállítja újabb nyomtatási feladatok várósorba történő mozgatását. – enable queue Engedélyezi újabb nyomtatási feladatok várósorba történő mozgatását. stop queue Megállítja a várósorban lévő feladatok kinyomtatását (az éppen nyomtatott feladat még kinyomtatódik). start queue Ismét elindítja a várósorban lévő feladatokat. down queue Egyenértékű a disable és a stop opciók egyidejű használatával. up queue Egyenértékű az enable és a start opciók egyidejű használatával. abort queue Egyenértékű a down opcióval kivéve, hogy az aktuális feladatot azonnal megszakítja. A nyomtatás folytatható a várósor újraindítása (up) után. Ezek a parancsok parancssorból közvetlenül kiadhatók az lpc-nek (pl. lpc status). Paraméter nélkül is futtatható az lpc: ilyenkor interaktív módba kapcsol, amelyet az lpc> prompt jelez, további lpc-parancsra várva. Az interaktív módból a quit vagy az exit paranccsal lehet kilépni. A nyomtatási feladatok a várósorban maradnak, ha nyomtatás alatt leáll a gép, és utána a Linux újra elindul. Tönkrement nyomtatási feladat a várósorból a fentebb ismertetett parancsok segítségével távolítható el. lpd: nyomtatásvezérlő a háttérben. Az lpd-t (Line Printer Daemon) a /sbin/init/lpd indítja, és a háttérben fut, feltételezve hogy az idevonatkozó opció a /etc/rc.config-ban be van állítva: START_LPD=yes. Az lpd ellenőrzi, hogy a /etc/printcap-ban mely nyomtatási várósorok vannak meghatározva. Ezek feladata, hogy megszervezzék és végrehajtsák a göngyölített feladatokat: - Vezérli a helyi nyomtatási várósorokat: minden feladat adatait keresztül küldi a megfelelő szűrőn - amely egy bejegyzéssel van jelölve a /etc/printcap-ban és kifejezett (explicit) beállítása megtalálható a vezérlőfájlban utána következik a nyomtató interfész; - Felügyel a feladatok sorrendjére; - Ellenőrzi a várósorok és nyomtatók állapotát (status) a helyi spool alkönyvtárakban; - Elküldi a feladatokat egy távoli gépen lévő lpd -nek; - Elfogad távoli gépekről érkező kéréseket a helyi várósorral kapcsolatban, vagy megtagadja ezeket, ha az azonosítás kudarcot vall.
155.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Azonosítás: Csak olyan munkaállomásoktól származó kérések hajtódnak végre, amelyek a /etc/hosts.lpd-ben fel vannak sorolva. Ezeket a neveket lehetséges a /etc/hosts.equiv-ban is elhelyezni, de ennek messzemenő következményei vannak az elérhetőségi és biztonsági kapcsolatokra vonatkozóan, ezért ezt inkább kerüljük el. Szűrők: a munkamániások A szűrőprogramok feladata, hogy a feladatokat átalakítsák a nyomtató saját formátumára. Majdnem mindenre képesnek kell lenniük. Többé kevésbé hasonlítanak más rendszerek nyomtatómeghajtóira, mint például az OS/2 és Windows rendszereké. De különbözően azoktól, képesek arra is, hogy számon tartsák a feladatokat (számukat, a használt erőforrásokat, stb.). A /etc/printcap, a várósor beállítása A /etc/printcap-ban minden egyes várósor meg van határozva egy-egy önálló bejegyzéssel, amiket üres sor választ el egymástól. A bejegyzés a várósor egy vagy több megnevezésével kezdődik (|-al (pipe, cső) elválasztva), ezt követi a meghatározások felsorolása , formátumuk: rövidítés=<érték> (‘:’-al elválasztva).
Az "üres" sorok, és a ‘#’-al kezdődőek megjegyzésnek számítanak. Több példabejegyzés (megjegyzésbe tett) is található a /etc/printcap fájlban. Egy egyszerű bejegyzés például így néz ki: ascii|deskjet:lp=/dev/lp1:sd=/var/spool/ascii:sh:mx#10240
Ez a várósor ascii vagy deskjet nevű nyomtatóként érhető el. A várósor alkönyvtára a /var/spool/ascii. A nyomtató eszköz a /dev/lp0. Nem jelenít meg fejléc oldalt a nyomtatás kezdetén (sh = supress header) és 10.240 bájt méretig fogad el nyomtatási feladatokat. Távoli nyomtató várósorára a következő fájllistában található. lp1|HP-4P:\ :rm=atlantisz.liget:\ :rp=HP:\ :sd=/var/spool/lpd/lp1:\ :mx#0:sh
A várósor nevei lp1 és HP-4P. Az eszközre vonatkozó információ helyett az atlantisz.liget nevű gép HP nevű várósorára történik hivatkozás. A szűrők részletezése felesleges – ezekért az atlantisz.liget várósora a felelős. Ezért csak a spooling alkönyvtár (var/spool/lpd/lp1), és a feladatok méretének behatárolása (mx#0 jelentése: korlátlan) történt meg. Ha az apsfilter-t használjuk, egy új nyomtató várósor (queues) szükséges az automatikus /etc/printcap-ba való beadáshoz.
156.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Nyomtató sz űrők A szűrő feladata, hogy egy nyomtatási feladat adatfájlját megfelelő formátumra alakítsa. Csak a papírméret, a felhasználó neve, a (helyi) munkaállomás neve és a fájl neve adódik át az lpd-nek. A UNIX szűrő az adatfájlt az STDIN-en (szabványos bemeneten) kapja, és a nyomtatásra kész kimenetet az STDOUT-ra (szabványos kimenetre) küldi. Nyilvánvalóan a szűrőnek ismernie kell a fájl formátumát (ASCII, DVI, PostScript, stb.) hogy képes legyen azt átalakítani. Két út lehetséges ennek megvalósítására: - A szűrő eléggé "intelligens", hogy felismerje a fájl formátumát és tartalmaz egy "előszűrőt" ami ezt megteszi, és sok egyéb programot, amelyek megvalósítják az átalakítást. Nagyjából így működik a Linux-szal alapértelmezésben telepített apsfilter. - Különböző szűrők vannak a különböző fájlformátumok számára. Ezek a szűrők különböző várósorokhoz vannak rendelve, bejegyezve azokat a /etc/printcap-be. A felhasználónak ez esetben egy kiegészítő opciót kell alkalmaznia, amikor az lpr-t használja. Nyolc opció érhető el: - printcap bejegyzés if= cf= df= gf= nf= rf= tf= vf= - lpr opció -c -d -g -n -f -t -v Hagyományosan ezek az opciók 3 meghatározott fájl formátumokat jelölnek ki. Csak az lpr opcióját kell beállítani 4 . Az if= szabványos szűrőre vonatkozik, viszont a df= DVI fájlra (ami a T E X-ből és a L A T E X-ből származik). A következőket begépelve a saját DVI szűrő HP LaserJet 4-hez állítható be, ha a ‘te_dvilj’ csomag telepítve van. (Manapság ajánlatos a megfelelő Ghostscript-"meghajtót" alkalmazni az ljet4 helyett). df="/usr/bin/dvilj4 -e- -"
apsfilter Az ‘aps’ csomag tartalmaz egy nagyon hasznos szűrőt, az apsfilter-t. Az apsfilter különösen hasznos a következő körülmények esetén: - Ha a nyomtatható fájlok általánosan UNIX vagy PostScript formátumúak. - Ha sok különálló eszköz áll rendelkezésre, ami más formátumra képes átalakítani, ilyen például a T E X-et és képeket PostScript-be átalakító program (pl. dvips a DVI és az a2ps az ASCII fájlok részére). - Ezután még ott van a Ghostscript, ami képes PostScript fájlok tetszőleges nyomtatóspecifikus formátumba való átalakítására, nem-PostScript nyomtatók számára (voltaképp egy nyomtató meghajtóprogram gyűjteményről beszélhetünk). Az apsfilter egyesíti mindezen különálló eszközöket, tartalmazva a fájlformátumok felismerését és a kitömörítő eszközöket is. A formátumfelismerés (file) eredményét keresztülküldi a megadott eszközön, majd végül a nyomtatón. A /var/lib/apsfilter/apsfilter könyvtárban lévő központi shell-szkript a következő fájlformátumokat és kitömörítési típusokat ismeri: - ASCII, DVI, PS, Data (PCL, etc.), GIF, TIFF, PBM, Sun Raster, X11 Bitmap - Tömörítési típusok: compress, gzip, freeze
157.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Az apsfilter nyomtatási várósorai Az apsfilter program a helyi nyomtató számára a következő várósorokról gondoskodik: - lp – szabványos nyomtatási várósor minden fájlformátumnak. - lp-mono – csak színes nyomtatók esetén használatos és fekete-fehérben nyomtat, amúgy az lp-hez hasonlóan kezeli a formátumokat. - ascii – ASCII szövegfájlként nyomtatja a fájlokat, kivéve ha a spooling-rendszer más formátumot vár el. - raw – kinyomtatja azokat a fájlokat, amelyek már nyomtatóspecifikus formátumban vannak: nincs átalakításra szükség. Lehetőség van további helyi nyomtatók beállítására is; közöttük különbséget tenni a várósor nevével lehet, amely tartalmazza a megfelelő Ghostscript-nyomtatómeghajtó nevét, pl. djet500, djet500-ascii, djet500-raw, stb. ASCII fájlok: az alapértelmezett beállítások a szűrésre vonatkozóan a /etc/apsfilterrcben helyezkednek el: - ASCII fájlok átalakítása a2ps-el PostScriptre; - a2ps formátum: 2 darab ASCII-oldal egymás után téglalap formában egy nyomtatott oldalon. A formátum megváltoztatható a FEATURE változó beállításában, amely a /etc/apsfilterrc-ben található. A beállítható értékek a megjegyzésekben megtalálhatók. Ha el akarjuk kerülni a PostScriptbe való átalakítást és a nyomtatót ASCII módban kívánjuk használni, csak a hash "#" jelet kell eltávolítani a USE_RECODE_NOT_A2PS=yes elejéről, és meg kell bizonyosodni, hogy az ‘ap’ készlet ‘recode’ csomagja telepítve van-e. Az ‘aps’ csomag tartalmaz egy beállítóprogramot, a /var/lib/apsfilter/SETUP-ot. A következő szolgáltatásokat ajánlja: - Minden apsfilter nyomtatóbeállítás felsorolása. - Támogatja az apsfilter nyomtatóbeállítások beszúrását, törlését. Ezenkívül a SETUP képes létrehozni és törölni távoli gépekre mutató nyomtatási várósorokat, és még intelligens módon előszűrőt is készít hálózati nyomtatók számára.
158.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
### BEGIN apsfilter: ### bjc800 a4 mono 360 ### # Warning: Configured for apsfilter, do not edit the labels! # apsfilter setup Thu Sep 18 11:40:40 MEST 1997 # ascii|lp1|bjc800-a4-ascii-mono-360|bjc800 a4 ascii mono 360:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/bjc800-a4-ascii-mono-360:\ :lf=/var/spool/lpd/bjc800-a4-ascii-mono-360/log:\ :af=/var/spool/lpd/bjc800-a4-ascii-mono-360/acct:\ :if=/var/lib/apsfilter/bin/bjc800-a4-ascii-mono-360:\ :la@:mx#0:\ :sh:sf: # lp|lp2|bjc800-a4-auto-mono-360|bjc800 a4 auto mono 360:\ # [ ... abbreviated ... ] # raw|lp3|bjc800-a4-raw|bjc800 a4 raw:\ # [ ... abbreviated ... ] # # ### END apsfilter: ### bjc800 a4 mono 360 ###
A SETUP-pal könnyű megbarátkozni, mivel menüvezérelt és könnyű használni. 1. A SETUP indítása: meggyfa: # /var/lib/apsfilter/SETUP
Ha X terminálban (xterm) gond van a menük láthatóságával (a kulcsszó sárga, világosszürke háttérrel), a SETUP parancsszinten is indítható. – Egy üdvözlőképernyő jelenik meg, leírva a fentebb vázolt folyamatokat, melyekkel új apsfilter nyomtatók hozhatók létre. Az - leütése után elérhető a f őmenü: - EXIT Kilépés az apsfilter setup-ból - LISTING Kilistázza az apsfilter bejegyzéseket - ENTRY Hozzáad/Felülír/Töröl egy apsfilter bejegyzést - DELETE Egy apsfilter bejegyzés gyorstörlése Az ‘OK’ és ‘CANCEL’ gombok között a Tab-bal választhatunk. A menüpontok között a lefelé és felfelé mutató nyilakkal navigálhatunk. - ‘EXIT’ – kilépés a SETUP-ból. - ‘LISTING’ – az összes létező várósor kilistázása. - ‘ENTRY’ – új nyomtató hozzáadásához az ‘ENTRY’ menüpont használható. Ez egy másik menübe irányít, ahol a nyomtató meghatároztató. - ‘DELETE’ – Egy létező apsfilter nyomtató törlése a ‘DELETE’ menüben történik, ahol az aktuális apsfilter-nyomtatók közül lehet választani. 2. Ezután az ‘ENTRY’ következik. Elsőként a ‘DEVICE’ (interfész) megadása szükséges. Párhuzamos porton lévő helyi nyomtató esetén ez a /dev/lp0 2.2.xx. számú kernelek esetén.
159.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
3. Most a következők láthatók: - RETURN Vissza az előző menübe - DEVICE A nyomtató interfész kiválasztása - PRINTER A nyomtatómeghajtó kiválasztása - PAPER A papír fajtája - COLOR Egyszínű/színes - SPECIAL A nyomtató beállításai - RESET A nyomtatómeghatározások alapállapotba hozása - ADD Nyomtatómeghatározások hozzáadása - OVERWRITE Nyomtatómeghatározás felülírása - DELETE Nyomtatómeghatározás törlése - ‘DEVICE’ – Már kiválasztottuk. - ‘PRINTER’ – Vessünk egy pillantást a ‘PRINTER’-re. Itt a megfelelő Ghostscript eszköz meghatározása ("meghajtója") van kiválasztva. Ez két lépésben történik: - Először válasszuk ki a nyomtató típusát a következők közül: - 'PostScript’ - ‘HEWLETT-PACKARD’ (HP Deskjet-ek) - ‘OTHER’ (más, nem-PostScript kompatibilis nyomtatók) - ‘FREEDEF’ (szabad meghatározás) - Eredeti PostScript-nyomtatók számára csak a felbontást kell meghatározni a dialógus-ablakban. Más nyomtatók számára, a lehetséges GhostScriptmeghajtók listája a ‘COMMIT’ menüpontban található. A GhostScript-meghajtó kiválasztása után ki kell választani a felbontást a megjelenő dialógusablakban. A ‘RETURN’-t választva visszajuthatunk az előző menübe. - ‘PAPER’ – A papír formátuma. - ‘COLOR’ – Színes vagy fekete-fehér. - ‘SPECIAL’ – Általában ezek a részletek nem szükségesek. 4. Ezek után vissza kell térni a ‘Choose your printer definition’ menübe. Hiba elkövetése esetén vissza lehet térni a szükséges almenübe és elvégezni a javításokat. 5. Fontos: Az ‘ADD’ megnyomása véglegesen telepíti az új nyomtatót. Vessünk egy pillantást a /etc/printcap fájlra, hogy vajon szerepelnek-e benne az új nyomtatási várósorok. Minden apsfilter nyomtatónak több neve van: egy részletes, meghatározva az adott nyomtatót leíró fájlt, és egy rövid a kényelem miatt. Ezenkívül az lp, lp-mono, ascii, és a raw az első helyi nyomtató további nyomtatási várósorai. Egy hálózati nyomtató saját TCP/IP interfésszel, a BSD-Spooling-System szempontjából távoli gépnek számít, saját nyomtatási várósorokkal (ezek nevei a nyomtató kézikönyvében találhatók, gyakran LPT1 a név). Ezért külön felhajtás nélkül címezhető távoli nyomtatási várósorként, pl. a helyi gép által remote névvel. Ha mindazonátal szükség van a nyomtatási munka szűrésére, a dolgok bonyolódnak, mivel a nyomtatódémon, az lpd (‘lprold’ csomag) nem hajt végre semmilyen előszűrést távoli nyomtatási várósorok számára, és figyelmen kívül hagyja a /etc/printcap-ben található szűrésre vonatkozó bejegyzéseket.
160.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Ezért a távoli nyomtatási várósornak már nyomtatóspecifikus adattal rendelkező feladatot kell tartalmaznia; ez előszűréssel érhető el, amelyet kerülő úton használhatunk. Az apsfilter rendelkezik ezzel a képességgel. A SETUP elindítása után, kéri a ‘DEVICE’ megadását: - PARALLEL Párhuzamos nyomtató interfész - SERIAL Soros nyomtató interfész - PREFILTER Egy másik várósornak (megkerülés) - REMOTE Nyomtató továbbító várósor 1. Először létre kell hozni a távoli hálózati nyomtatóra vonatkozó nyomtatási várósort a ‘REMOTE’ pontban: ezután meghatározandó, mely távoli géphez van csatlakoztatva a nyomtató (példánkban az atlantisz-hoz), és ott mely eszköz a távoli nyomtató (szabály szerint lp – hiba esetén forduljunk a hálózati rendszeradminisztrátorhoz). A távoli nyomtatási várósor meghatározása még nem teljes; ne felejtsük el ténylegesen telepíteni a nyomtatási várósort az ‘ADD’ pontban. A /etc/printcap állományban lévő bejegyzés így néz ki: remote|lp1|atlantisz -lp|atlantisz lp:\ :lp=:\ :rm=atlantisz:\ :rp=lp:\ :sd=/var/spool/lpd/atlantisz -lp:\ :lf=/var/spool/lpd/atlantisz -lp/log:\ :af=/var/spool/lpd/atlantisz -lp/acct:\ :ar:bk:mx#0:\ :sh:
2. A sor "helyi előszűrés"-re kerül. Emiatt a ‘DEVICE’ meghatározásánál a ‘PREFILTER’ lehetőséget kell választani. A SETUP ezekután már eléggé intelligens ahhoz, hogy az előzőleg telepített hálózati nyomtatót javasolja: remote remote=atlantisz queue=lp
Ezek legtöbbjére tekintettel kell lenni, ha be akarunk állítani egy rendes helyi nyomtatót. Amikor végül kiválasztjuk az ‘ADD’-ot, találni fogunk egy új fájlt a /etc/apsfilterrc mellett, melynek a neve /etc/apsfilterrc., példánkban /etc/apsfilterrc.bjc800, az alábbi bejegyzéssel: REMOTE_PRINTER="remote"
Ez a bejegyzés hálózati nyomtatóra vonatkozik; ha több hálózati nyomtatónk van, a nyomtató nevét használjuk a hálózaton a "remote" helyett. Néhány szó a Ghostscript-ről Ha nincs a birtokunkban PostScript nyomtató, szűrőnek a Ghostscript a legjobb választás. A Ghostscript elfogadja a PostScript fájlokat, és átalakítás céljából sok nyomtatómeghajtót tartalmaz. A Ghostscript (gs) széles körű eszköz sok parancssori kapcsolóval. Ha a Gostscript-et parancssorból hívjuk meg, saját parancssoros változatát jeleníti meg, a GS-t. 161.
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
A GS dialógussorát a quit megadásával hagyhatjuk el. Sajnos nincs elég helyünk, hogy minden részletet kitárgyaljunk. Bárhogyis, azért bemutatunk egy nagyon hasznos, segítséget adó parancsot: jancsi@meggyfa: > gs -h | less
E parancs megjeleníti az összes lehetséges opciót és a verziószámot (ez utóbbi nagyon fontos!) és a támogatott eszközök jelenlegi listáját. Ha nehézségbe ütközünk, hasznunkra lehet segítségül hívni a Ghostscriptet egy nyomtatható PostScript állománnyal (.ps), és a megalkotott nyomtatóspecifikus adatot közvetlenül az eszközre küldeni. A megfelelő PostScript fájlok összesítése a /usr/share/ghostscript//examples vagy a /var/lib/apsfilter/test könyvtárakban található.
A Ghostscriptet segítségül hívó parancs, amely például a "necp6" nyomtatómeghajtót használja 360 X 360-as felbontásban, így nézhet ki: jancsi@meggyfa: > gs -q -dNOPAUSE -dSAFER -sOutputFile=testfile.lpr testfile.ps GS> quit jancsi@meggyfa: > su meggyfa: # cat testfile.lpr >/dev/lp0
162.
\-sDEVICE=necp6
\
-r360x360
Barhács OktatóKözpont
Linux rendszergazdai modul - 5. fejezet
Ha uniprint meghajtót használunk paraméter állománnyal, a megfelelő parancs (Stylus nyomtató esetén) ez lehet: jancsi@meggyfa: > gs @stc.upp -q -dNOPAUSE -dSAFER \ -r360x360 -sOutputFile=testfile.lpr \ testfile.ps quit.ps jancsi@meggyfa: > su meggyfa: # cat testfile.lpr > /dev/lp0
163.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Kernel és modulkonfiguráció A démonok A démonok speciális processzek, amelyek a háttérben futnak, párhuzamosan más programokkal. Az operációs rendszer nagy egységei önálló programként futnak így. Konfigurációjuk módosítása esetén anélkül újraindíthatóak, hogy magát az operációs rendszert is újra kellene indítani. Jellemző példák: - nyomtató démon - lpd - syslog démon - syslogd - cron démon - cron - at démon - atd - Internet szuper démon - inetd - NFS mount démon - rpc.nfsd A rendszer számára a legfontosabb a kerneldémon (kerneld), ami a kernel moduljait tölti be és távolítja el. Az alapelv az, hogy egy modult csak addíg töltünk be, amig használni akarjuk (a memória jobb kihasználása végett), amennyiben egy ideig használaton kívül van, a kerneldémon automatikusan eltávolítja a kernelből. Amikor egy eszköz, vagy parancs újra hivatkozik a modulra a kerneldémon megint betölti azt.
Kernelparaméterek Eszközmeghajtók a kernelben A PC hardverkomponenseknek széles választéka van. Azért, hogy képesek legyünk megfelelően használni a hardvert, szükségünk van egy "eszközmeghajtó"-ra amellyel az operációs rendszer (Linux esetében ez a "kernel"), képes elérni a hardvert. Általában két módszer van az eszközmeg-hajtók rendszerbe illesztésére: - Az eszközmeghajtó közvetlen kernelbe fordításával. Ilyenkor a kernelt monolitikus kernelnek nevezik. Néhány eszközmeghajtó csak ebben a formában hozzáférhető, igazolva a monolitikus kernelek szükségességét. - Eszközmeghajtók szükség szerinti betöltődésével. Ilyenkor a kernelt modularizált- ként azonosítjuk. Ennek a megoldásnak az az előnye, hogy csak azok az eszközmeghajtók tölt ődnek be, amelyekre ténylegesen szük-ség van, és így a kernel nem tartalmaz felesleges ballasztot maga körül. A SuSE betöltőlemez kernele modulokat használ a hardverelemek jelentős részének támogatásával. Néhány meghajtó még nem létezik modulként. Mindezek ellenére, a meghajtóprogramokat a kernelbe fordítva, vagy modul-ként betöltve mégis lehetséges az, hogy egy hardverelemet nem fog felismerni a kernel. Ebben az esetben pontosabban meg kell határozni az összetevők sajátosságait. A monolitikus kerneleknek ezeket a paramétereket a boot prompt-nál kell megadni, vagy egy boot loader segítségével 164.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
A moduláris eszközmeghaj-tók paramétereiket az insmod vagy a modprobe közvetítésével kapják meg, melyek egyidejűleg a modulokat is betöltik. Sajnálatos módon a LILO paraméterek formátuma különbözik azoktól, amelyeket az insmod-nak és a modprobe-nak kell megadni. Emiatt azokat két különböző csoportra osztjuk a következő oldalakon. Néhány modulnak egységes paraméterei vannak (pl. a CD-ROM meghajtók), ezért ugyanazokat a paramétereket kapják, akár modulként, akár a LILO promptnál használjuk őket. Mielőtt bemutatjuk a paraméterek listáját, itt van néhány javaslat hardverfelismerésre, paraméterátadásra és rendszerindításra a SuSE betöltőlemezzel: - A legtöbb meghajtóprogramhoz megfelelő az autoprobing, pl. különböző szabványos címek teszteléséhez, amiket a hardver rendszerint megtalál. Mialatt próbálkozik, a meghajtóprogram lehet hogy beállít egy olyan címet is, amelyet nem használhat. Ebben az esetben a számítógép lefagy. - Néhány modul sikeresen betöltődhet, még ha a hardverük nincs is telepítve. Ez főleg a 3Com hálózati kártyák meghajtóprogramjaira érvényes. - Először kíséreljünk meg egy autoprobing-ot. A nem használt meghajtóprogramok így távolíthatók el legkönnyebben. A nem automatikusan felismert hardvereknek a megfelelő paraméterekkel kell indulniuk. - Végül, van néhány hardverösszetevő, amelynek több mint egy meghajtóprogramja van (pl. NCR 53C810, Ultrastor). Amennyire tudjuk, nincs lényeges különbség két Ultrastor meghajtóprogram között. A BSD meg-hajtóprogram a NCR53C810-hoz támogat más NCR53C8xx termékeket is (pl. 53C875), viszont a régi NCR meghajtóprogram csak a régi CD-írókat ismerte fel. Használjuk az igényeinknek legjobban megfelelőt. Magyarázat és értelmezés A következőkben bemutatjuk a kernelparaméterek és a megfelelő eszközmeghajtók betűrendes listáját. A táblázatban szereplő paraméterek mindig ugyanolyan jelentéssel bírnak: - hexadecimális portcímek (pl. 0x300) - megszakítás, amit a meghajtó használ (pl. 7) - a meghajtó DMA csatornája (pl. 1) - , - hexadecimális memórialefoglalás megosztott memória használatához Leginkább azokkal a paraméterekkel foglalkozunk, amelyek az eredményes telepítéshez szükségesek. Azonban vannak más paraméterek is, speciális célokra és esetekre. Ne felejtsük el, hogy a nagybetűk lényegesek. Kernelparaméterek a boot promptnál Az ebben a részben felsorolt paramétereket csak be kell írni a kernelnek például, a SYSLINUX-nál (a boot floppy betöltője), a LILO-promptnál vagy a loadlin-nek. Minden paramétert be kell írni, közvetlenül egymás után, vesszőkkel elválasztva. Ne hagyjon üres helyet (szóközt) a paraméterek között!
165.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Például az aha1542 paramétereinek beviteléhez a boot promptnál be kell írnunk (ne felejtsük el, hogy mindig meg kell előznie a paramétereket a betöltő konfiguráció nevének ); a SuSE betöltőlemezen e konfiguráció neve linux !): linux aha1542=0x300
Bizonyos paraméterek segítségével a Linux kernel viselkedését szabályozhatjuk. Újraindítási mód(a Linux leállítása): reboot=<mód>. Itt a következő értékeket adhatjuk meg a <mód>-nak: - warmmelegindítás (nincs memóriaellenőrzés) - cold hidegindítás (memóriaellenőrzéssel) - bios BIOS újraindítás - hard CPU intenzív újraindítás (háromszoros hiba) Memóriarészek védelme: reserve=<start1>,,...,<startN>, E paraméter segítségével memóriahelyet foglalhatunk le azoknak a hardvereknek a számára, amelyek például nem kedvelik az "autoprobe"-t, és arra rendszerlefagyasztással reagálnak. Példa: Egy "érzékeny" hálózati kártya megvédésére az "autoprobe"-tól írjuk be: reserve=0x330,32 ether=5,0x330,eth0
E példában a hálózati kártya 32 bites adatbuszos, ami a 0x330 címről indul és az 5ös megszakítást használja. A root partíció beállítása: root=<partíció> Példa: root=/dev/hda5
Ez indítja a kernelt és megpróbálja a root partíciót betölteni az első logikai meghajtóról az első (E)IDE lemez kiterjesztett partícióján. A RAM mérete (RAM): mem=<size> Beírhatjuk a +RAM méretét bájtban, kilobájtban vagy Megabájtban. Példánk különböző beállításokat mutat be 96 MB RAM-mal. mem=96M mem=98304k
Ritka alkalommal lehet hogy megtörténik az, hogy az alaplap nem tudja felszabadítani a RAM teljes mennyiségét. Kérjük vonja le az alaplap által lefoglalt mennyiséget (512 kB-ig normálisnak tekinthető). A helyes mennyiséget kitalálhatja "próbálgatással". A SCSI vezérlő A legtöbb SCSI vezérlőt paraméterek átadásával kell konfigurálni.
166.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
SCSI stremaerek: st=,[,<max>] - Puffer méret (mennyiség 1 kB-os blokkokban) - Írásküszöbérték (mennyiség 1 kB-os blokkokban) - <max> Maximum pufferméret (opcionális) (pl. 2) SCSI meghajtók számozása ID útján: max_scsi_luns=<sorszám> - <sorszám> 1..8 Példa egy SCSI eszköz konfigurálására: Adaptec AHA-1520 / 1522 / 1510 / 1515 / 1505 SCSI felületcsatoló: aha152x=,,[,[,<par>]] - (a SCSI csatoló ID-je) 0, 1 - (újracsatlakoztatás) 0, 1 - <par> (paritás) 0, 1 Ez a meghajtóprogram használatos több olcsó SCSI vezérlő futtatásához. Minden SCSI vezérlőt tartalmazó hangkártya (kivéve a Pro Audio Spectrum) az Adaptec lapkával (chip) van szerelve. Merevlemezek és hálózati kártyák Merevlemez: hd<x>=,,<szektorok>[,<írás>[,]] - <x> a, b, . . . , h 1-től 8. merevlemez - cilinderek száma - fejek száma - <szektorok> szektorok száma - <írás> cilinderek melyek után íráskompenzációt kell használni - megszakítás Ha a BIOS a régebbiek közül való, lehetséges hogy a merevlemez geometriáját nem pontosan ismerte fel. A helyes paramétereket át kell adnunk a kernelnek azért, hogy mégis el tudjuk érni a teljes merevlemezt. hdc=1050,32,64 hd<x>=
-
<x> a, b, . . . , h 1-től 8. merevlemez - noprobe, ha egy létező merevlemez okoz problémákat none mellőzze a CMOS bejegyzéseket és ne teszteljen - nowerr mellőzze a WREE_STAT-bitet - cdrom rosszul, merevlemezként történő felismerésnél, vagy ha egyáltalán nem ismerte fel, vagy csak nem akar bootolni - autotune gyorsabb PIO mód használatához - slow hosszabb szünet adása minden egyes elérésnél. Ez valóban lassú, de néha segít.
Ha egy CD-ROM-ot nem megbízhatóan ismer fel a rendszer, akkor adjuk meg a bejegyzést az eszköz biztonságos kezeléséhez. hdd=cdrom
167.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Ethernet hálózati kártyák: ether=,[,<par1>[,<par2>...<par8>]], A különböző paraméterek <par1>-től <par8>-ig különböző jelentés-sel bírnak minden egyes eszközmeghajtó esetén. Rendszerint csak két paraméterre van szükség, ahol az első a kezdőcím, a második a végcím a megosztott memóriából. Az első nem numerikus argumentum tekinthető a névnek. - a használt megszakítás; 0 autopróbához - port cím; 0 autopróbához - <start> kezdőcím a megosztott memóriához. - <end> végcím a megosztott memóriához - A felületillesztő neve (alaphelyzetben eth0) A f ő érv e paraméterek megadásához az, hogy a kernel felismerhessen több hálózati kártyát is, mert alapértelmezésben csak az első kártyát keresi. Ezt könnyen megtehetjük ezzel: ether=0,0,eth1
Az insmod és a modprobe Az insmod parancs az /etc/modules.conf-ban beállított paraméterek alapján betölt egy moduláris eszközmeghajtót. Az autoprobe teszteli az eszközt és a paraméterit kiírja a standard inputra. A modprobe az insmod és az autprobe variánsának tekinthető, amennyiben teszteli és betölti (ha lehetséges) az eszközmeghajtót. Modprobe paraméterek Ebben a bekezdésben leírjuk azokat a paramétereket, amelyek modulként való betöltődéskor szükségesek lehetnek. Ha nehézségbe ütközünk egy meghajtó betöltése során (habár megadtuk a paramétereket), vagy ha itt nem találjuk a paraméter leírását, akkor a meghajtót be kell építeni egy monolitikus kernelbe. Néhány meghajtó nem építhető be modulként eddig, és néhány csak akkor ismeri fel a hardver tulajdonságait, ha a kernelbe fordítottuk őket. Ennek ellenére azt javasoljuk, hogy a “modul változatot” próbáljuk először. Ha egy meghajtó modulként tölt ődik be, egyes használt változók, vagy mindegyik felülírható parancssorból. Van pl. az io változó a NE2000 meghajtóhoz, amely meghatározza a használt I/O értéket. Ennek a pontos parancsa a modul betöltéséhez: meggyfa:/ # insmod ne io=0x300 irq=10
vagy jobb a modprobe használata: meggyfa:/ # modprobe ne io=0x300 irq=10
Ne felejtsük el, hogy az “egyenlő” előtt és után nincs szóköz. Azonkívül a hexadecimális értékeket megadott formátumban kell bevinni (egy vezető ‘0x’-el).
168.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Ha több paramétert kívánunk megadni, akkor szóközzel kell őket elválasztani. Ez a legfőbb különbség a paraméterek LILO promptnál való beviteléhez képest, ahol nincs üres hely egy meghajtó paramétereinek használatán belül. Az itt beírt paraméterek be vannak építve a /etc/modules.conf-ba is. Itt sok paraméter hozzá van rendelve egy bizonyos modulhoz. Itt több sor van modulonként. A sorok a következőkre fognak hasonlítani: options <modul neve> <parm1>=<érték1> ...
ahol a: - <modul neve> a modul neve kiterjesztése nélkül .o - <parm1> paraméter #1 - <érték1> érték, amelyet a paraméterhez rendelünk #1 Egy NE2000 kártyához készült bejegyzés így néz ki: options ne io=0x300 irq=10
A különböző típusú támogatott eszközökhöz tartozó beállítások az adott disztribúció súgójában elérhetőek. Használtak még az lsmod (betöltött modulok listázása) és az rmmod (betöltött modulok eltávolítása) parancsok is.
Kernelfordítás A kernel konfigurálása A /usr/src/linux-ból kiadott make config parancs elindít egy konfiguráló scriptet, amely sok kérdést tesz fel. A bash kell hozzá, ezért ellenőrizd, hogy létezik-e a /bin/bash, a /bin/sh a /bin/bash-ra mutat-e, vagy a $BASH tartalmazza-e a /bin/bash-t. A make config-nak van két könnyebben és kényelmesebben használható alternatívája. Azok akik X alatt dolgoznak, megpróbálhatják a make xconfig-ot, ha van Tk installálva. A make menuconfig azoknak való, akik jobban szeretnének egy szöveges menüt; (n)curses kell hozzá. Ezeknek a felületeknek van egy határozott előnyük: ha elrontasz valamit a konfigurálás közben, akkor egyszerűen vissza lehet menni kijavítani. A kérdésekre általában igennel (`y' (yes)) vagy nemmel (`n' (no)) kell válaszolni. Az eszközmeghajtókhoz általában van `m' opció is. Ez azt jelenti, ``modul'', azaz a rendszer le fogja fordítani, de nem közvetlenül a kernelbe, hanem betölthető modulként. Néhány nyilvánvaló és nem fontos opciót itt nem magyarázok el, néhány egyéb opció leírását lásd ebben a fejezetben. A 2.0.x verziótól kezdve van egy `?' opció is. Ennek hatására az adott paraméter egy rövid leírását kapjuk. Ez a legnaprakészebb információ az adott opcióról.
169.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Opciók -
-
-
-
-
-
Kernel math emulation: Társprocesszor emuláció. Ha nincs matematikai társprocesszor a gépedben (egy sima 386 vagy 486SX esetén) akkor erre igennel kell válaszolni. Ha van társprocesszor és mégis igennel válaszolsz, ne aggódj - a kernel használni fogja a társprocesszort és figyelmen kívül hagyja az emulációt. Az egyetlen következmény az, hogy a kernel nagyobb lesz, fogyasztva a memóriát. Úgy hallottam, hogy a társprocesszor emuláció lassú. Bár nincs sok köze ehhez a fejezethez, jó ha ez eszedbe jut, ha azt tapasztalod, hogy nagyon lassú az X. Enhanced IDE/MFM/RLL disk/cdrom/tape support: Megnövelt IDE/MFM/RLL disk/cdrom/szalagos egység támogatás. Erre valószínűleg szükség lesz. Ez azt jelent, hogy a kernel támogatni fogja a szabványos PC merevlemezeket; a legtöbb gépben ilyen van. Ebbe nem tartoznak bele az SCSI maghajtók, ezek konfigurálására később kerül sor. Amennyiben nem a fenti kell, választhatod még az `Old harddisk (MFM/RLL/IDE) driver'-t (régi MFM/RLL/IDE lemez meghajtó). Csak az egyiket lehet választani. A fő különbség az, hogy a régi meghajtó csak két lemezegységet tud kezelni egy csatolón, míg az előbbi egy második csatolót is tud kezelni illetve az IDE/ATAPI CD-ROM és szalagos egységeket is. Az új meghajtó 4k-val nagyobb, mint a régi, és feltételezhetően ``javított'', ami azt jelenti, hogy amellett, hogy több hibajavítást is tartalmaz, megnöveli a lemezek teljesítményét, különösen az újabb (EIDE) hardver esetén Networking support: Hálózati támogatás. Elméletileg erre csak akkor kellene igennel válaszolni, ha géped egy hálózaton van, mint amilyen az Internet, vagy éppen SLIP, PPP, term, stb. segítségével telefonvonalon akarsz hálózatra kapcsolódni. De mivel sok programcsomag (mint például az X ablakozó rendszer) akkor is igényel hálózati támogatást, ha a gép nincs igazi hálózatra kötve, mindenképpen igennel kell válaszolni. Később megkérdezi, hogy akarsz-e TCP/IP támogatást; itt is `y' a válasz, ha nem vagy teljesen biztos az ellenkezőjében. Limit memory to low 16MB: Memória korlátozása az alsó 16 MB-ra. Vannak hibás 386-os DMA vezérlők, amelyek nem tudnak 16 MB fölé eső memóriát megcímezni. Csak abban a ritka esetben kell igennel válaszolni, ha ilyened van System V IPC: Az IPC (Interprocess Communication = ``processzek közötti kommunikáció'') egyik legjobb definicója a Perl könyv szómagyarázatában található. Nem meglepő, hogy néhány Perl programozó ennek segítségével küld üzeneteket processzek között, csakúgy mint sok más programcsomag (pl. a DOOM, hogy a legismertebbet említsem). Ezért nem ajánlatos n-nel válaszolni, hacsak nem tudod pontosan mit csinálsz. Processor type (386, 486, Pentium, PPro): Processzor típusa. Régebben ez befordított bizonyos optimalizációt az adott processzorhoz; a kernel simán futott más processzorokon is, csak egy kicsit nagyobb volt. Az újabb kernelek esetén ez már nem így van, ezért annak a processzornak a típusát kell beírni, amelyhez a kernel készül. Egy ``386-os'' kernel minden gépen menni fog. SCSI support: SCSI támogatás. Ha van SCSI eszközöd, válaszolj `y'-t. További kérdéseket fog feltenni CD-ROM támogatásról, a lemezegységek és az SCSI adapter típusáról. Bármilyen típusú CD-író használatánál a SCSI támogatás kötelező.
170.
Barhács OktatóKözpont
-
-
-
-
Linux rendszergazdai modul - 6. fejezet
Network device support: Hálózati eszköz támogatás. Ha van hálózati kártyád, vagy szeretnél SLIP-pel, PPP-vel vagy a párhuzamos porton át csatlakozni az Internethez, válaszolj igennel. A konfigurációs script megkérdezi a kártya típusát és a használandó protokollt. Filesystems: Fájlrendszerek. A konfiguráló script ezek után megkérdi, hogy akarod-e használni a következő fájlrendszereket: - Minix: Az újabb disztribúciók nem hoznak létre minix fájlrendszereket, és sokan nem is használják, de ennek ellénére érdemes lehet bekonfigurálni. Néhány ``mentőlemez''-program használja, és sok floppyn van minix fájlrendszer, mert floppyn sokkal kényelmesebb ezt használni (kevesebb helyet foglal maga a fájlrendszer). - Extended (ext): Ez volt az ext2 fájlrendszer első változata, ma már nem használják széles körben. Ha szükséged van rá, akkor valószínűleg tudsz is róla; ha nem tudod, akkor nincs is rá szükséged. - Second extended (ext2): Ezt széles körben használják az újabb disztribúciók. Valószínűleg ilyened van, ezért igennel kell válaszolni. - xiafs: Egy időben elterjedt volt, de most nem ismerek senkit aki használja. - Msdos: Ha használni akarod a meglévő MS-DOS winchester partíciókat, vagy DOS alatt formázott floppykat akarsz mountolni, akkor válaszolj igennel. - Umsdos: Ez a fájlrendszer kibővít egy MS-DOS fájlrendszert a szokásos Unix-szerű tulajdonságokkal, mint például a hosszú fájlnevek. Haszontalan olyanoknak (mint én), akik nem használnak DOS-t. - /proc: Az egyik legnagyszerűbb dolog a tejpor feltalálása óta. (Az ötletet azt hiszem a Bell Labs-tól lopták szégyentelen módon.) A proc fájlrendszer nem arra való, hogy létrehozzák a lemezen; ez egy fájlrendszer felület a kernel és a processzek felé. Sok processz-listázó (mint a ps) használja. Egyszer próbáld ki a cat /proc/meminfo vagy cat /proc/devices parancsokat. Néhány parancsértelmező (különösen az rc) használja a /proc/self/fd-t (más rendszereken /dev/fd néven ismert) I/O műveletekre. Majdnem biztosan igennel kell válaszolnod erre, sok fontos linux segédprogram támaszkodik rá. - NFS: Ha a géped hálózatra van kötve és szeretnél más gépeken lévő fájlrendszerereket használni NFS-sel, akkor válaszd ki. - ISO9660: A legtöbb CD-ROM-on ez található. Ha van CD-ROM meghajtód és szeretnéd Linux alatt használni, válaszd ki. - HPFS: Az írás idején egy csak olvasható fájlrendszer OS/2 HPFS-hez. - System V and Coherent: System V és Coherent partíciókhoz. (Ezek más PC-s Unix változatok.) - NTFS: Windows NT fájlrendszer. Character devices: Karakteres eszközök. Itt állíthatók be a (párhuzamos) nyomtató, busz-egér (busmouse), PS/2 egér (sok notebook gép használ PS/2 egér protokollt a beépített trackballhoz), néhány szalagos egység és más hasonló ``karakteres'' eszközök meghajtói. Nyomj `y'-t a megfelelő helyen. Sound card: Hangkártya. Ha nagyon vágysz arra, hogy halljad a biff-et ugatni, nyomj `y'-t, és a konfigurációs program részletesen ki fog kérdezni a hangkártyádról
171.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Nincs az összes konfigurációs opció felsorolva itt, egyrészt mert túl gyorsan változnak, másrészt, mert magától értetődőek. (Például a ``3Com 3C509 support'' az említett ethernet kártyához való támogatást jelenti.) A kernel fordítása A make menuconfig vagy a make xconfig után egy üzenet tudatja, hogy a kernel konfigurálása megtörtént és felszólít, hogy ``check the top- level Makefile for additional configuration'', stb. (``További konfiguráláshoz ellenőrizd a felsőszintű Makefile-t'') Nézz bele tehát a Makefile-ba. Valószínűleg nem kell megváltoztatni semmit, de megnézni sosem árthat. Az opciókat megváltoztathatod akkor is, amikor az új kernel már a helyén van az rdev paranccsal. Amikor a konfiguráló script véget ér, azt is mondja, hogy add ki a make dep és a make clean parancsokat. A make dep ellenőrzi, hogy az összes függőség, mint például az include fájlok, a helyükön vannak-e. Nem tart sokáig, hacsak a géped nem nagyon lassú. Egy make clean-t is csinálni kell. Ez letörli az összes object fájlt és néhány egyéb dolgot, amit a régi verzió hátrahagy. Mindenesetre ne felejtsd el ezt a lépést, mielőtt megpróbálod újrafordítani a kernelt. A make dep és make clean után jöhet a make zImage vagy make zdisk (Ez az a rész, ami sokáig tart.) A make zImage lefordítja a kernelt és (többek között) egy `zImage' nevű fált hagy maga után a arch/i386/boot-ban. Ez az új tömörített kernel. A make zdisk ugyanezt teszi, de az új zImage-t rámásolja egy floppyra, amelyet addigra remélhetőleg már betettél az ``A:'' drive-ba. A `zdisk' nagyon kényelmes az új kernelek teszteléséhez. Ha lefagy (vagy egyszerűen csak nem működik jól), akkor csak kiveszed a floppyt, és bootolhatsz a régi kernellel. Akkor is jól jön, ha véletlenül letörlöd a kernelt (vagy valami hasonló szörnyűség történik). Új rendszerek telepítésére is lehet használni; az egyik lemez tartalmát egyszerűen átmásolod a másikra. Minden valamirevaló újabb kernel tömörítve van, ezért van `z' a nevük előtt. A tömörített kernel automatikusan kicsomagolja magát, amikor végrehajtódik. A make mrproper alaposabb törlést végez. Néha szükség van rá, ajánlott minden patch alkalmával végrehajtani. A make mrproper a konfigurációs fájlt (.config) is letörli, ezért csinálj róla biztonsági másolatot, ha megtartásra érdemesnek találod. A make oldconfig megpróbálja egy régi konfigurációs fájl alapján konfigurálni a kernelt; elvégzi helyetted a make config lépést. Ha még sosem fordítottál kernelt vagy nincs régi konfigurációs fájl kéznél, akkor ne tedd, mert minden bizonnyal meg kell változtatni az alapértelmezett konfigurációt. A 2.0.30 verziótól kezdve majdnem minden elérhető modul formában is. Használatuk a következő: ne konfiguráld bele a kernelbe, azaz ne mondj rá y-t a make config alatt. Fordíts egy új kernelt és bootolj vele újra. Menj be megint az /usr/src/linux-ba és add ki a make modules parancsot.
172.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Ez lefordítja az összes olyan modult, amely nem szerepelt a kernel konfigurációban és linkeket helyez el rájuk az /usr/src/linux/modules könyvtárban. Lehet őket közvetlenül innen is használni, vagy kiadhatod a make modules_install parancsot, ami elhelyezi őket a /lib/modules/x.y.z könyvtárban, ahol x.y.z a kernel verziója. Ez különösen a fájlrendszerek esetén lehet kényelmes. Bizonyos fájlrendszereket általában ritkán használnak. Például ha a kezembe kerülne egy msdos floppy, akkor annyit tennék, hogy insmod /usr/src/linux/modules/msdos.o, aztán rmmod msdos ha végeztem. Ez az eljárás kb. 50k memóriát szabadít fel a szokásos működés közben. Egy megjegyzést kell tenni a minix fájlrendszerrel kapcsolatban: a ``mentőlemeznek'' készített kernelbe mindig közvetlenül bele kell fordítani. A kernel installálása Ha kész van a kernel és az úgy is működik, ahogy szeretnéd, itt az ideje installálni. A legtöbben a LILO-t (Linux Loader) használják erre célra. A make zlilo installálja a kernelt, lefuttatja rajta a LILO-t, és bootolásra kész állapotba hozza, DE CSAK AKKOR, ha a LILO a következőképpen van konfigurálva: a kernel /vmlinuz, a LILO az /sbin-ben van, és a LILO konfigurációs fájl (/etc/lilo.conf) tartalma is ennek megfelelő. Ellenkező esetben közvetlenül kell a LILO-t használni. Eléggé könnyű installálni és használni, de a konfigurációs fájl hajlamos összezavarni az embereket. Nézd meg a konfigurációs fájlban (a régebbi verzióknál /etc/lilo/config, az újaknál /etc/lilo.conf), hogy mi az aktuális beállítás. A konfigurációs fájl így néz ki: ... image = /vmlinuz label = Linux root = /dev/hda1 ...
Az `image =' az aktuális kernelre mutat. A legtöbben /vmlinuz-t használnak. A `label' alapján dönti el a lilo, hogy melyik kernelt, vagy operációs rendszert indítsa el, és a `root' az adott operációs rendszer gyökérkönyvtára. Készíts biztonsági másolatot a régi kernelről és másold a frissen fordított zImage-t a helyére. (Például, ha /vmlinuz-t használsz, azt mondod, hogy cp zImage /vmlinuz) Ezután futtasd a lilo-t - az újabb rendszereken elég annyi, hogy lilo, de régebbieken lehet, hogy /etc/lilo/install, vagy akár /etc/lilo/lilo -C /etc/lilo/config kell. Ha szeretnél egy régi kernelt bootolni a merevlemezről (így is megmenekülhetsz, ha az újat elrontottad), másold le a lilo konfigurációs fájlban az `image = xxx' sort és az utána következő sorokat a fájl aljára, és változtasd meg az `image = xxx' sort `image = yyy'-ra, ahol `yyy' annak a fájlnak a teljes elérési útvonala, amelybe a régi kernelt mentetted.
173.
Barhács OktatóKözpont
Linux rendszergazdai modul - 6. fejezet
Azután változtasd meg a `label = zzz' sort `label = linux-backup'-ra és futtasd a lilo-t. Lehet, hogy be kell tenni egy `delay=x' sort is a konfigurációs fájlba, ahol x az az idő tizedmásodpercben megadva, amennyit a lilo vár mielőtt bootolna. Így meg lehet szakítani (például a shift billentyűvel), és be lehet írni a régi kernel címkéjét, ha valami kellemetlen történik az újjal. Az rdev parancs A kernel konfigurálása még a fordítás után is lehetséges erre való az rdev parancs. rdev Konfigurációs opciók átadása a kernelnek A parancs formája: rdev rdev -R rdev -r <size> rdev -v A parancs paraméterei: - image: a kernelimage neve - root device: a gyökérkönyvtárat taralmazó eszköz neve - flag: 1 (csak olvasható), 2 (írható-olvasható) - size: ramdisk méret - videomód:: -1 (normál felbontás), -3 (prompt) A parancs kapcsolói: - R: írható- vagy olvashatóként kapcsolja be a rooteszközt. - r: virtuális ramdisk beállítás - v: videomód beállítása Megjegyzés: nincs.
174.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Az X Window konfigurálása Jellemzők Kliens-szerver alapú rendszer, ahol a kliens és a szerver tud hálózaton keresztül is kommunikálni, X protokollon keresztül. A grafikus képernyőt egy szerverprogram kezeli, és minden program, amely írni vagy rajzolni szeretne a képernyőre, ezzel a szerverrel kommunikál. Ezek a programok a kliensek. A szerver mindig a lokális gépen fut. Az X protokollt TCP/IP vagy DECnet fölött lehet használni (elvileg bármilyen megbízható byte-folyam orientált transzport szintű protokoll felett működik, de még nem készült el más elterjedt implementáció). ,,Az X protokoll (Xlib implementációja) aszinkron: az Xlib a kéréseket egy belső adatbufferben időlegesen eltárolja, és nem küldi egyből a szervernek (ezzel is csökkentve a hálózati forgalmat). A kérések a következő esetek valamelyikében kerülnek továbbításra a szerver felé: A kliens egy adott típusú esemény bekövetkeztére vár, de a várt típusú esemény még nem következett be, nem érkezett meg a szervertől róla információ. Ekkor minden kérés azonnal továbbítódik a szerver felé, hátha ezek között a kérések között van az, amelyik a várt eseményt kiváltja. Egyes szervertől jövo üzenetek azonnali választ igényelnek a kliens programtól. Egy ilyen üzenet vételekor a kliens Xlib része azonnal válaszol a szervernek, de az üzenetek helyes sorrendjének betartása érdekében az összes addigi (de még a bufferben levő) üzenetek is el lesznek küldve. Van több olyan Xlib függvény, amely a buffert üríti (ilyen például az XFlush() és az XSynch()). Ezeket a függvényeket akkor kell használni, ha a program hosszú ideig rajzol úgy, hogy közben nem vár semmiféle eseményt. (Ha ezt elfelejtenénk, akkor lehet, hogy hosszú ideig nem látszana semmi változás a szerver képernyőjén). Ennek az aszinkronitásnak van még egy következménye: nagyon nehéz az X Window rendszert használó programokat nyomkövetni, mert lehet, hogy valamely hibaüzenet több Xlib függvény meghívásával késobb jut el a klienshez: vagyis nem biztos, hogy a hibát az az Xlib függvény okozta, amely után az jelentkezett.''[8] Hálózat-orientált, és ezen azt értjük, hogy a programokban használt grafikai rutinok nem közvetlenül a képernyőmemóriát manipulálják, hanem a hálózaton, hálózati csomagok formájában lesznek elküldve annak a gépnek, amelynek meg kell jelenítenie az eredményt. A szabvány nem tartalmaz ablakkezelő stratégiát, ezek elláttása egy speciális kliens, az ablakkezelő (window-manager) feladata. Egy átlagos kliens létrehoz egy ablakot a képernyőn, azon belül létrehozhat ablakokat (önmagán belüli területeket megváltoztathat), de az önmagán kívüli területeket nem változtathatja meg. Az ablakkezelő ezenkívül megteheti azt, hogy az ablakot egy meghatározott kerettel veszi körbe, és a képernyő egész részét birtokolhatja. Ablakkezelőből csak egy lehet egyszerre a képernyőn. Egy X szerverhez bármennyi X kliens csatlakozhat.
175.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Mivel a monitorok különböző méretűek és felbontásúak, ezekre is tekintettel kell lennie. Támogatja a mono és a színes monitorokat, 8-16-24-32 bps színmélységig. A felbontásnak csak a hardvereszközök szabnak határt. A mutatóeszköz lehet egér, toll vagy érintőképernyő. Az egerek 5 gombig támogatottak. Billentyűzetből is többfélét támogat, a billentyűzetkiosztás szoftverből állítható. A munkaterület több monitoron is elhelyezkedhet egyszerre.
Alapfogalmak Képernyő Mivel a rendszert hálózatos környezetben tervezték, egy gép különböző képernyőkre tud rajzolni. Ezért meg kell tudnia különböztetni a képernyőket. Minden képernyőnek neve van, általános alakja: Gépnév:Képernyő.Sorszám. A képernyőre egy DISPLAY nevű környezeti változón keresztül hivatkozhatunk, amely a képernyő nevét tartalmazza. Beállítása: - DISPLAY=valami.gep.nev:0 - DISPLAY=localhost:4 - DISPLAY=:0 Egér Alapértelmezésben 5 gombig támogatja az egereket. Az egérrel lehetséges műveletek a következők: - lenyomni egy gombot és nyomva tartani, - lenyomni egy gombot és elengedni (kattintás), - duplán kattintani, - triplán kattintani, - egy lenyomott gombot fölengedni, - ESC, Ctrl, Shift vagy Alt billentyűk egyikét (vagy többet egyszerre) lenyomni, és közben az egérrel a fenti műveletek bármelyikét végrehajtani. Mindegyik művelethez hozzá lehet rendelni valamilyen eseményt. Balkezesek számára felcserélhetőek a gombok Billentyűzet A billentyűzet két konvertáláson megy át. Először a szerverspecifikus kódokat keycode - alakítja át a rendszer gépfüggetlen X szimbolikus nevekre - keysym. Ezután más keysym-eket lehet rendelni a szimbolikus nevekhez. A szimbolikus kódok képzésekor figyelembe veszik a módosító billentyűk (Shift, Ctrl, Caps Lock, stb.) állapotát is. A keymap táblázat adja meg, hogy a fizikai kódokhoz milyen szimbolikus nevek tartoznak. A táblázat megváltoztatására az xmodmap parancs szolgál. Ez először beolvassa az összes megadott utasítást, elvégzi a megadott helyettesítéseket a pillanatnyi táblázat alapján, és úgy írja vissza a módosított táblázatot. A felkiáltójellel kezdődő sorokat figyelmen kívül hagyja.
176.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Ablak A programok ablakokat nyitnak meg a képernyőn. Az az ablak, ahová a program ír, megjelenít, ahonnan a bemenetet várja. Legfeljebb egy aktív ablak lehet egyszerre a képernyőn. Lehetséges azonban az is, hogy egy ablak sem aktív. Egy ablak aktívvá tétele függ a használt ablakkezelőtől is. Az ablakok fajtái: - root ablak - az összes ablak alatt lévő teljes képernyőnyi felület, - sima ablak - melyben valamilyen program fut, - üzenőablak - ideiglenes ablak, mely valami fontos dologra akarja felhívni a felhasználó figyelmét, - menü - valamilyen lehetőséget kínál fel, általában a sima ablakhoz kapcsolódik, - ikon - a sima ablak kicsinyített mása, - scrollbar - gördítőablak. Egy sima ablakhoz kapcsolódik, azt szabályozza. A főablakban lévő szöveget vagy ábrát görgeti Erőforrások Az ablakok megjelenését és viselkedését befolyásoló kapcsolókat nevezzük erőforrásoknak. Ilyen erőforrások az ablakok, a bitmap-képek, fontkészletek és színek. Az erőforrások tartalmazhatnak valamilyen szöveget, számot vagy logikai értéket. A rendszer az alapbeállításokat a /usr/lib/X11/app-defaults/ könyvtárban lévő állományok segítségével végzi. Az X szerver maga is tárol erőforrásokat. Két tárolót használ, az összes alképernyőn nyitandó ablakok erőforrásait tartalmazó RESOURCE_MANAGER, és az alképernyőnként megadható SCREEN_RESOURCES. A tárolók értékeit az xrdb programmal állíthatjuk be és módosíthatjuk. Betűkészletek Az X különböző betűtípusok (fontok) kezelésére képes. A képernyőn lévő ablakok is használhatnak különböző fontokat. A fontokat az X szerver a gépen lévő állományokból, vagy egy hálózati font-szerverről kaphatja. A fontokat az X szerver egy előre megadott módon keresi végig a könyvtárakban. Ennek az útvonalnak a lekérdezésére szolgál az xset -q parancs.
Konfigurálás Az XF86Config Az X Windows rendszer fő konfigurációs állománya az XF86Config, Ez vagy közvetlenül az /etc könyvtárban található, vagy az /etc-ből nyíló X11 könyvtárban. Ez a fájl részekre (sections) oszlik, mindegyik kezdete Section és az EndSectionnel végződik. Lejjebb, nagyjából áttekintjük a legfontosabb részeket (sections). Később megismerhetjük hogyan integráljunk be további betűkészleteket (fonts), miként állíthatunk be beviteli eszközöket (input devices) és a 3D gyorsítók működését.
177.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Ezt szintén a XF86Config fájl bizonyos részei kezelik természetesen, habár további betűk integrálása külső programok segítségét igényli, amelyek benne vannak a Linuxban vagy részei az alapértelmezett telepítésnek. Az itt tárgyalt metódus célja, hogy illusztráljuk az elérhető lehetőségeket és ösztönzőként szolgáljon, de nem térünk ki az összes eshetőségre. Az xf86config vagy xf86Setup (az XFree86-4.0-hez) programok létrehozzák az XF86Config fájlt alapértelmezettként a /etc/X11-ben. Ez az elsődleges beállítási fájl az X Window rendszerhez. Itt megtalálhatjuk az összes beállítást, ami a grafikus kártyánkra, egerünkre és a képernyőnkre vonatkozik. Az XF86Config több részből áll. Minden egyes rész a beállítások egy bizonyos aspektusával foglalkozik. A részek mindegyike azonos formátumú: Section entry 1 entry 2 entry n EndSection
A következő típusú részek léteznek: - Files: Ez a rész írja le az összes használt elérési utat és az RGB színtáblázatot. - ServerFlags: Itt adjuk meg az általános kapcsolókat. - InputDevice: A beviteli eszközöket állítjuk be ebben a részben. Az XFree86-3.3mal ellentétben mindkett ő, a billentyűzet és az egér, valamint a speciális beviteli eszközök (touch pad, joysticks stb.) ebben a részben kerülnek beállításra. Fontos szakszavak itt a Driver és a lehetőségek (options) amelyek meghatározzák a Protocol-t és a Device-t. - Monitor: A képernyő leírását tartalmazza. Ebben a részben található elemek tartalmazzák a nevet, amire a későbbiekben Screen definícióként hivatkozunk, a sávszélességet (bandwidth) és a szinkronjelek frekvenciáit (HorizSync és VertRefresh). A beállítások MHz-ben, kHz-ben és Hz-ben vannak megadva. A szerver rendszerint nem fogadja el az olyan modeline-t, amely nem felel meg a képernyő leírásának. Ezzel megakadályozza, hogy a képernyő véletlenül túl nagy frekvenciát kapjon. - Modes: A modeline paramétereket tartjuk itt a speciális képernyő felbontásokhoz. Ezeket a paramétereket a konfigurálóprogram számítja ki a felhasználó által megadott értékek alapján és általában nem szükséges megváltoztatni azokat. Ennél a pontnál beavatkozhatunk kézzel, ha például egy állandó frekvenciájú képernyőt akarunk csatlakoztatni. - Device: Ez a rész meghatároz egy speciális grafikus kártyát. Erre a leíró neve alapján utalunk. - Screen: Ebben a részben a Driver (pl. vga2), a monitor és a Device bejegyzések alkotják az XFree86 számára szükséges beállításokat. A Display alrészben megadhatjuk az adott virtuális képernyő méretét (Virtual, valamint evvel a virtuális képernyővel használt ViewPort-ot és Modes)-t. - ServerLayout: Ez a rész meghatározza az egyes vagy többfejes beállítás elrendezését. A beviteli eszközök InputDevice és a megjelenítő eszközök Screen egy részbe kerültek kombinálva.
178.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Screen Először is nézzük meg közelebbről a screen részt. Mint már említettük, ez egy monitor és egy device részt foglal magába, és meghatározza a használt felbontást és színmélységet. Section "Screen" Driver "accel" Device "Miro Crystal 40SV" Monitor "EIZO T563-T" DefaultColorDepth 16 Subsection "Display" Depth 8 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 Virtual 1024 768 EndSubsection Subsection "Display" Depth 16 Modes "1280x960" "1152x864" "1024x768" "800x600" ViewPort 0 0 Virtual 1280 960 EndSubsection Subsection "Display" Depth 32 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 Virtual 1024 768 EndSubsection EndSection
A beállítások - Accel: Speciális gyorsított szerverekhez - Mono: Nem VGA 1 és 4 bites szerver - SVGA: Super VGA szerver - VGA2: 1 bites (monokróm) VGA szerver - VGA16: 4 bites VGA szerver Az XF86Config-ban minden egyes szerverhez külön rész tartozik, amely csak akkor lesz használva, ha a vonatkozó szerver elindul. A következő két sor, a Device és a Monitor, a beállításhoz tartozó grafikus kártyát és képernyőt határozza meg. A bejegyzések az adott nevű Device, illetve Monitor részre mutatnak. Ezeknek a részeknek a részletes ismertetésére a későbbiekben kerül sor. A DefaultColorDepth meghatározza, hogy milyen színmélységben induljon a szerver, ha nem adjuk meg külön a színmélységet. Minden egyes színmélységhez tartozik egy-egy Display alrész. A Depth határozza meg az alrészhez tartozó színmélységet. A Depth lehetséges értékei 8, 16, 24 és 32. Nem minden X-szerver támogatja az összes üzemmódot. A legtöbb kártya esetén a 24 és a 32 bites színmélység gyakorlatilag ugyanaz, egyes kártyáknál a 24 packed-pixel a 24 bit/pixeles üzemmódot, viszont néhány másik kártyánál a 32 padded-pixel üzemmódot jelenti. A színmélységet követi a beállított felbontások listája (Modes). Ezt a listát a szerver balról jobbra haladva ellenőrzi. Minden egyes felbontáshoz megkeresi a megfelelő 179.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Modeline-t, amely meg kell, hogy egyezzen a megadott órajel-frekvenciák egyikével, vagy egy órajel-frekvenciával a kártya programozásához. Az első megtalált felbontás az úgynevezett Default mode. A Ctrl +Alt +szürke + billentyűkombinációval a listában eggyel jobbra lépve válthatunk a soron következő felbontásra, a Ctrl+Alt+szürke billentyűkkel pedig eggyel balra léphetünk, így az X Windows futása közben is módosíthatjuk a felbontást. Az alrész utolsó két sora a virtuális képernyő méretére és lehorgonyzására vonatkozik. A méret a kártyán lévő memória mennyiségétől és a kívánt színmélységtől függ, és nem a monitor maximális felbontásától. Igen nagy virtuális munkaasztalt hozhatunk létre, mivel a modern grafikus kártyák nagy mennyiségű videó memóriával rendelkezdek. Viszont megfigyelhetjük, hogy ezután nem tudjuk a 3D funkcióit használni, ha gyakorlatilag feltöltjük a teljes videó memóriát egy virtuális munkaasztallal. Ha a kártya 16 MB videó RAM-mal rendelkezik, például a virtuális képernyő lehet akár 4096x4096 (!) pixel nagyságú is 8-bites színmélységben. Device rész Egy device rész egy adott grafikus kártyát ír le. Az XF86Config fájl tetszőleges számú device bejegyzést tartalmazhat, feltéve, hogy a neveik különbözőek, az Identifier kulcsszót használva. Az a szabály — ha több, mint egy grafikus kártyát telepítettünk — a részek egyszerűen meg vannak számozva a behívás sorrendjében, az első a Device[0], a második Device[1] stb. A 8.6.2 fájllistában láthatunk egy részletet a Device részéből egy gépnek amelyikben egy MatroxMillenium PCI grafikus kártyát telepítettek. Section "Device" BoardName "MGA2064W" BusID "0:19:0" Driver "mga" Identifier "Device[0]" VendorName "Matrox" Option "sw_cursor" EndSection
Ha valamelyik beállítóprogramot használjuk a beállításra, akkor az eszköz rész (device section) úgy néz ki, mint a fenti ábra. Mindkett ő, a Driver és a BusID természetesen függ a gépünkön lévő hardvertől és a beállítóprogram automatikusan érzékeli azokat. A BusID meghatározza a PCI vagy AGP nyílást (slot), amibe a grafikus kártyát telepítettük. Ez illeszkedik (matches) az azonosítóhoz (ID) ami megjelenik az lspci parancsra. Itt jegyezzük meg, hogy az X szerver a részleteket decimális formában akarja, míg az lspci hexadecimális formában jeleníti meg azokat! A Driver paraméteren keresztül meghatározhatjuk a meghajtót, amit ehhez a grafikus kártyához használunk. Ha a kártya egy Matrox Millenium, akkor a meghajtó modul neve mga. Az X szerver ekkor végigkeresi a ModulePath-ot, amit a Files rész alatt határoztunk meg a drivers alkönyvtárban. A szabványos telepítésnél ez a /usr/X11R6/lib/modules/drivers könyvtár. Ezért egyszerűen a _drv.o-t hozzáadjuk a névhez, így az mga meghajtó esetében a meghajtó fájl mga_drv.o kerül betöltésre. Az X szerver vagy a meghajtók viselkedése további lehetőségeken (options) keresztül is befolyásolható. Egy példa erre a lehetőségre az sw_cursor amit az eszköz részben (device section) állítunk be. Ez deaktiválja a hardveres egérmutatót és a szoftvert használó egérmutatót (cursor) ábrázolja. A meghajtó modultól függően, 180.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
különféle lehetőségek állnak rendelkezésünkre, amelyek megtalálhatók a meghajtó modulokat leíró fájlokban a /usr/X11R6/ lib/X11/doc könyvtárban. Képernyő rész (Monitor Section) A Monitor részek mindegyike egy-egy képernyőt ír le, ugyanúgy ahogy a device részek egy-egy képernyővezérlő-kártyát. A Monitor részekből is bármennyi lehet az XF86Config-ban. A server layout rész határozza meg, hogy melyik képernyő rész alkalmazható. A képernyődefiníciókra is vonatkozik az, hogy csak gyakorlott felhasználók módosítsák ezeket. A képernyő rész legkényesebb részei az úgynevezett modelineok, amelyek a vízszintes és függőleges időzítéseket állítják be az adott felbontáshoz. A képernyő tulajdonságok (properties), különösen az engedélyezett frekvenciák, a képernyő részben találhatók. Szerencsére egy "kézi" modeline beállításra manapság aligha van szükség. Ha modern multisync képernyőt használunk, a megengedett frekvenciák és az optimális felbontás kiolvasására az a szabály, hogy az közvetlenül kiolvasható a képernyőből az X szerver által a DDC-n keresztül. Ha ez nem lehetséges valamely ok miatt, akkor használhatjuk az egyik VESA módot, ami az X szerverben benne van. Ez működni fog gyakorlatilag az összes grafikus kártya/képernyő kombinációval. További konfigurációs állományok A /etc/X11/Xresources könyvtárban sima szöveges fájlokban találhatóak a rendszer alapbeállításai, amik a grafikus felület elindulásakor az xrdb -merge parancs kiadásával állítódnak be. A /etc/X11/Xsession egy shell script, amely a grafikus felület elindulásakor lefut. Ez egy (a root számára) szabadon szerkeszthető fájl, amely könnyen konfigurálható a /etc/X11/Xsession.options fájl segítségével. A /etc/X11/Xsession.options fájlban engedélyezhetünk vagy tilthatunk bizonyos dolgokat a felhasználók számára. A használható lehetőségek: - allow-failsafe: Ha ez az opció engedélyezve van a /etc/X11/Xsession scriptben startx-es vagy xdm-es indításkor, akkor egy ,,vész X menet'' indul el, amelyben egy xterm-et indít el csak, a képernyő bal felső sarkába. Ablakkezelő nem indul el. Ha az xterm nem végrehajtható, akkor a ,,menet'' azonnal befejeződik. - allow-user-resources: Ha a felhasználónak van a home könyvtárában egy .Xresources nevű fájl, akkor az abban definiált erőforrások felülbírálják az alapbeállításokat, amikor a felhasználó bejelentkezik. - allow-user-modmap: Ha a felhasználónak van a home könyvtárában egy .Xmodmap nevű fájl, akkor az abban definiált billentyűzet-beállítások felülbírálják az alapbeállításokat, amikor a felhasználó bejelentkezik. - allow-user-xsession: Ha a felhasználónak van a home könyvtárában egy .xsession nevű fájl, akkor az végre fog hajtódni a /etc/X11/Xsession fájl végrehajtása után.
181.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
A /etc/X11/window-managers fájl egy sima szöveges fájl, amiben a rendszeren lévő ablakkezelők vannak felsorolva. Ezek közül az első fog elindulni a felhasználónak, ha nincs saját .xsession fájlja. Ebbe a fájlba a root a register-window-manager nevű perl scripttel tud felvenni ablakkezelőket, vagy eltávolítani azokat (emellett természetesen kézzel is szerkeszthető). A /etx/X11/Xsession fájl egy shell-script, amely az X ,,menet'' elindulásakor mindig lefut, akár a startx, akár az xdm paranccsal indítjuk is. Ennek a scriptnek a konfigurálására szolgál a /etx/X11/Xsession.options fájl. Ha engedélyezni szeretnéd a felhasználóknak a ~/.xsession fájl használatát, akkor a /etx/X11/Xsession.options fájlban szerepelnie kell a következő opciónak: allow-userxsession. Ennek a fájlnak a segítségével tudják a felhasználók egyedivé tenni az X ,,menetüket''. Az xdm Grafikus felületet biztosít egy vagy több, helyi vagy távoli gép számára. Ellenőrzi és koordinálja a felhasználó menetét (session). Egy alternatívája az init/getty/login programoknak, amik karakteres terminálon dolgoznak. Ezekhez hasonlóan dolgozik az X szerver is, amikor login ablakot küld a képernyőre. Amikor a felhasználó begépeli a nevét és jelszavát egy karakteres képernyőn, akkor ezek elküldésre kerülnek a login programnak, amely ellenőrzi a jelszót, és elindítja a /etc/passwd fájlban definiált shellt. A shell elindulása után hajtódnak végre a felhasználó saját indítófájljai (például ~.bash_profile). Ezután kapja meg a felhasználó a kívánt környezetet. Amikor a felhasználó xdm-en keresztül jelentkezik be, akkor a név és a jelszó hitelesítve van, hasonlóan a login programhoz. Azonban ennél a funkciónál ágazik el az xdm és a login. Shell futtatása helyett az xdm elindít egy sor shell-scriptet. Ezek a /etc/X11/xdm/ könyvtárban találhatóak. Az xdm konfigurálása Az xdm konfigurációs állományai a /etc/X11/xdm/ könyvtárban találhatóak. -
Xaccess: Az XDMCP kapcsolatok hozzáférést vezérlő fájlja. Xreset: Ez a script fut le - rootként -, amikor bárkinek befejeződik az X ,,menete''. Xreset_0 : Ez a script fut le - rootként -, amikor a 0-s képernyőn (általában a konzol) befejeződik az X ,,menet''. Xresources: Az X erőforrásainak használata egy xdm ,,menet'' alatt. Xresources_0: Az X erőforrásainak használata egy xdm ,,menet'' alatt, a 0-s képernyőn (általában a konzol). Xservers: Ez a fájl tartalmazza a lokális gépen elindítandó szervereket, és azokat a távoli X terminálokat, amelyek nem támogatják az XDMCP-t. Xsetup: Ez a script fut le, amikor az xdm menedzseli a képernyőt. Xsetup_0: Ez a script fut le, amikor az xdm menedzseli 0-s képernyőt.
182.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 7. fejezet
Xstartup: Ez a script fut le - rootként -, amikor egy felhasználó bejelentkezik. Ha a script visszatérési értéke 0-tól különbözik, akkor a felhasználó ,,menete'' nem fog elindulni. Xstartup_0: Ez a script fut le - rootként -, amikor egy felhasználó ,,menete'' elindul a 0-s képernyőn. xdm-config: Az xdm számára definiált erőforrások. xdm.options: Az xdm konfigurációs beállításai.
Az xdm-et csak a root tudja elindítani.
A KDE A KDE története A KDE projektet Matthias Ettrich indította 1996-ban. Célja az volt, hogy egy komplett grafikus környezetet hozzon létre, nem csak egy újabb ablakkezelőt. A KDE 1.0-ás verziója 1998-ban jelent meg, az 1.1-es 1999 februárjában. A KDE mára stabil és nagyon hatékony környezetté fejlődött, ezért lett a Linux alapértelmezett grafikus környezete. Bevezetés a KDE-be A KDE a Linux alapértelmezett grafikus környezete. Egyszerre nagyon egyszerű és nagyon sokrétű, lehetővé teszi, hogy felfedezzük a Linux-ot csak az egér használatával. HTML munkafelület Ma az Internet az információtechnológia szíve. A HTML nyelv -- a Web alapja -segítségével egyszerűen és gyorsan barangolhatunk az Interneten. Ezért használja a KDE munkafelület a HTML nyelvet, így ugyanolyan könnyen kezelhetjük a számítógépet, mint az Internetet. Ugyanúgy tudjuk használni az Interneten lévő erőforrásokat, mintha a saját gépünkön lennének. A K menü, a panel és a task bar A K menü egy egyszerű és hatásos módot ad a KDE programok elérésére. A K menüből elérhető programoknak köszönhetően a gép használatához szükséges alkalmazás könnyen megtalálható. A K menünek két része van. Az első a Grafika, Alkalmazások, Internet stb. elemeket tartalmazza. Ezek olyan alkalmazások listái, amelyek telepítve vannak a gépre. Például, a KTelnet indításához kattintsunk a K-ra, majd válasszuk ki az Internet-et, végül a KTelnet-et a lenyíló menüből. A második rész tartalmazza a közvetlen hozzáférést az olyan összetevőkhöz, mint a Kuka, vagy a KDE Beállító központ.
183.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Itt három különböző menüt találunk: Beállítás, Lemez navigátor és Panel. A Beállítás menü közvetlen elérést nyújt a KDE Beállító központ különböző területeihez. A Lemez navigátor használatával egyszerűen el tudjuk érni a Linux könyvtárait. A Panel azon ikonok vezérlését teszi lehetővé, melyek a képernyő alján találhatók.
Környezetfüggő menük, a jobb és a bal egérgomb használata Mint minden modern környezet, a KDE is támogatja a környezetfüggő menüket. Ezek elérhetőek az egér bal oldali gombjával (balkezes beállításnál a jobbal). A lenyíló menü az épp aktuális objektumtól függ, amelyen az egérrel állunk. Ha a munkaasztalra mutatunk az egérrel, a lenyíló menü megengedi, hogy a könyvjelzők között, például új fájlt készítsünk (általában típusokat), vagy hogy elérjük a munkaasztal beállításait. Egy ikonra kattintva, a környezetfüggő menü segítségével letörölhetünk egy fájlt, vagy megváltoztathatjuk a tulajdonságait. Fogd és Vidd A KDE támogatja a "Fogd-és-Vidd" munkamódszert a KDE alkalmazások között. A különböző munkaasztalok A KDE támogatja a virtuális munkaasztalokat. Alapból négy különböző munkaasztal definiált, amelyek közül választhatunk (bár lehet akár nyolc is). Különböző hátteret tudunk rendelni mindegyik munkaasztalhoz, sőt el is nevezhetjük őket. A munkaasztalokat használva elszeparálhatjuk az alkalmazásokat, hogy ne fedjék egymást le a megnyíló ablakok.
184.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
A munkaasztal használata A munkaasztal a képernyő azon területe, amelyen dolgozunk. Baloldalon egy sor ikon található, mely segítségével alkalmazásokat indíthatunk, vagy megnyithatunk fájlokat. A képernyő alján találjuk a panelt és a K menüt, amely hozzáférést biztosít az összes KDE programhoz. Fönt egy tálcát találunk (vagy a panel felett alul, ha a beállítás olyan), amely az összes jelenleg futó alkalmazást megjeleníti és gyors átkapcsolási lehetőséget biztosít közöttük. A fájlstruktúra böngészése Konqueror-ral
A Konqueror figyelemre méltó lehet, mint böngésző és mint fájlmenedzser is. Hogy elindíthassuk a Konquerort, kattintsunk az ikonok valamelyikére, vagy használjuk a Lemez Navigátor-t (lásd lejjebb), hogy közvetlenül arra a fájlra álljunk, amelyikre szeretnénk. A Konqueror egy menüsorral, egy eszközsorral és egy URL sorral jelenik meg. Az ablak belseje mutatja a fájlokat és mappákat (alkönyvtárakat), amelyek az aktuális (URL sor által mutatott) könyvtárban vannak. Lehetséges a fájlstruktúra más formátumú megjelenítése is, a Nézetmenüben beállítható módon. A Konqueror ablakok a fejlécen található vezérlőgomb segítségével irányíthatóak, bezárhatjuk, méretezhetjük, ikonná zsugoríthatjuk őket. A K Menü A K menü különböző elemekből áll. A programok tematikusan vannak rendezve (Internet, Grafika stb.). Itt találhatóak a KDE Beállító Központ, a Kuka, valamint a fájlkereső és egyéb általános programok ikonjai. Alatta a Kpanel, valamint a Lemez Navigátor látható.
185.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
A Lemez Navigátor A Lemez Navigátor egy eszköz, amely lehetővé teszi a gyors hozzáférést a könyvtárakhoz a fájlstruktúrában (Root menü), valamint a Home könyvtárhoz és a legfontosabb sűrűn használt alkalmazásokhoz. Lehetőség van a Lemez Navigátor személyre szabására is. Hogy ezt megtehessük, menjünk a Beállításokra. Módosíthatjuk a Saját vagy a Megosztott részeket is. Kattintsunk arra, amelyiket módosítani akarjuk, ekkor egy ablak fog megjelenni, mely egy könyvtárra mutat. Elemek hozzáadásához másoljuk ki a vágólapra az objektumot (könyvtárat vagy fájlt), melyet hozzá akarunk adni, majd illesszük be a Lemez Navigátor ablakába. A KPanel menü A panel az a sáv, amit a képernyő alján láthatunk. A K menün és a munkaasztalokon kívül rátehetjük más alkalmazások ikonjait is, így könnyen elindíthatóvá válnak. Ha a panelre akarunk tenni egy elemet, használjuk az Alkalmazás hozzáadása menüelemet, majd válasszuk ki a megfelelő alkalmazást (vagy csoportot), és az alkalmazás megjelenik a panelen. Ha a panelen lévő ikonon jobb egérgombbal kattintunk, át tudjuk helyezni az ikont, vagy el tudjuk távolítani. A Konfigurálás opció segítségével elérhetjük a KDE Beállító központot. Fájlok és mappák létrehozása és kezelése A Konqueror segítségével különböző műveleteket hajthatunk végre a fájlokon és a mappákon. "Fogd-és-vidd" módszerrel másolhatunk vagy helyezhetünk át fájlokat. Új elem létrehozásához (pl. könyvtár), kattintsunk a jobb egérgombbal és válasszuk ki a New (Új) menüpontot. Fájlok keresésére a rendszerben megtalálható egy eszköz, amelyet elérhetünk a K menüből, vagy a Fájl menü Keres menüpontján keresztül a Konqueror-ban, amely lehetővé teszi, hogy megtaláljunk fájlokat nevük, létrehozási dátumuk vagy a tartalmuk alapján. A munkaasztal testreszabása KDE Beállító központ A KDE Beállító Központ az a testreszabhatjuk a grafikus felületet.
hely,
ahonnan
kiindulva
beállíthatjuk
és
Elindíthatjuk a KDE Beállító Központot a K menüből vagy közvetlenül a Beállítások menün keresztül a beállító központ egyes részeit érhetjük el. A Beállító Központban nyolc rész található, amelyek tematikusan csoportosítják a beállításokat. Ezeket tekintjük át a következőkben.
186.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Az Alkalmazások menü Innen állíthatunk be néhány kulcsfontosságú KDE alkalmazást: A bejelentkezés kezelő csak a root felhasználó számára elérhető. Itt állíthatjuk be a KDM (a KDE grafikus bejelentkezés kezelője) különböző opcióit. Az első ablakban beállíthatjuk az üdvözlő szöveget és az üzenetek nyelvét. A következő fülekkel beállíthatjuk a betűk méretét és típusát, a háttérszínt és a felhasználók listájának kijelzését. A Fájl kezelő és a Web böngésző megegyeznek a Konqueror Beállítások menüjéből elérhető opciókkal. A Panel menüben definiálhatjuk a panel (vagy "task bar") helyzetét. A Beállítások fülön megadhatjuk, hogy igényt tartunk-e az "információs buborékokra" a K menüben és a panelen, itt található továbbá az "Az óra internet ütem formátumban mutassa az időt" opció, ezt érdemes kipróbálni :). A Munkaasztalok fülön beállíthatjuk, hogy hány virtuális munkaasztalt akarunk használni, vagy át is nevezhetjük őket. Alapértelmezésben négy virtuális munkaasztallal rendelkezünk. Ha újabbakat akarunk készíteni, mozdítsuk el a látható kurzort. A méret kurzorral módosíthatjuk a panel részére fenntartott részt a munkaasztalokon. Végül az utolsó fül a Lemez Navigátor, amiről már följebb beszéltünk. A Munkakasztal menü Ebben a menüpontban a munkaasztal különböző elemei változtathatók meg. A Háttér szekcióban a virtuális munkaasztalok mindegyikén beállíthatunk 1-1 tapétát. Amennyiben tapéta nélküli munkaasztalt akarunk, válasszuk a Tapéta nélkül pontot. A szín mezőre kattintva kiválaszthatod a megfelelő háttérszín árnyalatot is. Ha saját képet szeretnénk tapétának használni, akkor a Tallóz gombra kattintva megkereshetjük a kívánt fájlt (jelenleg csak JPEG fájlok használhatók). Ha gyakran változtatjuk a Munkaasztalod kinézetét, nem hátrány, ha ezt a menüt gyorsan el tudjuk érni. Ehhez állítsuk be a Panelbe dokkolás opciót. Ilyenkor a KDE megjelenít egy ikont a panel jobb oldalán, amire kattintva máris megjelenik a beállítások ablaka. 187.
Barhács OktatóKözpont
-
-
-
-
Linux rendszergazdai modul - 7. fejezet
A Szegélyek szekcióban aktiválhatjuk az Aktív ablak szélek opciót. Ennek eredményeként, ha az egérmutatót a képernyő szélére mozgatjuk, automatikusan átkerülünk a szomszédos munkaasztalra. Így átrakhatunk egy ablakot az egyik asztalról a másikra. A "Varázs szélek" beállításnál tudjuk megadni, hogy hány képponttól "ugorjon" és ragadjon az ablak a képernyő széléhez vagy egy másik ablakhoz. A Színek szekcióban a grafikus felület elemeinek megjelenését, színét módosíthatjuk. Használhatjuk az előre beállított értékeket is. A Betűtípusok szekcióban a különböző karakterkészletek definiálását végezhetjük el. A Munkaasztal ikonok pontban az ikonok automatikus elrendezését definiálhatjuk. Az ikonok egy láthatatlan rácson helyezkednek el, ennek osztáspontjait tudjuk itt változtatni. Az átlátszó szövegháttér beállítással az ikonok nevei átlátszó háttérszínnel jelennek meg. A Témakezelő segítségével a rendszerrel szállított gyári témák és egyéb az Internetről letölthető témák kiválasztásával a KDE grafikus felület nagyon széppé tehető. A Képernyővédő pontban természetesen a képernyővédő állítható be. A Jelszó szükséges kapcsolóval a működő képernyővédő kikapcsolásához meg kell adni az aktuális felhasználó jelszavát. Ha a Jelszó elrejtése kapcsolót is bekapcsoljuk, akkor az előbb ismertetett jelszó beírásakor az nem látható a képernyőn. Ne módosítsuk a Prioritás értékét, ennek maximumon kell maradnia! Utoljára, de nem utolsósorban a Stílus szekcióban a KDE felületét átkapcsolhatjuk MacOS vagy akár Windows 95 stílusúra.
Az Információk menü Az Információ menüből egyszerűen és gyorsan juthatunk a számítógépről szóló információkhoz (Megszakítások, DMA-csatornák, Memória stb.), valamint az X Szerver beállításairól is képet kaphatunk. A Billentyűk menü A Globális Billentyűk és az Alap billentyűk menük segítségével módosíthatjuk a KDE programok (különösen a Konqueror) előre definiált gyorsbillentyű kombinációit. Az Ablakok menü -
-
A Haladóknak menüből határozhatjuk meg a szabványos gyorsbillentyűk (Ctrl+Tab és Alt+Tab) viselkedését. A szűrők használata nagyon összetett és szükséges hozzá az X szerver működésének ismerete. Nagyon leegyszerűsítve: azt mondhatjuk, hogy minden az X szerver által elindított alkalmazás egy osztályba tartozik (pl. a terminál az XTerm osztályba tartozik). A szűrőkkel módosíthatjuk az ablakok kinézetét az osztályuk vagy a címük alapján. Szűrő hozzáadásához válasszunk ki egy feltételt a legördülő menüből, írjuk be az ablak osztályát vagy címét, és kattints a + gombra. A Gombok menüvel beállíthatjuk a gombok helyzetét az ablakokon. Ez akkor hasznos például, ha nem szeretnénk ablakot bezárni véletlenül, amikor megpróbáljuk felnagyítani (a két gomb alapértelmezésben egymás mellett van). 188.
Barhács OktatóKözpont
-
-
-
Linux rendszergazdai modul - 7. fejezet
Ha az egér ablakokhoz való viszonyát az Egér menüben lehet beállítani. Innen sok fontos paramétert beállíthatunk, pl. nyissunk meg két ablakot egy asztalon, és helyezzük el őket úgy, hogy eltakarják egymást. Tételezzük fel, hogy a jobb egérgomb beállítása aktív ablak esetén Lesüllyeszt. Kattintsunk a jobb gombbal a felső ablak címkéjére. Az ablak, ami felül volt lesüllyed, az alatta lévő megjelenik. A Beállítások menüben tudjuk kiválasztani, hogy látni szeretnénk-e az ablak tartalmát, miközben méretezzük vagy mozgatjuk. Itt tudjuk beállítani, azt is hogy az ablakok hogyan és mikor kerüljenek fókuszba. Az ablakok elhelyezésével kapcsolatban öt beállítási lehetőséget találunk itt. Ha az Intelligens módszert választjuk, az ablakkezelő úgy rakja ki az új ablakokat az asztalra, hogy azok a lehető legkevésbé fedjék egymást. Az Egymás fölött opció választása esetén, az ablakokat az ablakkezelő egymásra helyezi, a következőt mindig egy kicsit eltolja az előzőhöz képest. A Kézi módszer választása esetén, az ablakkezelő felajánl egy kurzort, és magunk választhatjuk ki, hogy hova kerüljön az új ablak. Az Interaktív opció az Intelligens és a Kézi opciók keveréke. Ha az új ablak nem takarja "túlságosan" el a többit, akkor automatikusan kiválasztott helyen jelenik meg, ha igen, akkor az ablakkezelő egy kurzort ad, és így határozhatjuk meg a helyét. A fókusz kiválasztása is fontos, ez határozza meg, hogy mi történjen egy inaktív ablakkal, ha az egér arra téved. Négy lehetőség van: Fókusz rákattintással: Ha rákattintunk, az ablak megkapja a fókuszt és előtérbe jön. A fókusz az egeret követi: Mindig az az ablak az aktív, amelyikben az egér mutatója található, de az aktív ablak takarásban marad, nem jön a felszínre. A klasszikus fókusz-követi-az-egeret: Ugyanaz, mint az előbb, csak a Alt+Tab billentyű kombinációval is lehet az ablakok között váltani. Klasszikus laza fókusz: Mint az előbb, de ha a kurzor elhagy egy ablakot, az addig aktív marad, amíg a kurzor egy másik ablakba nem téved. Végül a Címsor menüből állíthatjuk a címsor kinézetét és azt, hogy mi történjen, ha kettőt kattintunk rá.
CD-ROM vagy lemezmeghajtó felcsatolása A munkaasztalon van két "shortcut", egy a floppyra és egy a CD-ROM meghajtóra. Ez a Linuxban alapértelmezésben meglévő két parancsikon leegyszerűsíti az ember életét. Egyetlen kattintással fel tudjuk csatolni a floppy vagy a CD-ROM meghajtót. Egy kis zöld kocka jelenik meg ilyenkor az ikonon, ez emlékeztet minket arra, hogy a meghajtó fel van csatolva. A meghajtó lecsatolásához, kattintsunk az ikonra a jobb gombbal, és válasszuk ki a "lecsatol / umount" menüpontot. A levelező program, a Kmail A Kmail egy nagy teljesítményű, könnyen használható levelező program. Mikor először használjuk egy ablak jelenik meg, melybe különböző paramétereket írhatunk be a postafiókra vonatkozóan: - név, - elektronikus cím, - aláírás fájl.
189.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
A Hálózat fül alatt állíthatjuk be, hogy milyen kapcsolaton keresztül akarjuk küldeni, illetve fogadni a leveleket. Kattintsunk az SMTP-re és írjuk be a levelező szerver nevét. Létre kell hozni egy Ügyfelet is, kattintsunk tehát a Hozzáad-ra. Sendmail használata esetén egy helyi postaláda kell, egyébként a POP3 típusú postaládát válasszuk, ide az Internet szolgáltatótól kapott adatokat kell beírni. A többi fül a program kinézetének beállításaival van összefüggésben. A Kmail rendelkezik egy modern levelező program minden tulajdonságával: címjegyzék, szűrők, fájlegyesítés stb. Használata egyszerű, segítségével elintézhetjük az összes, elektronikus levelezéssel összefüggő feladatunkat.
A Gnome A GNOME egy projekt, melyet Miguel De Icaza kezdett el, a GNU projekt támogatásával, mely a GNOME-ot standard munkakörnyezetévé tette. Célkitűzése hasonló a KDE projektéhoz: létrehozni egy teljesen grafikus környezetet és definiálni egy sor irányvonalat, melyet a többi alkalmazás követhet hogy "GNOME kompatíbilis" legyen. A GNOME sokkal újabb, mint a KDE, de fejlesztése gyorsabb volt. Jelenleg is sok funkcionalitással bíró környezet, és sok területen fejlettebb, mint a KDE, de hiányzik a kompatíbilis alkalmazások érettsége. A környezet
190.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
A KDE-vel ellentétben, a GNOME nem saját, hanem külső ablakkezelőt használ. Ez lehet akármelyik ablakkezelő, persze a GNOME definiál egy sor feltételt, amelyek meghatározzák, hogy az ablakkezelő "GNOME kompatíbilis" lehessen. Az első ablakkezelő, amelyet hozzáigazítottak ezekhez a szabályokhoz, az Enlightenment volt, ezt mutatja az előző kép is. A jobb felső sarokban és a képernyő alsó részén panelek láthatóak. A KDE-vel ellentétben, a panel nem egyedi, a GNOME környezetben annyi panel lehet, amennyire a felhasználónak szüksége van. Ezek a panelek tartalmazhatnak alkalmazásokat, gyorsindító ikonokat, lebegő alkalmazásokat, fiókokat, és menüket. A gyorsindítók úgy lettek kialakítva, hogy képek segítségével pozícionálhatóak legyenek. A gyorsindító, ahogy a neve is sugallja, elindít egy alkalmazást. A gyorsindítók egy speciális fajtája a menü. Ilyen pl. a főmenü (egy talpnyom van rajta), vagy a felhasználói, vagy "Kedvencek" menü). Még egy speciális indítófajta van, a fiók. Ez panelt tartalmaz, mely ezek után tartalmazhat alkalmazásokat, menüket, fiókokat. Az alkalmazások X alkalmazások, melyek integrálva vannak a GNOME panellel. Három fajta panel van: - Csúszó: A csúszópanel a képernyőélekhez és sarkokhoz ragaszkodik, a pozíciója azokhoz kötődik. - Elhelyezett: Az elhelyezett panel lehet a képernyő bármely részén, bárhová pozícionálható. - Élpanel: Az élpanel méretében a képernyő szélességétől vagy magasságától, elhelyezkedésében pedig a képernyő széleitől függ. A panel szélein található gombok a panel elrejtését és mozgatását segítik. Az ikonok, amelyek a képernyőn láthatóak, a GNOME fájlkezelő, a gmc (Gnome Midnight Commander) ikonjai. Ez sokkal kevésbé fejlett, mint a KDE fájlmenedzsere. Fogd és Vidd A GNOME két "Fogd-és-Vidd" protokollt implementál, így mind a Motif, mind az Xdnd protokollt használó programokkal képes együttműködni. Ez azt jelenti, hogy mind a KDE alkalmazásokkal, mind a Netscape programmal képes adatokat cserélni. Példaképpen, egy gmc ablakból húzzuk át egy kép ikonját a Netscape ablakába. A Netscape meg fogja nyitni a képet. Ugyanezzel a módszerrel a Netscape ablakból húzzuk ki a Location kis zöld ikonját a panelre: Keletkezni fog egy gyorsindító, mely arra az URL-re fog betölteni egy böngészőt. Hogy bemutassuk a "Fogd-és-Vidd" előnyeit a GTK+ alatt írt alkalmazásokkal, példaként indítsuk el az xmms (X Multimedia System - hangfájl lejátszó eszköz) lejátszót, majd ragadjunk meg egy mp3 fájlt, és húzzuk bele az xmms ablakába. A szám megszólal. Ugyanezen a módon készíthetünk lejátszás-listát (playlist), a fájlok elérési útjai automatikusan bekerülnek a listába.
191.
Barhács OktatóKözpont
Linux rendszergazdai modul - 7. fejezet
Indítóikonok Hozzáadhatunk mi is gyorsindítót a panelhez (a panelre jobb egérgombbal való kattintáskor előbukkanó menüben "Panelre helyezés" menüpont, abban pedig "új indítóikon"). A párbeszédablak, mely előbukkan, így néz ki:
Az indító neve a generált fájl neve lesz, kiterjesztés nélkül. A megjegyzésbe a segédszöveg kerüljön, amely buborékban jelenik meg, ha az indító fölött van az egérmutató. A parancs az indítandó alkalmazás elérési útja. Bizonyos esetekben szükség lehet a program terminálból futtatására is, a szöveges alapú általános unix parancsoknál, amelyek kimenetére kíváncsiak vagyunk. Meg kell jegyezni, hogy a GNOME Imlib-et használ, ezért az ikonok szinte bármilyen formátumban lehetnek. Szintén megjegyezendő, hogy a "Terminálban indítás" esetén az alap X-es alkalmazások esetén az alapértelmezett hibakimenet átirányítódik a terminálra, ami hasznos lehet a hibák felderítésénél. Az indítóikonra való kattintás jobb egérgombbal egy menüt ad ki, amely megengedi az indítóikon tulajdonságainak szerkesztését, a panelről való törlést, azon vagy más panelekre való mozgatást stb. Ha a GNOME nem is annyira sikeres jelenleg, mint a KDE, sok megkérdőjelezhetetlen előnye van: bármilyen ablakkezelőt használhatunk, így még rugalmasabban beállíthatjuk a környezetet, a megjelenése még csábítóbb lehet, a működése gyorsabb, kevesebb erőforrást igényel. Hátránya, hogy kevés alkalmazás íródott eddig hozzá.
192.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Hálózati beállítások A linuxconf használata A linuxconf egy konfigurációs eszköz, amely megpróbálja egy kezelőfelület alá gyűjteni a Linux rendszer összes beállítási lehetőségét. Lehet, hogy először nem nyeri meg a tetszésedet (esetleg nem találod meg benne annak az alkalmazásnak a panelját, amit éppen hangolni akarsz), de erre van megoldás. A linuxconf program moduláris felépítésű, ezért létre tudod hozni -- vagy meg tudod keresni -- a szükséges modult. A fejlesztés jelenlegi állapotában a linuxconf már nagyon sok gondot levehet a válladról, és hacsak nem vagy tapasztalt Unix guru, bizonyosan megtalálsz benne minden beállítást, amit használni szeretnél. A linuxconf ezeken felül környezetfüggetlen; van konzolos felülete (szöveges), HTML felülete és grafikus felülete is. A példákban mindig a grafikus felületet használjuk, de az elmondottak vonatkoznak a másik két felületre is.
A grafikus felület így néz ki. Ez a leírás csak azokat a beállításokat tárgyalja, amelyek szükségesek ahoz, hogy a géped gyorsan és megbízhatóan működjön a hálózaton. Így sok bíbelődés nélkül elkezdheted használni a Linuxodat.
193.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
A hálózat
A hálózati beállítások minden Unix rendszerben kulcsfontosságú szerepet játszanak. A Linux sem kivétel. Az ifconfig és a route parancsok kézikönyv oldalai már a címükkel sem csak egy felhasználót riasztottak el (és még mindig félelmetesek -- de ez nem azt jelenti, hogy nem vethetsz rájuk egy pillantást :)). A linuxconf-nak vitathatalan erénye, hogy egy átlátható és jól szervezett felületet ad. Ha a géped nincs hálózatra kötve, akkor ezt a részt átugorhatod. A gép alapbeállításai Ez a menüpont lehetővé teszi, hogy beállítsd a géped nevét és a hálózati interfészeket (általában ethernet kártyákról van szó). Gépnév: Ha van legalább egy hálózati interfészed, a gép neve a Teljes Tartománynév (FQDN) lesz, amit a telepítés során megadtál. Ha meg akarod változtatni ezt a nevet, győződj meg róla, hogy érvényes az új név, mielőtt valamelyik interfészhez csatolnád. Hálózati kártya beállítása: A példában egy 3Com típusú Ethernet kártya beállítását mutatjuk be. Ha DHCP-t vagy BOOTP-t használsz, akkor nem kell beírnod sem az IP számot, sem a nevet. Ha inkább a kézi beállítást választod, meg kell adnod a hálózati interfész IP címét, a hozzá tartozó teljes nevet és esetleg egy "alias"-t. Ha DNS-t használsz (lásd a DNS-ről szóló részt később), a gép nevének meg kell egyeznie a névkiszolgálóban nyilvántartott névvel. 194.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Nem kell hálózati maszkot megadni, ha az kiszámítható az IP cím osztályából. Ha nem ez a helyzet, a hálózat karbantartója biztosan el fogja árulni a beállítást, amit alkalmazni kell. A hálózati interfész típusa függ a csatlakozó perifériáktól. Válaszd az ethn-t ha ethernet hálózati kártyád van, n az interfész száma (vigyázz hogy elkerüld az ütközéseket), arcn-t ha ARCnet kártyád van, stb...
A kernel modulok, amiket használnod kell, szintén a perifériáktól függenek. Csak akkor kell a moduloknak opciókat megadni, ha a kártyád ISA-s. Ha PCI-os, akkor a rendszer automatikusan beállítja. Névfeloldás (DNS) A DNS (vagy Domain Name System, magyarul Tartomány Névrendszer) az Interneten használatos protokoll, ami a gépek nevét és IP számát összerendeli. A név megfejtésére nem a DNS az egyetlen módszer, de erre még később visszatérünk. Most csak azt kell megmondani a gépednek, hogy hogyan "szóljon" a névkiszolgálóhoz, ha szükséges. Figyelmeztetés: a tartománynév helyett, a névkiszolgálót kell megadni... Ezekben a mezőkben kell az Internet szolgáltatód névkiszolgálóinak az IP címeit megadni (nem a neveit !!). Ne ikszeld be a DNS is required for normal use négyzetet ha nem állsz állandó kapcsolatban a névkiszolgálóval (pl. bérel vonalon vagy szélessávú összeköttetéssel). Kapcsold ki ezt az opciót, ha nem állandó kapcsolatod van (pl. modem).
195.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Egyszerűsíthető a név megfejtés, ha megadunk keresési tartományokat (search domain). A képen látható esetben megadtuk az itp.hu keresési tartományt. Ezért a pisti.itp.hu gépre hivatkozhatunk egyszerűen a pisti név megadásával. Nem szabad azonban elfelejteni, hogy ha rövid névvel hivatkozol egy gépre, akkor a linux a keresési tartományokat az itt látható sorrendben keresi végig. Útválasztás és átjárók Az útválasztás panel segítségével állíthatod be, hogy hogyan érhet el a géped más gépeket (other routes to machines), másik fizikailag kapcsolódó lokális hálózatokat (Routes to other local networks) vagy átjárón keresztül kapcsolódó hálózatokat (other routes to networks) és az alapértelmezett utat (Default, ezek az előbbi kategóriákba nem sorolható gépek). Végül az útválasztó démonnak, a routed-nek is van egy menüje.
Egyéb útvonalak más gépek felé Ez a helyzet akkor áll fenn, ha mondjuk egy hordozható számítógépet akarsz párhuzamos kapun és a PLIP interfészen keresztül elérni, amit már előzőleg beállítottál (lásd a "PPP/SLIP/PLIP" bekezdést. Ha el akarod érni a hordozható gépet, fel kell állítanod egy utat, amin keresztül ezt megteheted. Ha feltételezzük, hogy az asztali számítógép címe 192.168.0.1 és a PLIP interfész fel van konfigurálva a 201.12.17.37 címmel (ezek csak példák, ne használd igazából is ezeket a címeket!) a hordozható gépen, kattints a Hozzáad gombra, és írd be az adatokat. Utána erősítsd meg a beállításaidat az Accept gomb megnyomásával. Az újonnan felállított út megjelenik a listán. Ha el akarod távolítani, kattints a Delete gombra. Útvonalak más lokális hálózatok felé A lokális hálózat lehet például Ethernet hálózat. Az ethernet kártya, (vagy valamilyen más hálózati periféria) kap egy IP címet, de ezzel még tud kommunikálni az azonos alhálózaton lévő többi géppel. Hogy létrejöjjön a kapcsolat, hozzá kell adjál egy útvonalat a listához.
196.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Más útvonalak hálózatok felé Ha a lokális hálózatodon van egy gép, aminek van hálózati interfésze más hálózatok felé, akkor az a gép egy átjáró. Ilyenkor meg kell mondani a hálózaton az összes gépnek, hogy ezek a hálózatok elérhetők, az átjárón keresztül. Meg kell tehát adni az átjáró nevét vagy IP címét. Például, ha az rtfm nevű gép (10.0.0.1) átjáró a 192.168.0.0 hálózaton, ezt meg mondhatod a vixie nevű gépnek (10.0.0.2) a következőképpen:
Alapértelmezett út Az alapértelmezett utat választják azok az IP csomagok, amelyeknek a címzettjei nem valamelyik elérhető lokális alhálózaton találhatók. Be kell állítanod az Alapértelmezett átjáró értékét. Két lehetőség van: 1. Az alapértelmetett útvonal adott: ez esetben egyszerűen a megfelelő interfész IP címét kell beírni. 2. Az alapértelmezett útvonal dinamikus: ez az eset a modemen keresztül az Internetre kapcsolódó gépekre vonalkozik (lásd a "PPP/SLIP/PLIP" részt). Ilyenkor az interfész címe minden alkalommal változhat, ezért a 0.0.0.0 értéket kell a mezőben hagyni. Az alapértelmezett útvonalat a rendszer felkapcsolódáskor automatikusan beállítja. Beikszelheted az útválasztó aktiválása rubrikát, ha a géped útválasztóként is működik (más szóval több hálózati interfésze van, és a csomagokat irányítani akarja az interfészek között). Az útválasztó démon Ha a géped útválasztóként működik egy vagy több alhálózatra, az útválasztó démon megkönnyíti az útvonalak minden gépen való felállítását. Az a szerepe, hogy kiküldje a útvonal tábla (routing table) bejegyzéseit más gépeknek. Ha ezt ki akarod használni, ki kell kapcsolni a Do not send out any routes opciót. Ha a géped egyben alapértelmezett átjáró is, beállíthatod, hogy küldje szét az alapértelmezett útvonal táblát.
197.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Ez a helyzet áll fenn, ha ezt a gépet használod az Internetes csatlakozáshoz, és ki szeretnéd küldeni az útvonalat az összes többi gépnek.
A gépnév feloldási módszerek sorrendje
Az IP cím -- gépnév névfeloldást három különböző módszerrel vihetjük véghez: 1. hosts: a rendszer átnézi a /etc/hosts fájlt, és keres benne egy olyan bejegyzést ami megfelel az adott névnek vagy IP címnek, majd visszaadja az eredményt. Ez a legegyszerűbb módszer, és a legtöbbször elégséges egy kis helyi hálózathoz; 2. DNS: a rendszer távoli névkiszolgálóktól kérdezi le nevet vagy címet. Erről a módszerről már volt korábban szó; 3. NIS (Network Information System -- Hálózati Információs Rendszer): lásd a következő bejegyzést Használhatod bármelyik fent említett módszert (egyet vagy többet) és megadhatod alkalmazásuk sorrendjét. Ha az első alkalmazott módszer sikertelennek bizonyul, a másodikon a sor és így tovább. A hosts, DNS sorrend a legjobb megoldás, a NIS-t nem kell használnod, hacsak nem valami nagy Unix hálózat része a géped.
198.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
PPP/SLIP/PLIP A PPP, az SLIP és a PLIP három az ethernet kártyához hasonlítható hálózati interfész. A különbség abban rejlik, hogy a felsorolt interfészek nem állandó jellegűek, hanem csak eseti kapcsolathoz tervezték őket. Ezért szenteljük nekik ezt a külön bekezdést. A SLIP és a PLIP interfészek beállításait itt nem részletezzük, részben azért mert használatuk nem jellemző, részben pedig azért, mert beállításuk egyszerű. A PPP interfész használata sokkal jellemzőbb.
Ezzel az interfész típussal tudsz modemen keresztül az Internetre csatlakozni. A modemhez tartozó soros kaput a /dev/ttySx fájl jelenti, ahol x a soros kapu száma, a /dev/ttyS0 az első soros kapu, (megfelel a COM1-nek), stb. Meg kell kérdezned az Internet szolgáltatódtól, hogy kell-e PAP-ot használnod. Ha igen, be kell kapcsolnod a megfelelő opciót és nem kell ide beírnod a felhasználói nevet és a jelszót. Ezek után kattints a Customize-ra ami további négy fület takar. Csak a következő opciókat kell megváltoztatni: 1. a PAP fül (ha PAP-ot használsz); 2. a Hardware fülnél minden felhasználónak megengedheted, hogy ki- vagy bekapcsolja az interfészt.
199.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
A legfontosabb hálózati konfigurációs állományok és parancsok Konfigurációs állományok Ebben a fejezetben röviden leírjuk, hogy melyik fáljnak mi a szerepe és milyen formátumban kell beírni az adatokat. /etc/rc.config Ez az egyik központi konfigurációs fájl, szinte mindent be tudunk állítani a hálózatra vonatkozólag. Minden módosítás után indítsuk el a SuSEconfig programot, hogy a módosítások belekerüljenek a többi konfigurációs fájlba. Az összes indulás során (is) lefutó szkriptek paraméterei beállíthatók ebben a fájlban. /etc/hosts Itt rendelhetők össze a gépnevek IP címekkel. Ha nem használunk DNS kiszolgálót, minden elérendő gépet fel kell sorolni ebben a fájlban, minden sorban egy-egy gép leírása szerepelhet. Be kell írni az IP címet, a gép teljes nevét (FQDN) valamint a gép belső használatbanelterjedt nevét (becenevét). Az IP cím előtt nem lehet szóközvagy tabulátor, a három bejegyzés elválasztására viszont szóközt vagy tabulátort használjunk. Megjegyzések ‘#’ jellel kezdődnek és a sor végéigtartanak. # hosts Ez a fájl tartalmazza a teljes név - IP cím # összerendeléseket. # A gépünk indulásakor használja a linux, amikor a # hálózati alrendszer már elindult, de a DNS kiszolgáló # még nem érhetö el, illetve nem kívánunk DNS kiszolgálót # használni. # Kis hálózatoknál használhatjuk DNS kiszolgáló helyett # is, mivel párszor tíz gép miatt nem érdemes DNS # kiszolgálót beállítani és üzemeltetni. # A módosítása után a tartalmát elmentve a linux képes # azonnal használni a módosított fájlt. # 127.0.0.1 localhost 193.141.17.1 gauss.suse.de gauss 193.141.17.42 sofa.suse.de sofa # End of hosts
/etc/networks A hálózat nevét rendeli a hálózat címéhez. Minden sorbanegy hálózat leírása található, a sor elején a hálózat neve, szóközzel vagy tabulátorral elválasztva pedig a hálózat címe. Megjegyzések ‘#’jellel kezdődnek és a sor végéig tartanak.
200.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
# networks A fájl tartalmazza a hálózatnév - hálózatcím # összerendeléseket. # A gépünk indulásakor használja a linux, amikor a # hálózati alrendszer már elindult, de a DNS # kiszolgáló még nem érhetö el, illetve nem # kívánunk DNS kiszolgálót használni. # loopback 127.0.0.0 localnet 193.141.17.0 # End of networks.
/etc/host.conf -
A fájl segítségével adhatjuk meg a névfeloldás resolver pontos működését. Megjegyzések ‘#’ jellel kezdődhetnek és a sor végéig tartanak. A következő paraméterek állíthatók be:order bind hosts: A névfeloldás keresési sorrendje, a lehetséges argumentumok: - bind: a DNS kiszolgáló elsődleges használata - hosts: keresés a /etc/hosts fájlban - multi on off Meghatározza, hogy a /etc/hosts fájlban engedélyezettek-e ismétlődő IP címek. - nospoof on Ennek hatására a DNS kiszolgáló kivédi az átejtési kísérleteket. - alert on off A logban nyoma marad az átejtésnek. Minden egyéb következmény nélkül csak befolyásolja a nameserver spoofing-ot. - trim A feloldani kívánt nevek végéről levágja a paraméterként megadott nevet (Ez jelen esetben a valahol.hu). Ennek akkor van értelme, ha az egész hálózat egy tartományban van és az /etc/hosts fájlban nem FQDN neveket használunk, hanem csak a gépek nevét.
# /etc/host.conf # # We have named running order hosts bind # Allow multiple addrs multi on # End of host.conf
/etc/nsswitch.conf A GNU C könyvtár 2.0 változatával rendelkező Linux használni tudja a "Name Service Switch" (NSS) rendszert. (További információkat az nsswitch.conf kézikönyv oldalon ‘man 5 nsswitch.conf’,illetve a GNU C könyvtár referenciakönyvében (The GNU C Library ReferenceManual) a "System Databases and Name Service Switch" 5.2.4fájllistában találhatunk). A példát nézve a hosts kezdetű sort nevezzük "adatbázisnak", és ebben az esetben a névfeloldás sorrendjét adja meg. Az első helyen áll a files, ez a /etc/hosts fájlt jelenti; ezt követi a dns, ez egy DNS kérést (lásd‘named’ csomag) jelent.Ha a linux kap egy névfeloldási kérést, akkor először a /etc/hosts fájlban próbálja beazonosítani, ha ott nem találja, akkor küld egy DNS kérést a DNS kiszolgáló felé.
201.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
A /etc/nsswitch.conf fájlban megadhatjuk az igényelt információk keresési sorrendjét. A megjegyzések‘#’ jellel kezdődhetnek és a sor végéig tartanak. Opciók: - aliases Levelezési aliasok. A sendmail(8) használja; további információk ‘man 5 aliases’. - ethers Ethernet fizikai címek (MAC). - group Felhasználói csoportok, a getgrent(3) használja. Lásd a ‘man 5 group’. - hosts Gépnevek és IP címek. A gethostbyname(3) és hasonló függvények használják. - netgroup Gépek és felhasználók listája a hálózatunkban a felhasználók jogainak beállítására. Lásd ‘man 5 netgroup’. - networks Hálózati nevek és címek. A getnetent(3) használja. - passwd Felhasználói jelszavak. A getpwent(3) használja. Lásd ‘man 5 passwd’. - protocols Hálózati protokollok. A getprotoent(3) használja. Lásd ‘man 5 protocols’. - rpc "Remote Procedure Call" nevek és címek. A getrpcbyname(3) és hasonló függvények használják. - services Hálózati szolgáltatások. A getservent(3) használja. - shadow A felhasználók "Shadow" jelszavai. A getspnam(3) használja. Lásd ‘man 5 shadow’. # /etc/nsswitch.conf # Ez a fájl tartalmazza az információkérések # feloldási sorrendjét passwd: compat group: compat # Hagyományosan a /etc/passwd illetve a # /etc/group fájl tartalma. hosts: files dns # A névfeloldás sorrendje a /etc/hosts fájl, # majd egy DNS kérés. networks: files dns # A hálózati névfeloldás sorrendje a /etc/networks, # majd egy DNS kérés services: db files protocols: db files # A szolgáltatások és protokollok elérésekor # adatbázisból vagy a /etc/services és a # /etc/protocols fájlokból szerezze # az információt. netgroup: files
/etc/resolv.conf A /etc/host.conf és a /etc/resolv.conf fájlok felelnek a névfeloldás (resolver) működéséért. A tartomány nevét itt lehet megadni a search kulcsszó után, utánakövetkezőleg pedig a DNS kiszolgálók IP címét lehet felsorolni a nameserver kulcsszó után (legfeljebb 3 DNS kiszolgálót adhatunkmeg). Ha nem sikerül feloldani a megadott nevet, akkor a search kulcsszó utáni tartományt hozzáragasztja a feloldandó névhez és ezt próbáljafeloldani. A megjegyzések ‘#’ jellel kezdődhetnek és a sor végéigtartanak.
202.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
# /etc/resolv.conf # A névfeloldás beállítási lehetöségei. # # A tartománynevünk valahol.hu search valahol.hu # # We use Gauss (193.141.17.1) as nameserver nameserver 212.40.96.161 nameserver 212.40.96.162 # Két DNS kiszolgálót fogunk használni. # # End of resolv.conf
/etc/HOSTNAME Gépünk teljes neve szerepel itt a tartomány nevével együtt fully qualified domain name FQDN). A legtöbb szkript ebből a fáljból veszi az FQDN-t. Csak egy sor szerepelhet benne, a gép és a tartomány neve. Induláskor lefutó szkriptek Ezek a scriptek állítják be és indítják el a hálózati alrendszert, amint a linux átvált többfelhasználós futási szintre. - /sbin/init.d/network: Ez a script felelős a hálózatunk beállításáért; a hardver és a szofver oldaláról is. (hálózati csatolók, IP, hálózati és gateway címek; valamint - netmaszkok). A beállítóprogram hozza létre a /etc/rc.config fájl alapján - /sbin/init.d/inetd: Elindítja az inetd-t, ha az elindítható (/etc/rc.config). Ez a démon szükséges több szolgáltatás működéséhez. - /sbin/init.d/rpc Elindítja az RPC szolgáltatásokat, amelyek többek között az NFS működéséhez is szükségesek. - /sbin/init.d/sendmail: Elindítja a sendmail programot a /etc/rc.config adatai alapján. A sendmail az egyik legelterjedtebb mail démon. Útvonalválasztás Linux alatt Az útvonalválasztó tábla beállításához több kell, mint a /etc/rc.config fájl paramétereinek állítgatása; erre a célra van egy script a /sbin/init.d és egy fájl a /etc könyvtárban. Amikor a hálózat alapbeállításai sikeresen megtörténtek az induláskor (is) lefutó szkripteknek (/sbin/init.d/network, i4l_hardware) köszönhetően a /sbin/init.d/route szkript beolvassa a /etc/route.conf-ot, és felépíti a statikus útvonalválasztás tábláját. Minden egyes statikus útvonalnak szerepelnie kell a /etc/route.conf fájlban: útvonalak gépek felé, útvonalak gépek felé gateway-eken keresztül, útvonal más hálózatok felé. A másik útvonalválasztási lehetőség a routed, amely egy kicsit többet tud és kicsit nehezebb a beállítása (kézikönyv routed oldala). Ha a route programot paraméterek nélkül indítjuk, kiírja nekünk a jelenleg használt statikus útvonalválasztási táblát. Ha nem módosítottuk a /etc/route.conf fájlt, akkor a route által kiírt sorok és a fájlban szereplő sorok megegyeznek. 203.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
A Flags, Metric, Ref és Use kivételével az adatok a /etc/route.conf-ban azonosak. Ugyanis ezek az adatok nincsenek benne eredetileg a /etc/route.conf-ban. Ha nem módosítjuk a /etc/route.conf-ot, akkor a route parancs által adott lista ugyanaz (gondolom a formátuma), mint a fájl, de ez alól kivételek a Flags, Metric, Ref és Use paraméterek. (Gondolom azért, mert ezek a paraméterek menet közben keletkeznek, és nincsenek benne a /etc/route.conf fájlban, de a route kilistázza ezeket is). # Cél Dummy/Átjáró Netmaszk Eszköz # Net devices 127.0.0.0 0.0.0.0 255.255.255.0 lo 192.168.0.0 192.168.0 1 255.255.255.0 eth0 # A helyi hálózatunk egyik része a 192.168.0.0/255.255.255.0 # és az elsö ethernet eszközön keresztül kapcsolódunk ehhez # a hálózathoz. # Ha ehhez a hálózathoz tartozó gépet címzünk meg, akkor az # egyszerüen kikerül az eth0 eszközön az ethernet hálóra, # amelyen a címzett elkapja azt. # A fenti sort túlhatároztuk, mivel az eth0 eszköz címe # 192.168.0.1, nyugodtan elhagyhatjuk az eszköz bejegyzést # mivel a cím egyértelmüen azonosítja az eszközt VAGY # a gateway helyére 0.0.0.0 címet írhatunk. 192.168.1.2 192.168.1.1 255.255.255.255 eth1 # A 192.168.1.2 gép nincs benne a 192.168.0.0/255.255.255.0 # hálózatban, ezt megcímezve a csomagok a 192.168.1.1 címü # eszköz felé indulnak, és az eth1 eszközön áthaladva a # 192.168.1.2 gép fogja azokat fogadni. 192.168.2.0 192.168.2.1 255.255.255.0 eth2 # A 192.168.2.0/255.255.255.0 szintén egy hálózat, melynek # egyik gépe felé küldött csomagok az eth2 eszközön keresztül # indulnak a 192.168.2.1 gateway felé és azon keresztülhaladva # érkeznek a 192.168.2.0/255.255.255.0 hálózatba, ahol a # címzett megkapja a csomagot. 0.0.0.0 212.40.70.170 0.0.0.2 ppp0 # Minden egyéb csomag a ppp0 eszköz felé indul, amely # továbbítja azokat az internet felé.
A /etc/route.conf fájl kitöltésének szabályai: - Megjegyzéseket a # jel után írhatunk és azok a sor végéig tartanak. Az üres sorokat figyelmen kívül hagyja a route. Egy sorban kett ő, három vagy négy mező lehet, amelyek szóközzel vagy tabulátorral vannak elválasztva. - Az első mezőben szereplő cím a célja az útvonalnak. Itt szerepelhet egy gép, egy hálózat, illetve egy elérhető DNS kiszolgáló címe. Utóbbi esetben a továbbiakban már név szerint (FQDN) is megadhatunk címeket. - A default kulcsszó a default gateway-t jelenti, ezt csak akkor használjuk cél megadására, ha tudjuk mit cselekszünk. Routing bejegyzésnek ne használjuk a 0.0.0.0 értéket. - A második mezőben a gateway címe szerepelhet. Ez lehet a default kulcsszó, lehet IP cím, illetve egy név (FQDN) is. Az első mezőben megadott címet ezen a címen keresztül lehet elérni, vagyis az első mező a megadott gateway mögött van. - A harmadik mezőben az első mezőre vonatkozó netmaszkot adhatjuk meg, amely egy gép esetén 255.255.255.255, míg hálózat esetén a hálózat netmaszkja. - Az utolsó mezőben adhatjuk meg a hálózati eszköz nevét, amelyen keresztül vezet a megadott útvonalunk.
204.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
Az ifconfig és a route parancsok Az ifconfig Az ifconfig a kernel-rezidens hálózati interfészek konfigurálására való. Bootoláskor használják a hálózati interfészek beállítására. Ezután általában csak debuggoláshoz vagy a rendszer finomhangolásához használják. Ha egyetlen argumentum sincs megadva, akkor az ifconfig az aktív interfészek státuszát mutatja. Ha egyetlen interfész argumentumot kap, az adott interfészt mutatja csak; ha egyetlen -a argumentumot kap, akkor az összes interfész státuszát mutatja, a nem aktívakét is. Egyébként pedig egy interfészt konfigurál. ifconfig Egy hálózati interfész konfigurálása. A parancs formája: ifconfig [interface] ifconfig interface [aftype] opciók | cím ... A parancs paraméterei: - interface: Az interfész neve. Ez általában egy driver neve egy sorszámmal ellátva, például eth0 az első Ethernet interfészhez. - up: Ez a flag az interfész aktíválását okozza. Ez impliciten meg van adva, amikor egy címet rendelsz hozzá az interfészhez. - down: Ez a flag az interfészhez tartozó driver lelövését okozza. - cím: Az IP cím, amit az interfészhez kell rendelni. A parancs kapcsolói: - arp: Megengedi vagy letiltja az ARP protokoll használatát ezen az interfészen. - promisc: Megengedi vagy letiltja az interfész válogatás nélküli (promiscuous) üzemmódját. Ilyenkor ez az interfész fogadja a hálózaton érkező összes csomagot. - allmulti: Megengedi vagy letiltja az all-multicast üzemmódot. Ilyenkor ez az interfész fogadja az összes multicast hálózati csomagot. - metric N: Ez a paraméter az ,,interface metric'' -et állítja be - mtu N: Ez a paraméter beállitja a ,,Maximum Transfer Unit (MTU)''-ot az interfészen. - dstaddr addr : Beállítja a másik gép IP címét egy point-to-point kapcsolat esetén (mint például a PPP). Ez a kulcsszó már elavultnak számít, használd a pointopoint kulcsszót helyette. - netmask addr : Beállítja az interfész számára az IP hálózati maszkot. Ennek a default értéke a szokásos A, B vagy C hálózati maszk (ahogyan következik az interfész IP címéből), de bármilyen más értékre is be lehet állítani. - add addr/prefixlen : Egy IPv6 címet rendel az interfészhez. - del addr/prefixlen: Megszünteti egy IPv6 címét az interfésznek. - tunnel aa.bb.cc.dd: Egy új SIT (IPv6-in-IPv4) eszközt hoz létre, és az adott címre ,,alagútaztatja'' (tunnelling) - irqaddr: Beállítja az ezen eszköz által használt interrupt számot. Nem minden eszköznek lehet dinamikusan megváltoztatni az IRQ beállításait. - io_addr addr: Beállítja az eszköz I/O címét. - mem_start addr: Beállítja az ezen eszköz által használt osztott memória (shared memory) kezdeti értékét. Kevés eszköznek van szüksége erre.
205.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
-
media type: Beállítja az eszköz által beállított fizikai közeg típusát. Nem minden eszköznél lehet ezt megváltoztatni, és azoknál sem biztos, hogy mindent be lehet állítani, amelyeknél meglehet. A type tipikus értékei 10base2 (vékony Ethernet), 10baseT (sodrott pár 10Mbps Ethernet), AUI (külső transceiver) és így tovább. A speciális auto közegtípusal lehet a drivert arra rávenni, hogy megpróbálja kitalálni a közeget. Nem minden driver képes erre. - broadcast [addr]: Ha a cím (addr) argumentum meg van adva, beállítja ennek az interfésznek a protokoll-specifikus broadcast címét. Ha nincs, akkor beállítja vagy törli az IFF_BROADCAST flag-et ezen az interfészen. - -pointopoint [addr]: Ez a kulcsszó engedélyezi az interfész ponttól-pontig üzemmódját, ami azt jelenti, hogy ez egy közvetlen kapcsolat két gép között, senki más nem hallgatózik rajta. Ha a cím-argumentum szintén meg van adva, beállítja a kapcsolat túloldalán levő gép protokoll-címét is, éppen úgy, ahogy az elavult dstaddr kulcsszó teszi. Egyébként pedig beállítja vagy megszünteti a IFF_POINTOPOINT flag-et erre az interfészre. - hw class cím: Beállítja az interfész hardver címét, amennyiben a eszköz drivere támogatja ezt a műveletet. A kulcsszót a hardver osztály neve és a hardver cím nyomtatható ASCII megfelelője kell kövesse. A jelenleg támogatott hardverosztályok: ether (Ethernet), ax25 (AMPR AX.25), ARCnet és netrom (AMPR NET/ROM). - Multicast: Beállítja a multicast flag-et erre az interfészre. Erre normális esetben nincs szükség, mert a driverek maguk képesek ezt a flag-et helyesen beállítani. - txqueuelen length: Beállítja az eszköz átviteli sorának (transmit queue) a hosszát. Érdemes ezt kis értékre állítani lassabb eszközök esetén (modemkapcsolatok, ISDN), hogy a nagyobb nem-interaktív adatátvitelek ne zavarják meg a telnetszerű interaktív forgalom áramlását. Megjegyzés: nincs. Példa: Ifconfig eth0 -netmask 255.255.255.0 192.168.0.1
A route A route a kernel IP routing tábláját manipulálja. Elsődleges felhasználása abban áll, hogy beállítja a statikus útvonalakat adott gépek vagy hálózatok felé, egy olyan interfészen keresztül, amely korábban már konfigurálva volt az ifconfig programmal. route Az IP routing tábla kiírása/megváltoztatása. A parancs formája: route [-CFvnee] route [-v] [-A family] add [-net|-gép] cél [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev]If] route [-v][-A family] del [-net|-gép] cél [gw Gw] [netmask Nm] [metric N] [[dev]If] A parancs paraméterei: add: egy cím hozzáadása del: egy cím törlése cél: A célhálózat vagy gép. IP címeket pontozott decimális (dotted decimal) vagy gép/hálózat név formájában adhatsz meg. 206.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
A parancs kapcsolói: - v: bőbeszédű (verbose) üzemmód - A family : A megadott címcsaládot használja (pl. `inet', `inet6'). - n: A címeket numerikus formában mutatja, nem próbálja meghatározni a szimbólikus gépneveket. Ez akkor hasznos, ha azt akarod kitalálni, hogy miért tűnt el a névszerveredhez vezető útvonal. - e: a netstat-formátumot használja a routing tábla kiírásához. -ee egy nagyon hosszú sort ír ki, a routing tábla összes paraméterével. - Net: a cél egy hálózat. - host: a cél egy gép. - F: kiírja a kernel FIB routing táblát. A formátumot meg lehet változtatni -e -vel és ee -vel. - C: kiírja a kernel útvonal cache-ét. - del - töröl egy útvonalat. - add - hozzáad egy útvonalat. - cél - A célhálózat vagy gép. IP címeket pontozott decimális (dotted decimal) vagy gép/hálózat név formájában adhatsz meg. - netmask Nm - megadja az hozzáadandó útvonal hálózati maszkját. - gw Gw - Minden a cél hálózat/gép -hez tartozó IP csomag a megadott gateway-en keresztül lesz irányítva. - MEGJEGYZÉS: Először is a megadott gateway elérhető kell legyen. Ez általában azt jelenti, hogy előzőleg be kell állítanod egy statikus útvonalat a gateway-hez. Ha valamelyik lokális interfészed nevét adod meg, akkor arra az interfészre lesznek terelve a csomagok. Ez a BSD-vel való kompatibititás céljából van. - metric M: Beállítja a metric mezőt a routing táblában (a routing démonok használják) M-re - mss M: A maximális TCP szegmensméretet (Maximum Segment Size - MSS) az ezen az útvonalon folyó kapcsolatok esetén M bájtra állítja be. Ezt többnyire csak az útvonalkeresési beállítások finomabb optimalizálására használják. A default 536.
207.
Barhács OktatóKözpont
Linux rendszergazdai modul - 8. fejezet
-
window W: A TCP ablakméretet (windowsize) az ezen az útvonalon folyó kapcsolatok esetén W bájtra állítja be. Ezt tipikusan csak AX.25 hálózatok és olyan driverek esetén használják, amelyek képtelenek ,,back to back'' frame-eket kezelni. - irtt I: Beállítja az ezen az útvonalon folyó TCP kapcsolatok ,,initial round trip time'' (irtt) paraméterét I miliszekundumra (1-12000). Ezt általában csak az AX.25 hálózatokon használják. A default az RFC 1122-nek megfelelő 300ms. - reject: Egy eltorlaszoló útvonalat installál, ami meggátolja a neki megfelelő útvonalkeresést. Ez például arra jó, hogy hálózatokat takarjunk el az alapértelmezett útvonal beállítása előtt. NEM tűzfalépítésre való. - mod, dyn, reinstate: Egy dinamikus vagy módósított útvonalat installál. Mindkét flag-et általában csak a routing démonok állítják be. Ez csak hibakeresés céljából van. - devIf: Kikényszeríti, hogy az útvonal a megadott eszközzel legyen társítva, ha ez nincs, akkor a kernel magától próbálja meg meghatározni a használandó eszközt (úgy, hogy megnézi a már meglévő útvonal- és eszközspecifikációkat, és azt hogy az útvonalat hova rendelik) A legtöbb normális hálózatban erre nincs szükség. Ha devIf az utolsó opció a parancssorban, akkor a dev szót ki lehet hagyni, mivel az a default. Egyébként az útvonalmódosítok sorrendje (metric netmask - gw - dev) nem számít. Megjegyzés: nincs. Példák: - route add -net 127.0.0.0 - hozzáadja a normális loopback bejegyzést, 255.0.0.0 netmaszkot használva (A osztályú hálozat, a cél címből következik), és a ,,lo'' eszközzel társítja (feltételezvén, hogy az eszköz előzőleg már konfigurálva volt az ifconfig -al) - route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 - egy útvonalat jelöl ki a 192.56.76.x hálózathoz, az ,,eth0'' eszközön keresztül. A C osztályú netmaszk megadása itt tulajdonképpen felesleges, mert a 192.* egy C osztályú cím. A ,,dev'' szót itt el lehet hagyni. - route add default gw mango-gw - Egy alapértelmezés szerinti útvonalat ad a routing táblához (amely akkor lesz használva, ha egyetlen más útvonal sem illeszkedik). Minden ezt az útvonalat használó csomag a ,,mango-gw'' felé lesz terelve. Az, hogy az útvonalhoz melyik eszközt használja, attól függ, hogy hogyan tudjuk a ,,mango-gw'' -t elérni - előzőleg be kell állítani egy statikus útvonalat a ,,mango-gw''-hez. - route add ipx4 sl0 - Az ,,ipx4 gép''-hez vezető útvonalat ad hozzá a SLIP interfészen keresztül (feltételezve, hogy a ,,ipx4''-hez SLIP-en keresztül kapcsolódunk). - route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4 - Ez a parancs azt adja meg, hogy a ,,192.57.66.x'' hálózatra érkező csomagok az előbbi útvonalon keresztül a SLIP interfészre kerüljenek. - route add 224.0.0.0 netmask 240.0.0.0 dev eth0 - Ez egy nem magától értetődő parancs, amely azt állítja be, hogy az összes D osztályú (multicast) IP útvonal az ,,eth0''-on menjen keresztül. Normális esetben ez egy multicasting kernel helyes beállítása. - route add 10.0.0.0 netmask 255.0.0.0 reject - Ez egy eltorlaszoló (rejecting) útvonalat installál a ,,10.x.x.x.'' privát hálózat számára.
208.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
A Linux mint Internetes kiszolgáló Az Apache webszerver Az apache-t valószínűleg sokaknak nem kell bemutatnom. Gyors, biztonsagos, fejleszthető, és a forráskódja is szép. Mivel szabadon használható, minden Linux disztribúcióba belkerült, igy elég könnyen beszerezhető. A platform támogatottsága elég jó, fut akar Win32-n is, bár ezen a platformon nem képes a Linuxon megszokott biztonságot és stabilitást biztosítani. Veszélyes vetélytársai nincsenek, a webszerverek több mint 60 százalékát működtetik apache-al. Erőforrásigényei szolidak. A legfrissebb forráskódok mindig letölthetőak az apache project homepage-éről: http://www.apache.org/ Az apache valóban kivállóan megírt szoftver. az alapfunkcionalitást megvalósító core modul köré sok apró feladatot megvalósító modul épül. Ilyen modul valósítja meg például az http azonosítást is, de például a biztonságos HTTPS protokolt is. A modulok befordíthatóak az apache bináros kódjába statikusan is, de egy modul (mod_so) segítségével dinamikusan is betölthetőek. Így egy könnyen bővíthető, egyszerűen konfigurálható webszervert kapunk. A standard apache is nagyon sok modult tartalmaz, de fordíthatsz vagy építhetsz hozzá magad is. Fordítsuk le a már megszerzett Apache servert. Tudni kell, hogy ez a verzió az optional modules elgondolást támogatja. Mindamellett, hogy a servernek tudnia kell, hogy mely modulok vannak bele fordítva; azért, hogy ezek a modulok eredményesen működjenek létre kell hozni egy rövidke kis kódot (modules.c) ami egyszerűen felsorolja őket. Abban az esetben ha elégedett vagy az alap module set-tel, és ezt akarjuk használni akkor elég csak a már meglevő alap Makefile-t áteditálni és elindítani a fordítást. Ha ez nem felel meg és szeretnénk opcionális modulokat használni akkor futtatni kell a konfigurációs scriptet. Ez a következő dolgokat igényli: - Át kell szerkeszteni a 'Configuration' file-t. Ez tartalmazza a gépenkénti beállításait a Makefile-nak. Ezenkívül a file végén egy plusz részt amiben leírjuk a befordítandó modulok nevét és az őket tartalmazó file-ok neveit. A következőket kell tenni: - Ki kell valasztani egy compiler-t , és compiler opciókat amelyek megfelelnek a sajá gépünknek. - Majd ki kell venni a megjegyzésből azokat az opcionális modulokat amiket szeretnénk bele foglalni, vagy új sorban odaírni azokat a modulokat amelyeket mi írtunk. - Futtassuk a 'Configure' scriptet Ez generál nekünk egy új verziót a Makefileról és a modules.c-ről. - Pötyögjük be : 'make'
209.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Konfigurálás A fordítás után van egy 'httpd' nevezetű bináris állományunk a src/ direktory-ban. Ez lesz maga az Apache server bináris formában. A következő lépés a server konfigurációs file-jait megszerkeszteni. A 'conf' nevű aldirectory-ban találjuk a disztribúcós változat három kofigurációs file-ját : srm.confdist, access.conf-dist, httpd.conf-dist. Másoljuk át ezeket a file-okat a következő fileokba: srm.conf, access.conf, httpd.conf. Konfigurációs file-ok A server három file-ból olvassa ki a konfigurációs utasításokat. A file-ok nevét a ServerRoot utasítással lehet beállítani, vagy a -d parancssori flaggel. Konvenció szerint a file-ok: conf/httpd.conf Utasításokat tartalmaz amelyek irányítják a server démon működését. A file neve felülírható a -f parancssori opcóval. Ebben sorrendben a következő dolgokat kell beállítani: - SeverType : - inetd: kevésbé használt, nagyon leterheli a rendszert, viszont biztonsági megfontolásokból vannak akik ezt preferálják - standalone : sokkal hatékonyabb mód, - Port: Ezt a portot fogja figyelni a daemon. Ha a száma < 1023 akkor a servert a root userid-je alatt kell elindítani. - HostNameLookUps: Ha be van kapcsolva akkor bejegyzi a kliensek nevét vagy IP számát. - User: Ennek a usernek a nevében fog a server a kérésekre válaszolni. Lehet egy username, vagy #-al egy userid. Szoktak egy új usert létrehozni erre a célra , sok esetben nobody néven. - Group: Ennek a csoportnak a jogosultságai lesznek érvényesek a kiszolgálódémonra. - ServerAdmin: A serveradmin e-mail címe - ServerRoot: A directory ahol a server config és log file-jai találhatóak. Gyakorlatilag az a directory ahol a server "él". Itt található a conf/ és a /log dir-k - BindAddress: A virtuális host-ok használata esetén az itt felsorolt IP címek alatt figyeli a serverhez irányuló kéréseket. Lehet egy számmal, vagy egy névvel megadni. - ErrorLog: Ide jegyzi be az esetleges hibákat. - TransferLog: A transfer-rel kapcsolatos bejegyzásek - LogFormat string: Lehetőséget ad , hogy átformázzuk a log file szerkezetét. A mod_log_config.c modul tartalmazza, és nem fordítódik defaultnak. - %h : Remote host - %l : Remote logname - %u : remote user - %t : Time, - %s : Státusz. - %b : Ennyi byte-ot küldött 210.
Barhács OktatóKözpont
-
-
-
Linux rendszergazdai modul - 9. fejezet
PidFile: A server id ejegyzi be a daemon pid-jét. ScoreBoardFile: Ide jegyzi be a server a belső process információkat. ServerName: Itt lehet beállítani a server hostname-jét. Ez elsősorban URL átirányításoknál és virtuális hotsoknál szükséges ill. használható. Timeout: Ennyi secundumot vár a server egy kérésre vagy a nyugtázásra. KeepAlive: Lehetővé teszi a Keep-Alive support megvalósításását. A HTTP KeepAlive kiterjesztése lehetővé teszi állandó kapcsolat fenntartását. (persistent) connection. Ez lehetővé teszi , hogy hosszú ideig élő HTTP sessionok alkalmával egyszerre több kérést is kiszolgáljunk ugyanazon a TCP kapcsolaton keresztül. Ez sok esetben akár 50%-os sebességnövekedést is jelent olyan HTML doksik esetén amelyek tele vannak képekkel. Ez adja meg a maximálisan kezelhető kérések számát. KeepAliveTimeout: ennyi sec-t vár egy subsequent request beérkezésére. Ha egyszer beérkezett a kérés akkor a Timeout lép életbe. MaxSpareServers: Maximum ennyi tétlen(idle) child server process lehet. Az idle process az amely nem kezel kéréseket. Ha t;obb van akkor a parent process megöli a felesleges processeket. MinSpareServers: Ugyanaz mint a fenti csak ez minimumban. Ha nincs meg a minimum akkor a parent elkezd kreálni processeket. Soha nem jó ha túl nagy ez a paraméter. StartServers: Induláskor ennyi child server process kreálódik. MaxClients: Egyszerre ennyi request-et tud kezelni, és maximum ennyi child servrer process kreálható. MaxRequestPerChild: Egy child server process maximum ennyi darab kérést tud egyszerre kezelni. Ha ennél több kérés van a child server megszűnik. ProxyRequest: #-ben van, Akkor kell kivenni belőle ha proxy serverként akarjuk működtetni a serverünket. Ahhoz hogy proxyszolgáltatást tudjunk biztosítani az alábbiakat is ki kell venni a megjegyzésből: - CacheRoot - CacheSize 5 - CacheGcInterval 4 - CacheMaxExpire 24 - CacheLastModifiedFactor 0.1 - CacheDefaultExpire 1 - Nocache Listen [IP address:] port number: Lehetővé hogy egynél több porton vagy IP címen figyeljen a server, a default hogy válaszol a kérésekre minden IP címen, de csak a megadott porton. Végül a virtuális hosttal kapcsolatos dolgokat kell beállítani, persze csak ha használjuk ezt a lehetőséget: ServerAdmin [email protected] DocumentRoot ServerName host.foo.com ErrorLog TransferLog
211.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
conf/srm.conf Tartalmazza a leírásokat azokról a dokumentumokról amelyeket a server a clienseknek szolgáltat. Valamint azokat a server beállításokat amleyek a requestek kiszolgálását, a végeredmények formáját meghatározzák A file neve a ResourceConfig paranccsal definiálható át. - DocumentRoot: Az a directory ahonnan a httpd szolgáltatja a file-okat. - UserDir: A user-ek home directory-ja. Ezt fogják hozzáfűzni a ha egy ~user request érkezik. - Directory_index: File vagy file-ok nevei amelyek előre megírt HTML dokumentumokat tartalmaznak. Ha több ilyen van akkor space-szel kell őket elválasztva felsorolni - FancyIndexing: A könytárlistázásnál ikonokat használ a fájlok azonosítására. - AddIconByEncoding, AddiconByType, AddIcon: Ezek a direktívák állítják be, hogy milyen icon jelenjen meg egy file mellett. Az mindhárom esetben az icon vagy egy relativ URL az iconhoz, vagy (alttext,url). Az alttext egy betűszó a nem grafikus browserekhez. Például : AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIcon /icons/binary.gif .bin .exe DefaultIcon /icons/unknown.gif (Azokhoz a file-okhoz amelyekhez nincs explicit icon definiálva.)
-
AddDescription: Egy rövidke lis megjegyzést fűzhetünk minden server által generált file-hoz, amelynek a neve egyezik a file-névvel, ami lehet egy kiterjesztés is. ReadmeName, HeaderName: Az adott directory-ban az index lista végére ill. elejére teszi be a filename.html-t, vagy ha ilyet nem talál akkor a filename-t keresi mint text file-t. IndexIgnore: Az itt felsorolt file-ok nem lesznek megjelenítva ha kilistázunk egy directory-t. A file lehet egy név, egy részleges név , egy wildcard karakteres név. A lista defaultként tartalmazza a '.' Például : IndexIgnore README .htaccess *~
-
AccessFileName: Annak a file-nak a neve amelyet minden directory-ban az access control konfigurációt tartalmazza. Abban az esetben nem olvassa csak el ha : Alloverride None
-
-
DefaultType: Azt adja meg, hogy ha egy file-nak nincs meghatározható tipusa a MIME mapping alapján akkor ezt veszi defaultnak. Például: van egy aldir. images/ és abban .gi file-ok , akkor DefalutType images/gif azt eredményezi , hogy ha egy file-nak ebben az aldir-ban nincs meg a .gif kiterjesztése akkor automatikusan annak veszi a server. AddEncodig: Azt eredményezi, hogy a felsorolt extensionnal rendelkező file-ok a mime-encodingnak megfelelően lesznek azonosítva. Mire jó ez? Arra, hogy egyes browserek menetközben tudnak kitömöríteni ez alapján. AddLanguage: támogatott nyelvek felsorolása. LanguagePriority: Ez egy precedenciát ad meg hogy milyen sorrendben oldja fel a kötéseket. ReDirect: Megmondja a client-nek , hogy próbálkozzon a dokumentum elérésével az új URL címen. 212.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 9. fejezet
Alias: Lehetővé teszi , hogy a local filesystemben is tartsunk dokumentumokat, ne csak a DocumentRoot alatt. ScriptAliases: Ugyanaz a viselkedése mint az Alias-nak csak ez scriptekre érvényes. AddType: Egy új mime tipus hozható így létre. AddHandler: Azt eredményezi, hogy az adott extension-nal rendelkező file-okat a handler-name handler fogja kezelni Action: Ha egy kérés érkezik a mime-type tipusú file-ra, akkor a cgi-scriptet aktivizáljuk. MetaDir, Metasuffix: A CERN HTTPD meta file szemantikát emulálja. A MetaDir azt a directory-t adja meg amelyben a meta információk file-jai vannak. Ez általában egy 'rejtett' subdirectory. A neve '.' -al kezdődik. A MetaSuffix azt a file név kiterjesztést adja meg amelyben a meta információk tárolódnak. ErrorDocument: Lehetőség van arra , hogy egy adott hiba esetén a mi általunk definiált hibaüzenet jelenjen meg. Háromféle hibakezelés lehetséges ezzel a módszerrel: plain text : Ekkor egy előre meghatározott hibaüzenet jelenik meg. lokális átirányítás : pl : ErrorDocument 404 /missing.html Ekkor a helyi /missing.html fog betöltődni külső átirányítás: pl. ErrorDocument 402 http://other.server.com/subscription_info.html
conf/access.conf A dokumentumok elérését szabályozó utasításokat tarttalmaz.Ez a file azokat a server beállításokat tartalmazza amelyek szabályozzák, hogy mely szolgáltatásokat milyen körülmények között érhetünk el. A file neve az AccessConfig utasítással értelmezhető át. Itt lehet megadni, hogy mely directory-kat akarunk password-el védeni , melyeket teszünk nem hozzáférhetővé. -
-
...: Arra szolgál , hogy egységbe zárja azokat a direktívákat amalyek az adott directory-ra ill. az összes aldirectorykra érvényesek. Elsősorban az access.conf file-ban jelenhet meg, de persze a többi config file-ban is felhasználható. Nem lóghat át ill. nem jelenhet meg a szekcióban. ... : A felsorolt access method-okra a közbezárt elérési direktívák lesznek érvényesek. Például: require valid-user
-
... : Access control-t tesz lehetővé az adott URL-nek. A URL path formátuma /directory/ legyen. A section után kell következnie. Példa: SetHandler server-status order deny,allow deny from all allow from .foo.com
213.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 9. fejezet
Options: Szabályozza , hogy mely extra szolgáltatások érhetőek el az adott Directory-ban. Példa: Options Indexes FollowSymlinks
-
Azt eredményezi, hogy ha nincs index.html az [documentroot]-ban akkor ad egy directory listát és követi a szimbólikus linkeket az adott directory-ban. AllowOverride: Ha a server talál egy .htaccess file-t az adott dir-ban akkor tudnia kell, hogy az ott felsorolt utasítások felülbírálhatják-e a már előzőleg tett beállïtásokat. Ha az override None akkor a server nem olvassa el a .htaccess-t. Példa: Options Indexes FollowSymlinks AllowOverride None .
-
-
allow from host: Csak azok a host-ok érhetik el az adott direktory-t amelyek a fel vannak sorolva a host-ok között. Tipikusan a szekcióban használandó. A host lehet : - all: Ekkor minden host kap access-t - Egy (részleges) domain-name: Az a host, vagy hostok kapnak access melyeknek a neve vagy a nevének a domain része egyezik. - Egy IP cím: Az adott IP címmel rendelkező host kap accesst. - Egy részleges IP cím: Az IP cím 1-től 3 byte-ig terjedő része, subnetting esetén. deny from host: Azt sorolja fel , hogy mely hostok nem kaphatnak access jogot az adott directory-ra. Hasonlóan az előzőhöz ez is a szekcióban használandó. A host az előzőben leírt szerint értendő. order: Ez határozza meg, hogy az allow és deny direktívák hogyan, milyen sorrendben értékelődjenek ki. Példa : Options Indexes FollowSymlinks AllowOverride None order allow, deny
-
Vagyis az allow direktíva a deny előtt értékelődik ki. mutual-failure: Csak azok a hostok kapnak elérési jogot az adott direktory-ra amelyek szrepelnek az allow listában és nem szerepelnek a deny listában require: Ez állítja be, hogy mely userek érhetnek el egy dir-t. Egy példa ennek prezentálására: AuthType Basic AuthName somedomain AuthUserFile /web/users AuthGroupFile /web/groups Limit require group admin
-
AuthName:Az autentikáció elnevezése. AuthType: Ez adja meg , hogy a user azonosítás mely tipusát használjuk egy adott dir-ra. Jelenleg még csak a Basic működik. AuthUserFile: Ez a file tattalmazza a userek neveit és a hoozzájuk tartozó password-t. Nagy file esetén az AuthDBMUserFile gyorsabb lesz. Egy sor tartalmazza a user nevét majd kettőspont után a crypt()-tel titkosított password következik.
214.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
conf/mime.types Tartalmazza a default mime tipusokat. Ezt a file-t szerkeszteni nem igazán ajánlott, helyette inkább az AddType direktíva használandó új mime tipusok hozzáadására. Log file-ok pid file A démon indulásakor elmenti a szülő httpd process id -t a logs/httpd.pid file-ba. Ez a file név át definiálható a PidFile utasítással. A process id -t az adminisztrátor használja újraindítani és lelőni a daemon-t. Error log A server ide írja be az hibaüzeneteit, a neve logs/error_log. A file neve átállítható az ErrorLog utasítással. A különböző virtual host-oknak különböző error log-ok állíthatók be. Transfer log A server bejegyez minden request-et egy transfer file-ba. A neve: logs/access_log. A file neve a TransferLog utasítással értelmezhető át. A virtuákis host-okra itt is érvényes, hogy különböző transfer bejegyzések állíthatók be. Elindítás A httpd elindulhat vagy mint Internet démon, vagy mint egy egyszerű démon. A kettő közötti külömbség, hogy Internet démonként minden híváskor betöltődik a memóriába, ezzel igencsak lelassítva a rendszert. Ezért szokták ezt ritkán alkalmazni. Vagy pedig a másik lehetőség a standalone mód. Bármelyiket is választjuk a Servertype directivában kell megmondanunk, hogy a server melyik módban fusson. Parancssori opciók - d serverroot: Beállítja a kezdő értékét a ServRoot változónak serverrot-ra. Ez felülírható a ServerRoot parancssal a konfigurációs file-ban. Alapértelmezésben ez /usr/local/etc/httpd. Ez az a directory amelyben a server 'él'. - f config: Induláskor végrahajtaja a config file-ban levő utasításokat. Ha a config nem a / jellel kezdődik akkor az elérési útja a ServerRoot-hoz relatívan van megadva. A alapértelmezése conf/httpd.conf. - X: Single-process módban fut, belső debugging céljából. A daemon nem érhető el terminálról és nem fork-ol gyerekprocesszeket. Ne használjuk ezt az opciót ha közönséges web szolgáltatást akarunk nyújtani. - v: Kiírja a httpd verzióját majd kilép. - ?: Kiírja a httpd opcióinak listáját majd exitál.
215.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Virtuális hostok Mi az virtuális host? Képessé tesz agy egyedülálló gépet arra , hogy töbszörös domainnel rendelkező web server legyen. Példának okáért itt van egy internet szolgáltató amely több vállalatnak ad szolgáltatást. Ennek a szolgáltatónak legyen mondjuk www.serve.com nevezetű gépe. És a vállalatok szeretnék ha úgy jelennének meg a web-en mint: - http://www.smallco.com/ - http://www.baygroup.com/ Anélkül persze , hogy saját szervereket állítanának fel. Erre ad lehetőséget a virtual host. Az egyedüli feltétele ennek , hogy a web servernek rendelkezni kell minden egyes virtual host számára külön IP címmel. Ez könnyen megoldható ha van a servernek fizikai net kapcsolata minden virtual hostnak, vagy pedig egyes oprendszereknél virtual interface. Még akkor lehet hasznos a virtuális host , ha egy servert több néven akarunk elérni. Peldául ha a server.com gépet ftp.server.com néven is szeretnénk elérni akkor ez lehetséges, módja a ServerAlias direktíva. Pl : ServerAlias apache.org *.apache.org
A * bármilyen textet , a ? egy betűt helyettesít. Lehet single démon , vagy multiple démon konfigurációban futtatni a server démont. Mindegyiknek van előnye is , hátránya is. - Multiple demon: A különböző virtuális hostok különböző beállításokat igényelnek.( ServerType, User,Group, TypesConfig, Resourceconfig). Eléggé lelassítja a rendszert. Egy külön httpd installációt kell meinden egyes virtuális hostnak készíteni. A BindAddress fogja beállítani minden serverre, hogy mely IP címet figyelje. - Single demon: Megosztja a konfigurációt a virtuális hostok között. Viszont a gépünk igen nagy számú kérést tud kiszolgálni gyorsan. Ekkor egyetlen httpd fog kiszolgálni minden kérést az összes virtuális hoston. A szolgál arra hogy beállítsuk a konfig file-ban minden egyes host-ra a ServerAdmin, ServerName, DocumentRoot, TransferLog, ErrorLog direktívákat. Példa: ServerAdmin [email protected] DocumentRoot /groups/smallco/www ServerName www.smallco.com ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log ServerAdmin [email protected] DocumentRoot /groups/baygroup/www ServerName www.baygroup.org ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log
216.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Squid, a proxyszerver A Squid az 1996-ban lezáródott Harvest projekt keretében elkészült szoftver proxy cache részén alapul. A kód az elmúlt időszakban sokat változott, a kérések feldolgozásának alapja azonban ugyanaz maradt: egyetlen, blokkolásmentes, I/O alapon vezérelt processz végzi el a feladatok nagy részét. A szoftver fejlesztését Duane Wessels fogja össze, és -mivel nyílt forráskódú szoftverről van szó- a kód javításában, fejlesztésében sok önkéntes is részt vesz. Külön megemlítendő, hogy a kód több olyan kísérleti részt is tartalmaz, amely a jelenleg még kiforratlan technológiáknak próbál táptalajt biztosítani. A Squid az egyedüli a nyílt forráskódú proxy cache termékek között, amely gazdag funkcionalitása révén- rendkívül sokrétűen használható, konfigurálható, legtöbb operációs rendszeren futtatható, legjobb teljesítményt nyújtja. Nem elhanyagolható szempont, hogy a felhasználók részére létrehozott levelezési listán rövid időn belül hathatós választ kapunk jól megfogalmazott kérdéseinkre. A web gyorsítókról általában A motiváció A web gyorsítók szükségességét a HTTP protokoll egyik alapvető problémája indokolja, mégpedig a skálázhatóság hiánya. A HTTP is az egyszerű kliens-szerver architektúrára épít, a skálázhatóságra a protokoll első verziói nem is helyeztek megfelelően nagy hangsúlyt. A web népszerűségével, használatának terjedésével a gerinchálózatok terhelése rohamosan megnőtt: a web megjelenése előtt nem volt olyan információs rendszer, amely a szövegestől eltérő adattípusokra ilyen jelentős mértékben épített volna. A HTML nyelv fejlesztésének, kifinomultabbá válásának köszönhetően az egy-egy oldalon található információk byte-ban mért mennyisége is folyamatosan nő. A web gyorsító a HTTP kommunikációs láncban a kliens -pl. web böngésző- illetve a web szerver között helyezkedik el. Amennyiben a böngésző által kért objektum (értsd: URL-lel egyedileg azonosítható entitás, pl. egy web lapon az adott cég logoja) megtalálható a gyorsító helyi tárolójában, és az megfelel a frissességi kritériumoknak, akkor a kliens az objektumot a gyorsítótárból (cache-ből) fogja megkapni. Ellenkező esetben a gyorsító az adott objektumot közvetlenül letölti a forrás szervertől, vagy érvényesíti a nála lévő objektumot a forrás szervernél, ill. hierarchiába szervezett gyorsító esetén a hierarchia tagjaitól is kezdeményezheti az objektum letöltését.
217.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Gyorsító típusok A HTTP kommunikációs láncban betöltött helyének megfelelően többfajta gyorsítótárat különböztetünk meg: - böngésző oldali gyorsítótár (browser cache): csak az adott felhasználó által látogatott, cacheelhető objektumokat tartalmazza. - proxy cache (ezt fordítottam web gyorsítónak): több felhasználó/kliens által használt közös gyorsítótár. Találati arány Egy web gyorsító jellemzésekor az egyik legfontosabb paraméter a találati arány, amelyből két típust különböztetünk meg: - dokumentum találati arány (document hit rate): a gyorsítótárból kiszolgált és az összes lekérdezett objektum aránya. - byte találati arány (byte hit rate): a gyorsítótárból kiszolgált objektumok mérete az összes lekérdezett objektum méretéhez képest. Dokumentum találati arány esetén a 40-50% közötti érték, byte találati arány esetén pedig a 30-40% közötti érték kifejezetten jónak mondható. Transzparens cache-elés Transzparens módban működik a web gyorsítótár, ha (a proxy autentikáció kivételével) meghatározott web forgalmat automatikusan a gyorsítótár fogja kiszolgálni függetlenül attól, hogy ezt a kliens kérte vagy sem. Transzparens cacheelés esetén tehát a cache (vagy az azt futtató rendszer, vagy akár egy másik eszköz) a web-es kéréseket a gyorsítótár felé írányítják, és azok automatikusan a cache által kerülnek kiszolgálásra. Ez esetben tehát a böngészőn semmit sem kell beállítani a cache használatához. Gyorsítótár implementációk Web gyorsítótárként meghatározott operációs rendszereken futó szoftvert (pl. Squid, NetCache, Netscape Proxy Server, Inktomi Traffic Server), vagy akár célhardware-t is használhatunk (pl. NetApp, Novell ICS, Cisco Cache Engine, DynaCache). A Squid A Squid egyszerűen és könnyen lefordítható a legtöbb UNIX-os operációs rendszeren, így Linux-on is. Linux-on még az az előnye is megvan az átlagos felhasználónak, hogy a fordítással nem kell bajlódnia, kivéve ha speciális igényei vannak a szoftverrel szemben.
218.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Az előre csomagolt Squid A szoftvert nem túl egyszerű csomagolni bármely Linux disztribúcióról is legyen szó, mivel a csomag készítésekor csak az általában használt lehetőségeket fordítják bele a bináris változatba és a Squid-nek több olyan fordítási opciója van, amelyre adott esetben szükségünk lehet. Így ha valamilyen kétségünk van, legegyszerűbb a szoftver forrását letölteni egy közeli tükörszerverről és igényeinknek megfelelően lefordítani, majd pedig telepíteni. Linux specifikus jótanácsok: 'noatime' mount opció: A Squid által tárolt objektumokat érdemes külön partíció(k)ra tenni. Így lehetőség nyílik arra, hogy az adott partícióra beállítsuk a 'noatime' mount opciót, amelynek révén a Squid által generált rengeteg írási műveletet csökkenthetjük le: az opció beállításakor ugyanis az adott partíción olvasott file-ok access time értékét nem frissíti az operációs rendszer. Állományleírók processzenkénti maximális száma: A szoftver a kliens- és a szerveroldali kommunikációt, ill. a file-rendszeren történő műveleteket állományleírók (file descriptor) segítségével végzi. Forgalmas cache szerver esetén a Linux által alapértelmezésben felkínált 256 állományleíró kevés lehet. Ennek növelését 2.2.x-es kernel esetén a '/proc/sys/fs/file-max'-ba írt 256-nál nagyobb értékkel érhetjük el. Ahhoz, hogy a változást az auto-konfiguráló is érzékelje, szükséges még a '/usr/include/linux/limits.h'-ban az OPEN_MAX értékét is ugyanerre beállítani. Átirányítás 'ipchains' segítségével: Forgalomátirányításra transzparens mód használata esetén van szükségünk. Ha a szerver router funkciókat is ellát, akkor a legegyszerűbb a standard HTTP portra (80as TCP port) irányuló forgalmat a Squid-hez átirányítani, például: # a loopback interfészen mindent elfogadunk /sbin/ipchains -A input -j ACCEPT -i lo # a saját IP címre irányuló web-es forgalmat elfogadjuk # a hurkok elkerülése végett /sbin/ipchains -A input -j ACCEPT -p tcp -d 80 # az összes egyéb 80-as portra irányuló forgalmat átirányítjuk a Squid-hez /sbin/ipchains -A input -j REDIRECT 80 -p tcp -s 0/0 -d 0/0 80
A forgalomátirányítás tökéletes működéséhez természetesen a megfelelően konfigurált kernelt kell futtatnunk ('IP: firewalling', 'IP: always defragment', 'IP: transparent proxy support' kernel konfigurálási opciók).
219.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Forgalom blokkolás 'ipchains'-szel A cache használatának kikényszerítését a web-es forgalom blokkolásával is elérhetjük. A külső web kiszolgálókat csak a cache szerverünk láthatja. Például: # a cache-től származó forgalmat minden további nélkül átengedjük /sbin/ipchains -A input -j ACCEPT -p tcp -s # az összes egyéb 80-as TCP portra irányuló forgalmat gátoljuk /sbin/ipchains -A input -j REJECT -p tcp -d 0/0 80
Konfigurálási példák A konfigurálási problémákat három különböző példán keresztül szeretném megvilágítani. A konfiguráláshoz a szoftver 2.2STABLE4-es változatát vettem alapul. Ha elkészítettük a végleges konfigurációs file-t, akkor érdemes a magyarázószövegeket kivágni az egyébként is terjedelmes állományból, hiszen az eredeti 'squid.conf.default' tartalmazni fogja mindig az aktuális, magyarázó szövegekkel ellátott konfigurációt. Alapkonfiguráció Alapkonfigurációként vegyünk egy önálló (nem hierarchiába kapcsolt) Squid szervert, amely egy hálózati interfésszel (és egy IP címmel) rendelkezik. A gép fizikai memóriája 64 MB RAM, cache-elésre 30 MB RAM-ot, ill. az objektumok tárolására 1 GB diszkterületet lehet használni. A cache-hez való hozzáférés jogosultságának ellen orzését a kliens IP címe alapján végezzük. A gépen futó Squid monitorozását SNMPv1 segítségével a lokális gépen végezzük. Továbbá a Squid által generált hibaüzeneteket szeretnénk magyar nyelven látni. Ha saját magunk készítjük el a bináris kódot, akkor az auto-konfiguráló szkriptet a következő paraméterekkel hívjuk meg: '-enable-snmp -enable-err-language-Hungarian'. A következő paramétereket érdemes beállítani (ami alapértelmezésben adott, azt nem érdemes módosítani, ill. nem is szükséges a konfigurációs file-ba belefoglalni): # A 'cgi-bin', ill. '?' karaktereket tartalmazó URL-eken található # objektumokat nem cache-eljük acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY # a kiszolgálás alatt lévő kérések, a 'negatívan' cache-elt kérések (hibás # kérések), ill. a leggyakrabban lekérdezett objektumok számára # fenntartott hely. Ökölszabály: osszd el a Squid számára fenntartott # memóriarészt 3-mal. cache_mem 10 MB # lehetőleg a Squid objektumait külön partícióra tegyük (pl. /var/cache) cache_dir /var/cache 1024 16 256 # hozzáférés konfiguráció acl mycustomer src 192.168.0.0/255.255.0.0 http_access allow mycustomer http_access deny all icp_access allow mycustomer icp_access deny all # Squid-et futtató felhasználó (könyvtár jogosultságokra figyelni!) cache_effective_user nobody cache_effective_group nobody # SNMP hozzáférés beállítása snmp_access allow public localhost snmp_access deny all
220.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
A többi beállítás változtatása az első nekifutásra teljesen felesleges. Ha már otthonosan érezzük magunkat a szoftver konfigurálásában, csak akkor veselkedjünk neki a többi opciónak is. Alapkonfiguráció és böngészők automatikus konfigurálása Ebben az esetben valójában nem a Squid-et, hanem a böngészők konfigurálását elvégző PAC szkriptet (Proxy Automatic Configuration) kell elkészíteni, majd a szkriptet egy megfelelő web kiszolgálóra kell telepíteni, amely ezt az állományt 'application/xns-proxy-autoconfig' típusként jelöli meg az állomány letöltésekor. Az automatikus konfigurációnak két lényeges előnye van a böngészők manuális konfigurálásával szemben: - Ha változik a konfiguráció, akkor azt csak egy helyen kell megváltoztatni, és a böngészők a következő indításkor már az új konfigurációval fognak működni. - A konfigurációs szkriptet meg lehet úgy írni, hogy a cache elérhetetlensége esetén (pl. karbantartás idején) a böngésző közvetlenül próbálja meg elérni a web-es információkat, míg manuális konfiguráció esetén ez megoldhatatlan probléma. Továbbá egy jól megírt PAC szkripttel a cache-ünket is tehermentesíthetjük a felesleges forgalomtól. Egy egyszerű PAC szkript a következőképpen néz ki: function FindProxyForURL(url, host) {//ha nincs teljes szervernév megadva, vagy pedig a saját régiónkban //(mydomain.hu) lévő szervert kérdezünk le, // akkor közvetlen a hozzáférés if //(isPlainHostName(host) || dnsDomainIs(host, "mydomain.hu") || return "DIRECT"; //ha a kiszolgálónév nem feloldható DNS oldalról, akkor is közvetlenül próbálkozunk. //Ennek két oka van: //- egyrészt a cache-t nem terheljük egyébként sem feloldható nevekkel //- másrészt a felhasználó a saját böngészője hibaüzenetét látja, így még csak //véletlenül sem hibáztatják a cache üzemeltetőjét //Optimális működés esetén persze a böngészők is ugyanazt a DNS szervert //használják, mint a cache (így a cache munkáját is megkönnyítik, hiszen mire a //kérés oda eljut, a helyi DNS szerver már tartalmazza a kívánt információkat). if (!isResolvable(host)) return "DIRECT"; //ha az URL tartalmaz kerdőjelet, akkor is közvetlenül próbálkozunk, hiszen az ilyen //típusú kérések általában nem is cache-elhetők if (url.indexOf("?") != -1) return "DIRECT"; //csak akkor használunk cache-t, ha HTTP, FTP vagy Gopher protokollokról van szó, //hiszen csak ezeket képes cache-elni a Squid (a cache.mydomain.hu helyére //természetesen a saját cache-ünk nevét kell beírni) if (url.substring(0, 5) == "http:" || url.substring(0, 4) == "ftp:"|| url.substring(0, 7) == "gopher:") return "PROXY cache.mydomain.hu:3128; DIRECT"; }
221.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Apache web szerver esetén a típus beállítást a következőképpen tehetjük meg, feltéve, hogy a PAC szkriptet ".pac" kiterjesztéssel helyezzük el a Web szerver könyvtárstruktúrájában: AddType application/x-ns-proxy-autoconfig .pac
Alapkonfiguráció + Transzparens konfigurálás Amennyiben cache-ünket transzparens módban szeretnénk futtatni, akkor az alapkonfigurációhoz a következő beállításokat érdemes hozzátenni: httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
Természetesen előzőleg a kernelt megfelelően kell konfigurálni, és a Squid-hez való átirányítást végző ipchains szabályokat is érvényre kell juttatni. Elérhetőségek korlátozása Nagyon fontos része a proxy programnak az elérhetőségének korlátozása. A Squid nagyon kellemesen konfigurálható ebből a szempontból, mivel nem csak a tiltást illetve engedélyezést lehet célként megadni, hanem akár a sávszélességet korlátok közé is lehet szorítani. Nagyon sok paraméter alapján lehet szűrést végezni. Ezeket az "acl" kulcsszó (Access Control List) vezeti be. Ezeket követi az adott lista általunk megadott neve, majd az acl típusa: src - Forrás IP címe, például: -
acl sajat01 src 10.1.1.1/30 acl sajat02 src 10.1.1.6-10.1.1.15/32
dst - Cél IP címe, például: -
acl sajat03 dst 192.168.1.5/32 acl sajat04 dst 192.168.1.5-192.168.2.34/32
srcdomain - Forrás neve, például: -
acl sajat05 srcdomain valahol.hu
dstdomain - Cél neve, például: -
acl sajat06 dstdomain valahol.hu
srcdom_regex - A forrás nevére illesztett regexp eredménye, például: -
acl sajat07 srcdom_regex user.*valahol\.hu
dstdom_regex - A cél nevére illesztett regexp eredménye, például: -
acl sajat08 dstdom_regex sex
time - Idő, például: -
acl sajat09 time M 10:00-12:00
222.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
url_regex - A kért URL szövegére illesztett regexp eredménye, például: -
acl sajat10 url_regex ^ftp.*porn
urlpath_regex - A kért URL út szövegére illesztett regexp eredménye, például: -
acl sajat11 urlpath_regex \.mpg$
port - A megadott portok, például: -
acl sajat12 port 3128 8080 acl sajat13 port 1024-2048
proto - A megadott protokollok, például: -
acl sajat14 proto HTTP
method - A megadott metódusok, például: -
acl sajat15 method POST
browser - A használt böngésző azonosító szövegére illesztett regexp eredménye, például: -
acl sajat16 browser MSIE
maxconn - Egyidejüleg engedélyezett kérések száma, például: -
acl sajat17 maxconn 5
A fenti acl listák elkészítése után még nincs elvégezve a munka, a "http_access" direktívával kell beállítani, hogy mely acl számára engedélyezzük, vagy tiltjuk a proxy elérhetőségét. Például: -
http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access
allow sajat01 deny sajat02 allow sajat03 deny sajat04 allow sajat05 deny sajat06 allow sajat07 deny sajat08 allow sajat09 deny sajat10 allow sajat11 deny sajat12 deny sajat13 allow sajat14 deny sajat15 deny sajat16 deny sajat17 deny all
Ehhez a listához kell még egy acl all src 0.0.0.0/0.0.0.0
sor az acl listánál. Amikor a Squid kap egy kérést, akkor végigszalad a listán és ha az adott sor acl szabálya igaz, akkor "allow" esetén engedélyezi, ha "deny" akkor tiltja a kapcsolatot. Ha nincs illeszkedés a listában, akkor az utolsó sor a döntő: jelen esetben tiltva van a kapcsolat.
223.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 9. fejezet
Nézzük sorról-sorra: Az első sor engedélyezi a 10.1.1.1/30 forráscímről érkező kéréseket. A második sor tilja a 10.1.1.6 IP címtől a 10.1.1.15 IP címig tartó tartományból érkező kéréseket. A harmadik sor engedélezi a 192.168.1.5 IP címre irányuló kéréseket. A negyedik sor tiltja a 192.168.1.5 IP címtől a 192.168.2.34 IP címig tartó tartomány felé iráyuló kéréseket. Az ötödik sor szerint engedélyezzük a "valahol.hu" címről érkező kéréseket. A hatodik sor szerint tiltjuk azokat a kéréseket, amelyekben a domain egyenlő a "valahol.hu" címmel. A hetedik sor alapján azokat a kéréseket engedélyezzük, amelyek az forráscímére illesztett "user.*valahol\.hu" regexp igaz. Ilyen például az "user123.info.valahol.hu" cím is. A nyolcadik sor szerint tiltjuk azokat a célcímeket, amelyek domain nevében szerepel a "sex" karakterlánc. A kilencedik sor szerint engedélyezzük azokat a kapcsolatokat, amelyek hétfőn 10 és 12 óra között kezdődnek. A tizedik sor szerint tiltjuk azokat a kapcsolatokat, amelyek URL sorának első felében lévő szövegre (a http://www.valahol.hu/index.html esetén a http://www.valahol.hu szövegre) illesztett regexp igaz. Jelen esetben azokat az ftp kapcsolatokat, amelyek domain nevében szerepel a "porn" szó. A tizenegyedik sorban engedélyezzük az összes mpg kiterjesztésű fájl elérését. A tizenkettedik sorban tiltjuk a más proxy szerverek felé induló kapcsolatokat. A tizenharmadik sorban tiltjuk a 1024 és a 2048 port közötti portok elérését. A tizennegyedik sorban engedélyezzük a HTTP protokollt. A tizenötödik sorban tiltjuk a POST metódust. A tizenhatodik sorban tiltjuk azokat a böngészőket amelyek MSIE szöveggel azonosítják magukat. A tizenhetedik sorban tiltjuk azon kapcsolatokat, amelyeknél 5 egyidejű kérésnél többet szeretnének. Azon kérésekre, amelyek nem illeszkednek egyik sorra sem tiltjuk a kapcsolatot.
A http_access direktívával analóg módon használhatjuk az icp_access kulcsszavat is. Érdemes használni a DELAY POOL névvel illetett sávszélesség korlátozó direktívákat. Ezeket használva a http_access sorokon túljutott kérések újabb akadályokkal találkoznak. Ha illeszkednek egy ilyen korlátozásra, akkor a sávszélességből csak adott szeletet használhatnak majd. Alapvetően meg kell határozni a különféle korlátozások számát. delay_pools 3
Ezek után meg kell adni a használt korlátozás osztályát. Amelyek szerint az első korlátozás hármas típusú, a második egyes illetve a harmadik kettes. delay_class 1 3 delay_class 2 1 delay_class 3 2
224.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Ezt követi a korlátozások paraméterezése. Az első paraméter az adott korlátozás száma. A három osztály szerint meg kell különböztetni a három paraméterezést. Az osztályok szerint a következő formátumot kell használni delay_parameter 1 osszes delay_parameter 2 osszes halozati delay_parameter 3 osszes halozati egygep
ahol az "osszes" a teljes forgalom, a "halozati" a 255.255.255.0 hálózati maszkba eső gépek forgalma az "egygep" pedig a 255.255.255.255 hálózati maszkba eső gép forgalma. A fentiek értelmében a második késleltetés egyes típusú, így egy paramétere van, vagyis 1600 Bájt/másodperc sávszélességet enged, és egyszerre maximum 3200 Bájt adatot szed le a kért objektumból. delay_parameter 2 1600/3200
A harmadik késleltetés a kettes típusú, két paramétere van, a teljes forgalom nincs korlátozva, viszont az alhálózat 3200 Bájt/másodpercre van korlátozva és egyszerre maximum 6400 Bájtot tölt le. delay_parameter 3 -1/-1 3200/6400
Az első késleltetés hármas típusú, három paramétere van, az első kettő azonos funkciót lát el, mint az előző, a harmadik egy gép korlátozása, vagyis 512 Bájt jut egy gépre másodpercenként és egyszerre 2048 Bájt terheli a kifelé irányuló vonalat. delay_paramter 1 1600/3200 800/1600 512/2048
Amint megvannak a paraméterezések, következik az engedélyezés. Amelyik kérés túljutott a http_access sorokon (és már-már kezd örülni, hogy hipp-hopp kiszolgálja a kérést ) még a késletetést engedélyező sorokon is túl kell esnie. delay_access delay_access delay_access delay_access delay_access
1 1 2 2 3
allow sajat04 deny all allow sajat11 deny all allow sajat09
A fenti sorok például a sajat04 acl sorba eső kéréseket beleirányítja az első korlátozásba. Minden más kikerüli az első korlátot. A második korlátozásba a sajat11 kerül, vagyis például vállalati szinten maximálisan 1.6 kBájt/mp sebességgel lehet mpg állományokat letölteni. A harmadik korlátozásba akkor jut egy kérés, ha 10 és 12 óra között kapcsolódik.
225.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Squid tuningolás Általában a Squid működéséről annyit kell tudni, hogy alapvetően egy processzor hajtja végre a feladatok nagy részét (így nagy előny nem származik a több processzor használatából, inkább a gyorsabb processzorból), másrészt rendkívül sok diszk I/O-t végrehajtó applikációról van szó. Ha a Squid konfigurációjához hozzá kell nyúlni teljesítménybeli problémák miatt, akkor az esetek túlnyomó többségében diszkproblémákról van szó. A diszk alrendszer A cache-ben tárolt objektumok helyét gondosan meg kell választani, mivel nagy terhelés esetén a diszk alrendszer lassúsága jelentősen tudja befolyásolni a válaszidőt. Továbbá tudnunk kell, hogy általában a Unix-os filerendszerek nem a leg alkalmasabbak cache tárolóhelynek. Alapvetően a következőket érdemes megfontolni: - Tegyük külön partícióra a cache könyvtárat, és használjunk 'noatime' opciót. - Ha lehet, tartsuk alacsonyan a diszk foglaltságát. 99%-ra telített partícióval lassabb sebességeket érhetünk el, mint egy 50%-ra telített diszk esetén. - A filesystem kreálásakor ügyeljünk a blokkméret megválasztására. Mivel a cacheben átlagosan 13-15 kB méretűek a tárolt objektumok, és a tárolt objektumok túlnyomó többsége (>80%) 4 kB-nál kisebb, ezért érdemes a 2048 vagy 4096 byte-os blokkméretet preferálni. - Egy diszk kb. 40-50 művelet/másodpercnél többet nem képes kihozni magából,így nagyobb forgalom esetén több diszkre érdemes szétosztani a forgalmat. Squid esetén több 'cache_dir'-t is megadhatunk, és a partíciók között a beállított terület függvényében osztja szét a forgalmat, tehát nincs szükség RAID0 támogatásra. - A legdrágább megoldást egy RAID kontroller vásárlása jelentheti: ebben az esetben érdemes ügyelni a kontrolleren lévő NVRAM mennyiségére. A nagyobb méretű NVRAM képes gyorsítani az I/O műveletek sebességét, a hirtelen jött forgalomnövekedéseket (burst-öket) képes elsimítani. Másrészt RAID kontroller esetén az operációs rendszer nagyon keveset vár a művelet befejezésére, hiszen az adatokat gyakorlatilag a kontroller NVRAM-jába írja (és ez a művelet meglehetűsen gyors), onnan pedig a kontroller fogja ütemezési mechanizmusának megfelelően a diszkekre írni. - Habár a mostanában megjelenő EIDE drive-ok már meglehetősen fejlettek, több diszk, ill. nagyobb terhelés esetén mindenképpen érdemes magunkat modern SCSI (Ultra Wide vagy SCSI-3) vezérlővel és az ehhez tartozó diszkekkel felszerelni. A cache meglehetősen véletlenszerű forgalmat generál (nem lineáris olvasásokról van szó), sok a konkurrens hozzáférés és ezen a területen az SCSI technológia még mindig jobb teljesítményt nyújt mint az EIDE.
226.
Barhács OktatóKözpont
Linux rendszergazdai modul - 9. fejezet
Memória A cache által használható memória beállítására (cache_mem) érdemes a Squid-nek szánt memóriaterület harmadát megadni. Ugyanis a szoftver bizonyos esetekben (és ez főleg csúcsidőben fordul elő) jóval túllépheti a megadott mértéket (sok a konkurrens kérés, sok memóriát fogyasztanak a folyamatban lévő letöltések), és a legkellemetlenebb az, ha ilyenkor nagymértékben lelassul a szolgáltatás. Éppen ezért könnyen előfordulhat, hogy alacsonyabb 'cache_mem' beállítással sokkal jobb válaszidőket érünk el. Érdemes tudni, hogy a 'cache_mem' által megadottakon kívül a memóriában tárolódik a diszkeken objektumok információja (az URL-ből képzett karakterlánc). Ez kb. 60 byte-ot jelent tárolt objektumonként. Tehát, tegyük fel, hogy van egy 64 MB RAM-mal felvértezett kiszolgálónk és 10 GB-nyi diszkterületet szeretnénk használni az objektumok tárolására, továbbá átlagosan 13 kB méretű egy objektum. Ebben az esetben a diszken maximum: 10*1024*1024/13, kb. 806600 objektumot tárolhatunk. Az objektuminformációk maximum tehát 806600*60 byte-ot, kb. 46.15 MB-ot foglalnak el. Ebben az esetben elég könnyen bekövetkezhet, hogy gépünk meglehetősen hevesen fogja használni a swap területet, és a válaszidő rohamosan csökkenni fog. Általában érdemes figyelni arra, hogy az időegység alatt okozott 'page fault'-ok száma ne legyen nagyobb ugyanazon időszelet alatt beérkező HTTP kérések számánál. Naplózás A naplófile-okat érdemes külön partícióra, diszkre tenni. Semmiképpen sem jó ötlet a naplófile-okat és a tárolt objektumokat ugyanazon a partíción/diszken tartani. A naplózás mértékét csökkenteni lehet, és akár ki is kapcsolhatjuk, ha egyáltalán nincs szükségünk ezekre az adatokra. Továbbá kis mértékben gyorsíthatjuk a naplózást (és csökkenthetjük a diszk terhelését), ha buffereljük a folyamatot (buffered_logs on).
A ProFtpd ftp szerver Sokrétű szolgáltatást nyújtó, finoman konfigurálható FTP szerver. Konfigurációs szintaktikája nagyon hasonlít az Apache-hoz. Futtatható önálló daemonként, vagy inetd-ből. Az inetd-ből futtatás javasolt, ha nem szándékszunk nagy forgalmú FTP szervert üzemelteteni.Tegyük bele az /etc/inetd.conf-ba a következő sort. ftp
stream
tcp
nowait
root
/usr/sbin/proftpd
proftpd
Nyilván lehetőség van a tcpd-n keresztüli aktiválásra is. Az alapértelmezett konfigurációs file: /etc/proftpd. Néhány direktíva: -
ServerName "név": o Default "PROFTPD server [version] " - Kliens kapcsolatnál ezt a nevet írja ki az FTP szerver ServerType standalone/inetd: démonfuttatás típusa. ServerAdmin "e-mail cím": admin email címe. ServerIdent On/Off "szerverazonosító string": "On" esetén a szerverazonosító string jelenik meg. 227.
Barhács OktatóKözpont
-
-
Linux rendszergazdai modul - 9. fejezet
DeferWelcome On/Off: Ha be van kapcsolva, akkor a kliens hitelesítésig nem kap semmilyen információt a rendszerről, csak a hitelesítés után. DefaultRoot könyvtárnév: Alapértelmezett gyökérkönyvtár. Célszerű beállítani a mágikus "~" (home) könyvtárat. Ennek eredménye az lesz, hogy a klienshitelesítés után beállítódik legfelső szintnek a "~", és ettől feljebb nem képes lépni a filerendszerben. RequireValidShell On/Off: Shell nélküli felhasználóknak is FTP lehetősége van Off állapotban. Port 21: A kommunikációs port, ahol az utasítások mennek szerver-kliens között. Vigyázat! Az FTP alapelve miatt az adatok a külön porton (20) mennek. Umask 022: File-könyvtár létrehozásakor ilyen szűrő érvényesül, tehát 755 lesz a jog. User nobody (userid): Az ftp daemon induláskor root jogokat igényel, majd a hitelesítés után a nobody felhasználó nevében fut. Ez átdefiniálható pl. az Anonymous direktívánál. Group nogroup (groupid): Hasonló a User használatához.
Az anonymous FTP szolgáltatáshoz alkalmaznunk () direktíva-párokat. Példa:
kell
az
User ftp Group public UserAlias anonymous ftp //(a kliensek "anonymous"-ként és "ftp"ként is be //tudnak lépni MaxClients 100 //(az anonymous FTP belépések maximális száma) DisplayLogin welcome.msg //(információs üzeneteket tartalmazó file) DenyAll //(anonymous felhasználóknak tiltjuk az írást)
A fenti alapkonfiguráció bőven elegendő az anonymus FTP kérések kiszolgálására, de lehetőség van még finomabb konfigurációra is. Pl. könyvtáranként lehet módosítani a hozzáférési jogokat: utasítások
Akár IP cím, domain név alapján is tudunk korlátozásokat megadni Order Allow,Deny Allowfrom 195.34.189.,.trusted-domain.org Deny from all
228.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A Linux kiszolgáló DNS szerver Mi is az a bind? A bind szerepe a név feloldásban van, azaz ha valaki egy URL-re hivatkozik név alapján akkor annak kellene tudni az IP számát. Ezt az IP szamot a name szerverek tudják. Egy ilyen megvalósítás a bind. Konfigurálás Egy intranet rendszer példája alapján: Konfiguráljunk egy olyan rendszert amikor van egy intranet rendszerünk ami az Internetre kapcsolódik Tehát adva van 2 gép, rendre 192.168.1.1 és 192.168.1.2. Az 1-es gép lesz a központi gép, ezen a gépen telepítettük a bind programot. Ha jól csináltuk akkor lehet megírni a zone file-okat, illetve először a /etc/bind/named.conf file-t editáljuk így: options { directory "/var/cache/bind"; }; logging { category lame-servers { null; }; category cname { null; }; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; };
229.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
zone "sajatnet.hu" { type master; file "/etc/bind/db.sajatnet"; }; zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.168.192"; };
Leegyszerűsítve, ha megfigyeljük, tulajdonképpen csak a végére írtam be két bejegyzést. Két master típusú zónát definiáltam amit majd ismerni fog a bind-unk. Az első zóna a "sajatnet.hu", ebből látszik most az intranetunk domain neve "sajatnet.hu" lett. Ez egy master típusú zóna ami a /etc/bind/db.sajatnet file-ban lesz tárolva. Nézzük mit is kell írni ebbe a file-ba. Elősször hozzuk létre: proba# touch /etc/bind/db.sajatnet
Azután editáljuk: proba# mcedit /etc/bind/db.sajatnet
A file tartalma: ; BIND data file for sajatnet.hu domain ; $TTL 86400 @ IN SOA proba.sajatnet.hu. root.proba.sajatnet.hu. ( 2000092101 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS proba.sajatnet.hu. ;-------------------------------------------------------; proba IN A 192.168.1.1 ; @ IN MX 10 proba.sajatnet.hu. ; ns IN CNAME proba ; www IN CNAME proba ; ftp IN CNAME proba ; mail IN CNAME proba ; proxy IN CNAME proba ; proba IN HINFO iDX4-100 Linux/Debian2.2 ; ;-------------------------------------------------------; ; addolagos serveri ip cimek ;-------------------------------------------------------; munka IN A 192.168.1.2 ; munkaállomás ;-------------------------------------------------------; ; vege.
230.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Na ugye nem is sok? Azért kell egy kis magyarazat. Mint például minden domain-nek kell legyen SOA rekordja. Ez nekünk @-tel kezdődik, mert lusták vagyunk kiírni, hogy sajatnet.hu, hiszen ezt tudni fogja a bind, mert a zónát ezen a néven definiáltuk. A SOA rekordban definiáljuk a serial értékét. Ez nagyon fontos, hiszen ha szerkesztjük ezt a file-t és a name server-t nem indítjuk újra hanem csak újratöltjük (reload) akkor nem fogja beolvasni a megválltozott file-t. Szokjuk meg, hogy a zone file szerkesztését mindig a serial növelésével kezdjük! Ez a beidegződött stereotípia, később sok bosszúságtól óvhat meg minket. A többi érték nem érdekes jelenleg számunkra, én ezeket az értékeket az általánosan elfogadott értékek közül választottam ki, azaz kipuskáztam a "nagyok" name szervereiből!;-) Tehát elfogadjuk ezeket a lejárati, frissítési és ismétlési értékeket. A következő rekord szintén @-os, hiszen az egész domain name serverét definiáljuk. Itt nem illik megadni CNAME bejegyzésű hostnevet. Ah, mi is az a CNAME? Mindjárt visszatérünk rá. Figyeljük meg, hogy a @
IN
NS
proba.sajatnet.hu.
sorban a proba.sajatnet.hu után is áll egy pont! Ez lényeges, ugyanis ha nem teszünk pontot, akkor a bind kiegészíti azt a @ értékével azaz akkor a host név így alakulna: proba.sajatnet.hu.sajatnet.hu
Én azt a gyakorlatot követem, hogy inkább kiírom a teljes domain nevet és nem felejtrem el az utolsó pontot. Ha te is így teszel talán kevesebbet bosszankodsz majd. Végre! Definiáljuk az első hostot a domain-ünkben. Ez nem más, mint a proba nevű gép a címe 192.168.1.1. proba
IN
A
192.168.1.1
Tehát, [gépnév,IN,A,IPcím]! Ugyanígy definiáljuk a zóna többi hostját is. Rögtön ezután definiáljuk az MX rekordot is: @
IN
MX
10
proba.sajatnet.hu.
azaz,a @ domainnek (sajatnet.hu) a 10-es prioritású levelező gépe a proba.sajatnet.hu! (ponttal a végén:) Megadhatunk több levelezőgépet is, a kisebb prioritás értékű a nagyobb prioritású a sorban. Ezekután még definiálunk néhány nevet, hogy úgy is elérhessük a proba nevű gépet, mint például ftp, www, proxy, etc... A HINFO rekord manapság nem szokásos, lévén mindenki bizalmatlan, ezért esetleges kíváncsiskodók miatt nem szokták megadni. Mi azért megadhatjuk. (Intel DX-4/100MHz-es gép és Debian GNU/Linux OS fut a gépen.) Ezekután definiálhatjuk a tobbi hostot, mi most csak egyet adunk meg ez a munka nevű gép lesz, aminek az IP-je 192.168.1.2.
231.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Mentés és máris nézzük a reverse DNS file tartalmát. Miénk az egész 192.168.x.x IP tartomány ezért így járunk el: proba# touch /etc/bind/db.168.192
A file tartalma az alábbi: ; BIND data file for 192.168.x.x reverse DNS ; $TTL 86400 @ IN SOA proba.sajatnet.hu. root.proba.sajatnet.hu. ( 2000092101 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400 ) ; Negative Cache TTL ; @ IN NS proba.sajatnet.hu. ; 1.1 IN PTR proba.sajatnet.hu. 2.1 IN PTR munka.sajatnet.hu. ;vege
Mentés és ezzel kész is vagyunk. A reverse DNS visszafelé működik, azaz ha valaki megkérdi mi a neve a 192.168.1.1 gépnek akkor a db.168.192 zone file alapján kiegészíti azt az 1.1-gyel és ennek a PTR rekordnak az értékét adja vissza, azaz proba.sajatnet.hu. Már csak újraindítjuk, illetve betöltetjük a serverrel a változásokat. proba# /etc/init.d/bind reload
Ha minden jol megy akkor az alábbiakat látjuk a /var/log/syslog -ban amit pl. a proba# tail -f /var/log/syslog
paranccsal nézegethetünk folyamatosan. kb. ezt látjuk: Sep 25 13:29:49 proba named[153]: reloading nameserver Sep 25 13:29:49 proba named[153]: master zone "sajatnet.hu" (IN) loaded (serial 2000092201) Sep 25 13:29:49 proba named[153]: master zone "168.192.in-addr.arpa" (IN) loaded (serial 2000092201) Sep 25 13:29:49 proba named[153]: Forwarding source address is [0.0.0.0].1237 Sep 25 13:29:49 proba named[153]: Ready to answer queries.
Nincs más hátra mint hogy ellenőrizzük a jól beállított name server-ünket: proba# nslookup Default Server: localhost Address: 127.0.0.1 >
232.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Ha nem ezt látjuk akkor rossz default nameserver beállítás a /etc/resolv.conf file-ban, korrigáljuk. proba# cat /etc/resolv.conf nameserver 127.0.0.1 search sajatnet.hu
Tehát látható, hogy a hostunk a 127.0.0.1-es "gépen" lévő name server-t kérdezgeti és a sajatnet.hu domainba tartozik. Nakérem! Ha jó az nslookup -ban a Default Server akkor jó, ha nem magunk is átállíthatjuk a server 127.0.0.1 paranccsal. Első dolgunk beállítani a listázás típusát any-ra azaz bármit listázzon az nslookup: Default Server: localhost Address: 127.0.0.1 > set type=any >
ezután lekérdezhetjük, hogy ismeri-e a domain-ünket a name server: > sajatnet.hu Server: localhost Address: 127.0.0.1 sajatnet.hu nameserver = proba.sajatnet.hu sajatnet.hu origin = proba.sajatnet.hu mail addr = root.proba.sajatnet.hu serial = 2000092201 refresh = 28800 (8H) retry = 7200 (2H) expire = 604800 (1W) minimum ttl = 86400 (1D) sajatnet.hu preference = 10, mail exchanger = proba.sajatnet.hu sajatnet.hu nameserver = proba.sajatnet.hu proba.sajatnet.hu internet address = 192.168.1.1 >
Szuper! Ezekután különbözőképp faggatózhatunk: > set type=PTR > 192.168.1.1 Server: localhost Address: 127.0.0.1 1.1.168.192.in-addr.arpa name = proba.sajatnet.hu 168.192.in-addr.arpa nameserver = proba.sajatnet.hu proba.sajatnet.hu internet address = 192.168.1.1 > set type=MX > sajatnet.hu Server: localhost Address: 127.0.0.1
233.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
sajatnet.hu preference = 10, mail exchanger = proba.sajatnet.hu sajatnet.hu nameserver = proba.sajatnet.hu proba.sajatnet.hu internet address = 192.168.1.1 > set type=HINFO > proba Server: localhost Address: 127.0.0.1 proba.sajatnet.hu CPU = iDX4-100 OS = Linux/Debian2.2 sajatnet.hu nameserver = proba.sajatnet.hu proba.sajatnet.hu internet address = 192.168.1.1 > www Server: localhost Address: 127.0.0.1 www.sajatnet.hu proba.sajatnet.hu sajatnet.hu proba.sajatnet.hu >
canonical name = proba.sajatnet.hu CPU = iDX4-100 OS = Linux/Debian2.2 nameserver = proba.sajatnet.hu internet address = 192.168.1.1
stb. Jelen esetben a name server-ünk saját maga kérdezgeti a root servereket. Ha szeretnénk kihasználni, hogy a szolgáltatónk name server-ét kérdezgesse, hiszen az közelebb van és cache-el egy csomó kérést, tehát nagy valószínűséggel hamarabb kapunk onnan választ, akkor a /etc/bind/named.conf file-t ki kell egészítenünk egy forwarders-szel: options { directory "/var/cache/bind"; forwarders { idejon.az.isp.nameservere.elsodleges.ipcime; idejon.az.isp.nameservere.masodlagos.ipcime; # 195.70.32.131; ezek interware-es name serverek # 193.225.12.33 }; listen-on port 53 { 127.0.0.1; 192.168.1.1; }; };
Aha, és mi az a listen-on ? Ezzel azokat az interface IP-ket adhatjuk meg, ahol figyel a bind. Jó ezt megadni, mert így biztosítható, hogy ha esetleg be is talál egy kérés az Internetre csatlakozó interface-re, akkorsem valaszol a name server-ünk.
234.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Egy intranet rendszer példája alapján, de az intranet tűzfal mögött van: Ez akkor jelent problémát ha az Internetre nem közvetlenül az intranetes name server-ünkről jutunk ki. Kibővítettük hálózatunkat egy gate nevű géppel ami az internetre csatlakozik és ez a gép az egész hálót masquerade-eli. Nincs is ebben semmi rossz, csakhogy a bind ilyenkor nem kapja meg a valaszt. Ezt legkönnyebben úgy tudjuk áthidalni, hogy a gate gepre telepítünk egy bind-ot ami csak forwardol. Feltelepítjük a szokásos módon, majd a /etc/bind/named.conf tartalma így nézzen ki: options { directory "/var/cache/bind"; forward only; forwarders { 193.226.220.1; 193.225.12.62; }; listen-on port 53 { 127.0.0.1; 192.168.1.254; }; };
A többi marad. Természetesen mindenki a saját ISP-je name szervereit írja a forwarders részbe! Illetve a gate gépen ennyi, mert értelemszerűen a proba gépen az intranetes name server-nek meg kell valtoztatni a forwarders-ét: forwarders { 192.168.1.254; };
Ne felejtsük újraindítani, vagy reload-olni a name servereket!
235.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
DHCP szerver Mire jó a DHCP? Ha olyan hálózatot üzemeltetünk, amelyben több gép van annál, mint amennyit az ujjainkon meg tudunk számolni, érdemes az IP-címek és az alapvető hálózati konfiguráció beállításának hosszadalmas feladatát az erre kitalált protokollokra bízni. Egy hálózati kliens többféle módon is hozzájuthat a TCP/IP hálózatokban a kommunikációhoz nélkülözhetetlen IP-címhez, például RARP vagy a DHCP elődjének számító BOOTP segítségével is, e cikkünkben azonban a legnépszerűbb megoldást, a DHCP-t fogjuk közelebbről megvizsgálni, és utánajárunk, hogyan állíthatunk föl Linux alatt DHCP-szervert. A DHCP az egyéb protokollelnevezésekhez hasonlóan mozaikszó, jelentése: Dinamikus Állomáskonfiguráló Protokoll (Dynamic Host Configuration Protocol). Ebből esetleg már az is kiderülhet számunkra, hogy DHCP-n keresztül a hálózati állomások nemcsak az IP, hanem egyéb protokollokkal kapcsolatos információkat is megkaphatnak. A DHCP kliens-szerver modell alapján működik, egy hálózatban csak egy DHCPszerverre van szükség, míg a hálózat többi gépe DHCP-kliens lesz, vagy legalábbis az lehet. Mivel a rendszer működése nem igényel olyan összeköttetés-alapú kapcsolatokat, mint amilyeneket a TCP biztosít, a DHCP rendszerek az UDP szállítási rétegbeli protokollon keresztül kommunikálnak. Hogyan is működik egy ilyen rendszer? A protokoll üzemeltetésének alapja a jól beállított DHCP-szerver. A szerver ismeri a saját hálózatát, előre beállított IP-címmel rendelkezik, tudja, hogy mi a hálózati maszk az adott hálózatban, ismeri az alapértelmezett átjáró címét, és persze azért sem kell a szomszédba mennie, hogy kiderítse, hol is van a hálózatot kiszolgáló DNS-szerver; ezen túl ismeri azt a címtartományt is, amit szétoszthat az igénylők között. Általában ennyi már elég a szerver működtetéséhez. Amennyiben a hálózat nem csatlakozik egyéb hálózatokhoz, internethez, a DNS-szerver és az alapértelmezett átjáró elhagyható. A szerver feladata, hogy ezeket az információkat úgy juttassa el a DHCPkliensekhez, hogy közben arra is ügyel, hogy a kiosztható címekből senkinek se utaljon ki már használatban lévő IP-címet. A TCP/IP-támogatással rendelkező modern operációs rendszerek mindenféle felhasználói közbeavatkozás nélkül, alapértelmezésben a telepítés utáni első indítás során, képesek hálózati beállításaikat a DHCP-szerverről lekérni, és később minden egyes rendszerindításkor, illetve a bérlet lejártakor ezt az információt újra és újra megerősíteni, így megkímélik a felhasználót a TCP/IP konfigurálásától. A bérlet azt az időintervallumot jelenti, amíg egy DHCP-kliens használhat egy szerver által kiosztott IP-címet. Ha a bérleti idő lejár, a kliensnek újból el kell kérnie a a címet a szervertől. A szerver ekkor általában ugyanazt a címet ismét odaadja a kliensnek egy újabb bérletnyi ideig.
236.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Hogyan működik? A DHCP-forgalom a 67-es és a 68-as UDP portokon zajlik, a kliensek a 67-es portra küldik az üzeneteiket, a szerver pedig a 68-as portra kézbesíti a válaszokat, amelyek szórt üzenetek, vagyis a hálózat minden állomása megkapja őket. A konfiguráció lekérdezését a kliens kezdeményezi egy DHCPDISCOVER (DHCP-felfedezés) üzenettel. Mivel a kliens ekkor még nem rendelkezik hálózati rétegbeli címmel, a DHCP üzenetekben van egy xid nevű mező, ez szolgál a gépek megkülönböztetésére a DHCP-kommunikáció alatt.
A szerver a feltérképezésre használt DHCPDISCOVER üzenetre a DHCPOFFER (DHCP-ajánlat) üzenettel válaszol, megintcsak üzenetszórással. A kliens csak a saját xid-jével ellátott DHCPOFFER választ dolgozza fel. Az ajánlat nem más, mint a szerver által felkínált IP-cím, amit az ajánlattétel után a kliens még nem használhat azonnal, előtte el kell kérnie. A folyamat következő lépcsője tehát a DHCPREQUEST (DHCP-kérés), amelyben a felajánlott címet a kliens elkéri a szervertől, erre a nagyvonalú szerver megküldi a DHCPACK-et (DHCP-nyugta), ami minden fontos információt tartalmaz ahhoz, hogy a kliens a kézhezvétel után teljes értékű IPállomásként működhessen. A DHCPACK kézhezvétele után a kliens kötött állapotba (BOUND) kerül, ez a bérleti idő lejártáig érvényben is marad. A folyamat annyira gyors, és olyan kis sávszélességet igényel, hogy az még a ma már elavultnak számító 10 Mb/s-os hálózatokban is szinte észrevehetetlen. dhcpd: dhcpd: dhcpd: dhcpd:
DHCPDISCOVER from 00:40:f4:55:07:b2 via eth2 DHCPOFFER on 10.1.1.14 to 00:40:f4:55:07:b2 via eth2 DHCPREQUEST for 10.1.1.14 from 00:40:f4:55:07:b2 via eth2 DHCPACK on 10.1.1.14 to 00:40:f4:55:07:b2 via eth2
DHCP-nyomok a Linux rendszernaplóban (/var/log/messages)
237.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A szerver beállítása Linux alatt A Linux-disztribútorok a DHCP-vel kapcsolatos feladatokra általában az Internet Software Consortium (ISC) DHCP programjait használják, az ISC jegyzi egyébként a világ DNS-szervereinek túlnyomó többségén futó BIND programcsomagot is. A Linuxokban bevett gyakorlat, hogy külön csomagban kap helyet a DHCP-szerver (dhcp, dhcpd vagy dhcp-server néven) és a DHCP-kliens (dhcpcd, dhcp-client). A DHCP-szerver konfigurációját általában az /etc/dhcpd.conf állományban adhatjuk meg. Az egyszerű szöveges fájl alapvetően kétféle bejegyzést tartalmazhat: paramétereket és deklarációkat. A paraméterek tényleges információkat hordoznak, adatokat, amelyeket a klienseknek elküld a szerver, míg a deklarációk a hálózat topológiáját írják le. A dhcpd.conf a globális paraméterekkel kezdődik. Az újabb ISC DHCP-szerverek (3.x) például igénylik a Dinamikus DNS szerverekkel való kommunikáció módjának megadását, ez legyen hát az első globális paraméterünk, még akkor is, ha hálózatban nincs DNS-szerver vagy az nem DDNS. A DDNS szerverekkel való kommunikációról a dhcpd.conf kézikönyvoldalában (man dhcpd.conf) hosszas leírást találhatunk, itt elég annyit megjegyeznünk, hogy ezt a paramétert "interim"-re kell állítanunk. Következő globális paraméterünk a már tárgyalt bérleti idő legyen, ezt másodpercben kell meghatároznunk. Eddig tehát így fest a készülő dhcpd.conf állomány: ddns-update-style default-lease-time max-lease-time
interim; 14400; 14400;
A 14400 négy órát jelent, lehet ennél rövidebb és hosszabb is a bérlet, különösebb jelentősége nincs. A három paraméter után következzék egy deklaráció, adjuk meg, hogy milyen hálózathoz csatlakozik a szerver. A példánkban a 10.10.10.0 privát használatra fenntartott hálózatot fogjuk használni egy C osztályú hálózati maszkkal: subnet 10.10.10.0 netmask 255.255.255.0 { ... ... ... }
A kapcsos zárójelek közé ismét csak paraméterek kerülnek, ezek lesznek a legfontosabb beállítások. A range a dinamikusan kiosztható címteret adja meg a címtér első és utolsó elemével. Az option subnet-mask a hálózatban használt maszkot, a broadcast-address az üzenetszórási címet, a routers a hálózatot egyéb hálózatokhoz kötő forgalomirányítót (alapértelmezett átjáró), a domain-name a tartománynevet, a domain-name-servers pedig a DNS-szerver IP-címét definiálja. Ezeket az információkat a DHCP-lekérdezések során a kliensek természetesen megkapják.
238.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
subnet 10.10.10.0 netmask 255.255.255.0 { range 10.10.10.10 10.10.10.254; option subnet-mask 255.255.255.0; option broadcast-address 10.10.10.255; option routers 10.10.10.1; option domain-name "tartomanynev"; option domain-name-servers 10.10.10.2; option netbios-name-servers 10.10.10.4; }
Ha több DNS-szerverünk is van a hálózatban, az option domain-name-servers után vesszővel elválasztva sorolhatjuk fel őket, pl.: "option domain-name-servers 10.10.10.2, 10.10.10.3;". A teljes konfigurációs állomány tehát egy egyszerűbb hálózat esetében így festhet: ddns-update-style default-lease-time max-lease-time
interim; 14400; 14400;
subnet 10.10.10.0 netmask 255.255.255.0 { range 10.10.10.10 10.10.10.254; option subnet-mask 255.255.255.0; option broadcast-address 10.10.10.255; option routers 10.10.10.1; option domain-name "tartomanynev"; option domain-name-servers 10.10.10.2, 10.10.10.3; option netbios-name-servers 10.10.10.4; }
Vagyis: a 10.10.10.0 hálózat 10-es címétől a 254-ig a DHCP-szerver fogja kiosztani a címeket, minden kliens megkapja a 10.10.10.1-es átjáró címét, valamint a 2-es és 3-as címen lévő DNS-szervereket. A bérletben lévő IP-kről a rendszer feljegyzéseket készít, ezeket a /var/lib/dhcp/dhcpd.leases fájlban találhatjuk meg. Már csak az a kérdés, hogy mi ez a netbios-name-servers? Amint azt korábban említettem, a DHCP-vel más protokollokat is beállíthatunk a klienseken, ez a paraméter szétküldi egy windowsos hálózatban a WINS-szerverünk (Windows Internet Name Service) IPcímét (ebben az esetben mondjuk a 10.10.10.4-es állomáson konfigurált Samba szerverét), így ezt sem kell kézzel beállítanunk a windowsos klienseken. Két egyszerű tippet szeretnék még megosztani az olvasóval. Az első arra ad választ, hogy mi a teendő olyan esetekben, amikor a szerver egyszerre mondjuk három vagy négy hálózathoz is csatlakozik, azaz ennyi hálózati kártya van benne. Ilyenkor kicsit át kell szabnunk a dhcpd démont indító fájlt valahol az /etc/rc.d könyvtárszerkezetben. A szkriptben a démont indító parancs (pl.: /usr/sbin/dhcpd) után szóközökkel elválasztva fel kell sorolnunk azokat az interfészeket, amelyeken azt szeretnénk, hogy a DHCP-szerver figyeljen a kérésekre (pl.: /usr/sbin/dhcpd eth1 eth2). Ám ekkor még nem vagyunk készen, a dhcpd.conf fájlban az interfészeknek megfelelő subnet deklarációkat is létre kell hoznunk. Vagyis a konfigurációs fájlunk szerkezete a következőképp fog alakulni (a kettős kereszttel kezdődő sorok, ahogy az más esetekben is lenni szokott, kommentárok):
239.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
globális paraméterek; # eth1 subnet 10.10.10.0 netmask 255.255.255.0 { egyéb paraméterek; } # eth2 subnet 10.30.30.0 netmask 255.255.255.0 { egyéb paraméterek; }
A második tipp a DHCP dinamikus címkiosztási képességeinek előnyeit ötvözi a hagyományos statikus címbeállítási módszerrel. Megtehetjük ugyanis azt, hogy az egyes állomások hálózati kártyájának fizikai címéhez (MAC-cím) rendelünk IPcímeket. Ekkor a kliensek mindig ugyanazt az IP-címet fogják megkapni, így jobban nyomon követhető például a rendszernaplókban a felhasználók tevékenysége. Ehhez létre kell hoznunk a subnet deklaráción belül egy újabb, group deklarációt, majd abban az egyes állomásokat leíró host deklarációt. Figyeljünk arra, hogy a range által megadott címtérbe ne lógjanak bele az ilyen, MAC-címekhez kötött IPcímek. A példa, azt hiszem, beszédesebb minden egyéb magyarázatnál: globális paraméterek; subnet 10.10.10.0 netmask 255.255.255.0 { range 10.10.10.10 10.10.10.120; egyéb paraméterek; egyéb paraméterek; group { host gep_10_8 { fixed-address 10.10.10.8; hardware ethernet c0:4f:f4:55:06:7c; } host gep_10_9 { fixed-address 10.10.10.9; hardware ethernet c0:4f:f4:55:04:9f; } } }
A MAC-címet windowsos kliens esetén az ipconfig /all paranccsal, Linux alatt pedig az ip link show paranccsal tudhatjuk meg, de ha már bejelentkeztünk a hálózatba az adott gépekről a group deklarációk megadása előtt is, akkor a MAC-címeket megtaláljuk összegyűjtve a szerveren is a dhcpd.leases fájlban. A szoftver telepítésével kapcsolatban további hasznos információkat találhatunk az ISC DHCP weboldalán, a legfontosabb beállítások tekintetében eligazítást nyújthat a Red Hat Linux Customization Guide vonatkozó fejezete vagy a kissé már elavultnak számító DHCP mini HOWTO, illetve ennek magyar fordítása, a DHCP miniHOGYAN. Magával a protokollal, a működési mechanizmussal a 2131-es RFC foglalkozik.
240.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Az NFS Az egyik leghasznosabb dolog, amit a hálózatokkal tehetünk, a fájlok megosztása a hálózati fájlrendszeren keresztül. Ennek szokásos elnevezése: `Network File System', vagy röviden `NFS', melyet a Sun fejlesztett ki. A hálózati fájlrendszer segítségével minden fájlművelet, melyet az egyik gép programja végez, a hálózaton keresztül a másik gépre lesz kiküldve. Ez becsapja a programot, így az azt hiszi, hogy a másik számítógép fájljai a saját gépen vannak. Ez roppant egyszerűvé teszi az információk megosztását, hisz nem követeli meg a programok módosítását. Az NFS segítségével képessé tesszük a linux rendszerünket, hogy más gépek megosztott fájlrendszerét becsatoljuk a saját fájlrendszerünkbe, illetve a mi gépünk is képes legyen fáljrendszerének megosztására. Az NFS rendszer asszimetrikus, a hálózatban vannak NFS kiszolgálók és NFS kliensek. Természetesen egy gép képes egyszerre mindkét feladatot ellátni, így akár egyenrangú megosztásnak látszó NFS rendszert is tudunk készíteni. A leggyakoribb alkalmazása egy nagy tárterülettel rendelkező NFS kiszolgáló és több kis tárkapacitású NFS kliens. Fájlrendszerek importálása—NFS kliens Ha egy fájlrendszert szeretnénk becsatolni egy NFS kiszolgálóról, az egyetlen megkötés, hogy egy RPC portmapper démon üzemeljen a gépünkön. Ha ez a démon fut, akkor semmi akadálya, hogy becsatoljunk egy megosztott fájlrendszert. Ehhez a mount programot tudjuk használni: mount -t nfs :<elérési út a kiszolgálón> <és a gépünkön>
Nézzünk egy egyszerű példát. Az NFS kiszolgáló címe linux.hu és a gép megosztotta a /mp3 könyvtárat, amelyet mi a /home/user/mp3 könyvtárban szeretnénk látni: meggyfa:/ # mount -t nfs linux.hu:/mp3 /home/user/mp3
Fájlrendszerek exportálása—NFS kiszolgáló Azt a gépet, amely képes bizonyos fájlrendszereit megosztani, NFS szervernek nevezzük. Ezen a gépen már több démont el kell indítani: - RPC portmapper (rpc.portmap) - RPC mount-daemon (rpc.mountd) - RPC NFS-daemon (rpc.nfsd) Ezek elindulnak a /sbin/init.d/rpc szkript által, ha engedélyeztük ezen szolgáltatás indulását.
241.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A /etc/exports fájl tartalmazza a megosztott fájlrendszereket, minden sorban egy könyvtár és a hozzá tartozó jogosultságok szerepelhetnek. Meg kell adnunk, hogy egy könyvtárat melyik gép(ek) milyen jogosultságokkal érhet(nek) el. Az összes könyvtárban található fájl és alkönyvtár ezeket a jogokat örökli. A gépek megadásánál használhatunk IP címet, teljes (FQDN) nevet, illetve a névben ‘*’ illetve ‘?’ karaktereket. Ha nem adunk meg nevet, akkor az összes kapcsolódó gépre érvényes jogokat adunk meg. A legtöbbször használt jogok a következők: - ro: Csak olvasható a fájlrendszer. Alapértelmezett. - rw:Írható-olvasható. - root_squash: Ha a kliens gépen a ‘root’ akar bármilyen műveletet végezni a becsatolt fájlrendszeren, akkor az NFS fájlrendszeren elveszti ‘root’ jogait. Gondoljunk bele abba, hogy az NFS kiszolgáló rendszergazdája nem feltétlenül azonos a kliens gép rendszergazdájával!!! Ez úgy valósul meg, hogy a 65534 felhasználói ID lesz kiadva a 0 (root) felhasználói ID-vel rendelkező felhasználóknak. Ezt a felhasználói ID-t a ‘nobody’-nak kell beállítani. - no_root_squash: Ha mégis egyezik a két rendszergazda, és NEM lehet a hálózaton kívülről elérni az NFS kiszolgálót, akkor néha van értelme ezt az opciót megadni. Figyeljünk oda a beállításnál, mert ez az alapértelmezett!!! Nincs kiadva a 0 felhasználói ID a 65534-es felhasználói ID-re (alapértelmezetten). - link_relative: A linkeket átkonvertálja relatív linkekké. Csak teljes fájlrendszer megosztása esetén használható. Alapértelmezés. Átalakítja az abszolút linkeket (amik ‘/’-el kezdődnek) ‘../’ kezdetűvé. - link_absolute: A linkeket nem változtatja meg. - map_identity: A kiszolgálón és a kliens gépen a felhasználók azonos UID alatt találhatók. Alapértelmezés. map-daemon A kiszolgálón és a kliens gépen más ID alatt találhatók meg a felhasználók, így létre kell hozni egy felhasználó-UID táblát, amelyet az nfsd használni fog. Ehhez kell az ugidd démon is. A /etc/exports fájlt a mountd olvassa. Ha bármit változtattunk ebben a fájlban, akkor indítsuk újra a mountd és nfsd démonokat, hogy érvénybe lépjenek a változások. Ezt könnyedén megtehetjük, így: meggyfa:~ # rcnfsserver restart # # /etc/exports # # Fel kell sorolni a megosztani kívánt könyvtárakat, # mely gépek érhetik el és azok milyen jogosultságokat # kapnak. # /home atlantisz (rw) eperfa (rw) /usr/X11 atlantisz (ro) eperfa (ro) /usr/lib/texmf atlantisz (ro) eperfa (rw) / meggyfa (ro,root_squash) /home/ftp (ro) /usr/public (ro, root_squash) # Ezt mindenki elérheti, de csak olvasható jogokkal. /usr/public *.valahol.hu(rw) # Írni csak a saját tartományunk képes /home *.valahol.hu(rw) # A /home könyvtárt megosztjuk, hogy müködjön a NIS+NFS. # End of exports
242.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A NIS Mi is a NIS? Képzeljünk el több UNIX gépet egy közös hálózatban. A hálózat lényege, hogy bárki képes elérni a hálózatba kötött gépek megosztott erőforrásait; persze többnyire csak azok akiknek a jogosultságai megfelelőek... Minden felhasználó rendelkezik egy profillal, amely az általa meghatározott munkakörnyezetet jelenti. A felhasználók azt szeretnék, hogy a hálózat számukra átlátszó legyen: bármelyik gép elé ülnek le, az képes legyen a megszokott munkakörnyezetét előteremteni. Ezek nem álmok, ezt valósítja meg a NIS és az NFS szolgáltatás. A NIS (Network Information Service) pedig a gépek adatbázisait osztja meg a hálózaton. Ilyen adatbázisok a /etc/group, a /etc/passwd és a /etc/shadow. A NIS-t még más, jobban specializált feladatokra is használhatjuk (mint a /etc/hosts vagy /etc/services), de itt, most eltekintünk a részletektől. Hogyan működik a NIS? Egy hálózaton belül legalább egy NIS szerverként működõ gépnek kell lennie. Lehet több NIS szerver is, úgy, hogy mindegyik más NIS "körzetet" szolgál ki - vagy lehetnek együttműködõ NIS szervereid is, ahol van egy mester NIS szerver, és a többi úgynevezett szolga NIS szerver (egy adott NIS "körzetetre" ez így is van) - vagy lehet vegyesen is... A szolga szervereknek a NIS adatbázisról csak egy másolatuk van, és ezeket a másolatokat a mester NIS szervertõl kapják amikor abban változás történt. A hálózatod gépeinek számától és a hálózatod megbízhatóságától függõen választhatsz, hogy egy vagy több szolga szervert telepítesz. Amikor egy NIS szerver lekapcsolódik, vagy túl lassan válaszol a kérésekre, a NIS kliens, ami ehhez a szerverhez kapcsolódi, megpróbál egy bekapcsolt, vagy gyorsabb szervert találni. A NIS adatbázisok úgynevezett DBM formátumban tárolódnak, amik a ASCII adatbázisból konvertálhatók. Például a /etc/passwd és a /etc/group állományok közvetlenük átalakíthatók DBM formátumba ASCII-bõl-DBM-be átalakító szoftverrel ("makedbm", amit a szerver szoftveréhez csatolnak). A mester NIS szervernek egyaránt kell ASCII és DBM adatbázist tartalmaznia. A szolga szerverek minden NIS térkép beli változásról értesülnek (az "yppush" program segítségével), és automatikusan megkapják az adatbázisok szinkronizálásához szükséges változásokat. A NIS klienseknek nem kell ezt megtenniük, hiszen õk folyamatosan a NIS szerverrel kommunkikálnak, hogy a szerverek DBM adatbázisából megszerezzék a szükséges információkat. A régi ypbind változatok üzenetszórással keresnek futó NIS szervert. Ez nem biztonságos, mert bárki telepíthet NIS szervert, és válaszolhat az üzenetszórással érkezõ üzenetekre. Az ypbind újabb változatai (ypbind-3.3 vagy ypbind-mt) képesek a szervert konfigurációs állományból olvasni - tehát nincs szükség üzenetszórásra.
243.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A NIS konfigurálása A NIS kliens A Linux tartalmazza a NIS kliens működéséhez szükséges csomagokat. Ez az ‘ypclient’ csomag az ‘n’ (hálózati) csomagok között. Miután ezt a csomagot feltelepítettük, állítsunk be néhány fontos dolgot: - Adjuk meg a NIS tartományt az YP_DOMAINNAME paramétereként a /etc/rc.config fájlban. Amikor a linux hálózati szintre vált, a lefutó /sbin/init.d/network szkript felhasználja ezt a környezeti változót. A NIS tartományt lehetőleg ne tévesszük össze a DNS tartománnyal, nincs semmi közük egymáshoz, noha lehetnek azonosak. - Adjuk meg a NIS kiszolgálót is az YP_SERVER paramétereként. A rendszer beírja a helyes értéket a /etc/yp.conf fájlba. Ennek a környezeti változónak tartalmaznia kell a kiszolgáló nevét, különben nem indul el a NIS. Ennek a fájlnak tartalmaznia kell egy sort, ami az ypserver-rel kezdődik és a NIS kiszolgáló nevével folytatódik. - Ellenőrizzük, hogy az RPC portmapper fut-e. A NIS használja az RPC hívásokat (Remote Procedure Calls). Ezért az RCP portmapper-nek futnia kell. Ezt a kiszolgálót a /sbin/init.d/rpc indítja és automatikusan működik, ha beállítottuk a /etc/rc.config-ban. - Állítsuk be a megfelelő bejegyzéseket a /etc/passwd és a /etc/group fájlokban. Azért, hogy egy kérést a NIS kiszolgálóhoz elküldjünk, a helyi fájlok átkutása után, egy sort, ami csak a ‘+’ -t tartalmazza hozzá kell adni a vonatkozó fájlokhoz. A NIS megengedi számos más opció beállítását, mint a netgroup-ok vagy a NIS beadások helyi felülírását. # # yp.conf # # Legal entries are: # # ypserver <servername> Definiáljuk a kiszolgáló nevét. # # ypserver galois.suse.de # End of yp.conf
Indítsuk el az ypbind démont, ezzel elindult a NIS kliensünk. Ha telkepítő NIS kérdésére válaszolva igent mondtunk, akkor a network szkript elindítja ezt a démont is.
244.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A NIS kiszolgáló Át kell szerkeszteni a /var/yp/securenets és a /etc/ypserv.conf állományokat. Bõvebb információkért olvasd el az ypserv(8) és az ypserv.conf(5) manuál oldalakat. Bizonyosodj meg róla, hogy a portmapper fut, és indítsd el az ypserv szervert. A rpcinfo -u localhost ypserv
utasításnak hasonlóan kell kinéznie ehhez: program 100004 version 1 ready and waiting program 100004 version 2 ready and waiting
A "version 1" sor lehet, hogy hiányzik, az ypserv verziójától függõen, és attól függõen, hogy milyen konfigurációs állományt használsz. Csak akkor lényeges, ha régi SunOS 4.x-es klienseket használsz. Most készítsük el a NIS (YP) adatbázist. A mesteren futtasd a /usr/lib/yp/ypinit -m
parancsot. A szolgán nézd meg, hogy működik-e az ypwhich -m. Ez azt jelenti, hogy a szolgát NIS kliensként kell beállítani, mielõtt elindíthatnád a /usr/lib/yp/ypinit -s masterhost
programot, hogy beüzemeld a gépet NIS szolgának. Nos, a szervered fennvan, és működik. Ha nagyobb problémáid vannak, elindíthatod az ypserv és ypbind nyomkövetõ üzemmódban is különbözõ xterm-ekben. A nyomkövetés kimenetének mutatnia kell, hogy mi romlik el. Ha map-et kell frissítened, futtasd a NIS mester szerveren a make-t a /var/yp könyvtárban. Ez frissíteni fogja a map-et, ha a forrás állomány frisebb, majd át is adja a szolga szervereknek is. Kérlek ne használd a map frissítéshez az ypinit-et. Esetleg szeretnéd átszerkeszteni a root crontabját *a szolga* szerveren és hozzáadni a következõ sorokat: 20 * * * * 40 6 * * * 55 6,18 * * *
/usr/lib/yp/ypxfr_1perhour /usr/lib/yp/ypxfr_1perday /usr/lib/yp/ypxfr_2perday
Ez biztosítani fogja, hogy a legtöbb NIS map frissítõdjön, még ha ki is maradt egy frissítés, ha a mester szerver frissítésekor a szolga le volt kapcsolva.
245.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
A késõbbiekben bármikor hozzáadhatsz új szolgát. Elõször biztosítsd, hogy az új szolga szervernek legyen jogosultsága a NIS mester szerverhez kapcsolódni, majd futtatsd a /usr/lib/yp/ypinit -s masterhost
programot az új szolgán. A mester szerveren add hozzá a /var/yp/ypservers-hez az új szolga szerver nevét és futtasd a make-t a /var/yp könyvtárban, hogy frissítsed a map-et. Ha korlátozni szeretnéd a felhasználók hozzáférését a NIS szerveredhez, a NIS szerveredet kliensként is üzemeltetned kell úgy, hogy elindítod az ypbind-et, és hozzáadod a /etc/passwd jelszó állományhoz _félúton_ a plusz bejegyzéseket. A könyvtár függvények figyelmen kívül hagyják a hagyományos bejegyzéseket az elsõ NIS bejegyzés után és a többit NIS-en keresztül szerzik meg. Így a NIS hozzáférésszabályok karbantartottak. Például: root:x:0:0:root:/root:/bin/bash daemon:*:1:1:daemon:/usr/sbin: bin:*:2:2:bin:/bin: sys:*:3:3:sys:/dev: sync:*:4:100:sync:/bin:/bin/sync games:*:5:100:games:/usr/games: man:*:6:100:man:/var/catman: lp:*:7:7:lp:/var/spool/lpd: mail:*:8:8:mail:/var/spool/mail: news:*:9:9:news:/var/spool/news: uucp:*:10:50:uucp:/var/spool/uucp: nobody:*:65534:65534:noone at all,,,,:/dev/null: +miquels:::::: +:*:::::/etc/NoShell [ A hagyományos felhasználók EZUTÁN a sor után következnek! ] tester:*:299:10:Just a test account:/tmp: miquels:1234567890123:101:10::/home/miquels:/bin/zsh
Bár a "tester" felhasználó létezik, a parancsértelmezõje azonban a /etc/NoShell. A miquels nevű felhasználónak rendes hozzáférése lesz. Alternatívaként átszerkesztheted a /var/yp/Makefile állományt és beállíthatod, hogy a NIS másik jelszó forrás állományt használjon. Nagy rendszereken a NIS jelszó és csoport állományok általában a /etc/yp/ könyvtárban vannak. Ha a hagyományos eszközöket használod, hogy a passwd, chfn, adduser állományokat adminisztráld, nem fognak működni. Saját készítésű programokra lesz ehhez szükséged. Habár az yppasswd, ypchsh és az ypchfn természetesen működni fog.
246.
Barhács OktatóKözpont
Linux rendszergazdai modul - 10. fejezet
Az rpc.ypxfrd program Az rpc.ypxfrd-t nagyon nagy NIS map-ek esetén használjuk a mester és szolga NIS szerverek közötti adatátvitel felgyorsítására. Ha egy NIS szolga szerver olyan üzenetet kap, hogy új map készült, elindítja az ypxfr-t, hogy letöltse a map-et. Az ypxfr elolvassa a mester szerver map-jét az yp_all() függvény segítségével. Ez a folyamat több percet is igénybe vehet, ha nagyon nagy map-ekrõl van szó, amit az adatbázis könyvtárban kell tárolni. Az rpc.ypxfrd szerver úgy gyorsítja az átvitel folyamatát, hogy a NIS szolga szervereknek engedélyezi, hogy egyszerűen lemásolják a szerver map állományait, és ne kelljen újra felépíteniük a sajátjukat. Az rpc.ypxfrd RPC-alapú állomány átviteli protokollt használ, tehát nincs szükség új map építésére. Az rpc.ypxfrd indítható az inetd-bõl, azonban mivel nagyon lassan indul el, célszerű az ypserv segítségével indítani. Az rpc.ypxfrd-t csak a mester NIS szerveren kell elindítanod. Az rpc.yppasswdd program Amikor a felhasználók megváltoztatják a jelszavukat, a NIS jelszó adatbázis és feltehetõleg az összen ettõl a NIS jelszó adatbázistól függõ többi adatbázis frissítésre szorul. Az "rpc.yppasswdd" program egy olyan szerver, ami a jelszóváltozásokat kezeli, és gondoskodik arról, hogy a NIS információ helyesen frissítõdjön. Az rpc.yppasswdd már az ypserv része. Nincs szükséged régi, különálló yppasswd0.9.tar.gz-re, vagy yppasswd-0.10.tar.gz-re, és nem is javallott a továbbiakban használatuk. Az ypserv-1.3.2-beli rpc.yppasswdd teljes árnyék támogatást tartalmaz. Az rpc.yppasswdd-t csak a mester NIS szerveren kell elindítanod. Alapértelmezés szerint a felhasználók nem változtathazják meg a teljes nevüket, illetve a parancsértelmezõjüket. Engedélyezheted ezek megváltoztatását a -e chfn vagy -e chsh kapcsolókkal. Ha a jelszó vagy az árnyék állományok nem a /etc könyvtárban vannak, a -D kapcsolót is használnod kell. Például ha minden forrás állományt a /etc/yp könyvtárba tettél, és szeretnéd engedélyezni a felhasználók számára, hogy megváltoztathassák a parancsértelmezõjüket, a következõ paraméterekkel kell indítanod az rpc.yppasswdd-t: rpc.yppasswdd -D /etc/yp -e chsh
vagy rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh
Nincs más tennivaló, már csak meg kell gyõzõdnöd róla, hogy az rpc.yppasswdd ugyanazt az állományt használja, mint a /var/yp/Makefile. A hibákat a syslog naplózza.
247.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Levelezőszerver kialakítása Linuxon Linux alatt több levelezőszerver szoftver elérhető. Ezek közül mutatjuk be a három legismertebbet.
Sendmail A sendmail program tulajdonképpen már 1980 óta létezik különféle formákban. A 4BSD és a 4.1BSD rendszerekben delivermail néven jelent meg, míg a 4.2BSD-ben sendmail-ként. A hálózatos UNIX rendszerek körében elég hamar uralkodó levelezőrendszerré vált. A sendmail program elsősorban Eric Allman (Berkeley) nevéhez fűződik, bár ő 1987-91-ig szüneteltette ilyen irányú tevékenységét. Az 1991 után megjelent (és jelenleg is futó) új változatot nevezik 8-as verziónak A sendmail szerepét a következő ábrával lehet összefoglalni:
A sendmail program tehát nem kerül közvetlenül kapcsolatba a felhasználóval, és nem kézbesít levelet. Utóbbi alól az az egy eset jelent kivételt, amikor a kimenet közvetlenül egy file-ba kerül. Az üzenetet a címtől függően átadja egy másik mailer (MTA) programnak, szükség szerint módosítva azt (ez leginkább a címeknek a fogadó hálózat számára megfelelően történő átírását jelenti). A valódi kézbesítés hiánya különösen a helyi leveleknél szembetűnő (elvileg megtehetné, hogy ő maga teszi az üzenetet a címzett mailbox-ába), ez azonban azt jelenti, hogy nem kell törődni azzal, hogy az adott rendszerben hol vannak a mailbox-ok, milyen a formátumuk, milyen locking mechanizmus használatos rájuk stb.
248.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A Sendmail program és a külvilág kapcsolata A sendmail, mint MTA, a következő módokon tud üzenetet átvenni és átadni: - Argumentumok és exit státusz. Ez a UNIX rendszerekben szokásos módja az adatátvitelnek: itt ez azt jelenti, hogy a címzett(ek) a mailernek átadott paraméter(ek)ként jelenik(-nek) meg, míg maga az üzenet a standard inputon érkezik. A mailer kimenete probléma esetén visszaküldhető a feladónak. A mailer exit státuszát megkapja. - SMTP protokoll UNIX pipe-pár felett. Ez esetben is elindítunk egy új folyamatot, de a kommunikáció itt az SMTP protokollnak megfelelően történik, beleértve a címzettek átadását is. - SMTP protokoll IPC csatorna felett. Az átvitel folyamata hasonló az előzőhöz, de a kommunikáció itt egymástól függetlenül, sőt akár különböző gépeken futó folyamatok között történik. Ez a módja a távoli gépen futó sendmail folyamathoz való kapcsolódásnak, ami nem más, mint az SMTP alapú levelezés. A szabványos felületek használatának köszönhetően a sendmail nagy mértékben nyitott új mailer-ek támogatására. A Sendmail működése A küldő program az előbbi három módszer valamelyikét használva kéri meg a sendmail-t az üzenet továbbítására. Az üzenettovábbítás két lépésben történik: először beolvassa és eltárolja az üzenetet, majd elküldi. Ha az elküldés során valami probléma van, a sendmail előállít egy új üzenetet, amiben értesíti a feladót a hibáról. Az üzenettovábbítás lépései: - Címzettek listájának előállítása. Ha a sendmail meghívása az első két mód valamelyikével történt, elsőként a parancssori argumentumok feldolgozása kerül sorra (opciók, esetleg címzettek). Ezután a címzettek listája az argumentumok vagy az SMTP protokoll RCPT parancsa alapján állítható elő. A listán egyetlen cím sem szerepelhet többször, a végtelen hurkok és a többszörösen megkapott levelek elkerülése végett. A lista előállításakor a szintaktikai ellenőrzés mellett a helyi címek ellenőrzése és az alias-ok feloldása is megtörténik. A host-nevek és az egyéb címek ellenőrzése csak az elküldéskor történik meg. - Az üzenet beolvasása. Az üzenetnek egy fejléccel kell kezdődnie; ezt a sendmail kielemzi és a memóriában tárolja. A törzs tetszőleges szöveg lehet -- tehát bináris adat nem --; ezt egy átmeneti file-ba teszi. Az üzenetet akkor is beolvassa, ha nem volt érvényes címzett (majd ezután hibajelzéssel visszaküldi). - Az üzenet elküldése. Minden egyes címzetthez az üzenetet átadja a megfelelő mailer-nek; egy címzett host-ra egyszerre küldi el az összes levelet (az egyszerre csak egy címzettet elfogadó mailer-eket megfelelően kezeli). Minden egyes elküldött levél elé odatesz egy egyedi fejlécet. Ezután a mailer státuszát megkapja és ellenőrzi.
249.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 11. fejezet
Sorbaállítás újbóli elküldésre. Ha a mailer státusza azt jelzi, hogy bár nem tudta elküldeni az üzenetet, később még képes lehet rá, a sendmail félreteszi az üzenetet a mail queue-ba, és később újra megpróbálkozik vele. Vissza a feladónak. Ha valamilyen hiba jelentkezik, a sendmail visszaküldi a levelet a feladónak: a helyzettől függően visszapostázza, vagy (pl. lokális levél esetén) a $HOME/dead.letter file-ba írja.
Az üzenettovábbítás folyamatának megtervezésekor az volt a fő szempont, hogy minden egyes elküldött üzenet megbízhatóan eljusson a címzetthez, vagy ha ez nem lehetséges, valaki mindig értesüljön róla, tehát egyetlen üzenet se tűnjön el nyomtalanul. Konfiguráció A továbbiakban a directory-hivatkozások a sendmail disztribúcióhoz képest relatívan értendők. Konfigurálás m4 makrókkal A működéshez a sendmail-nek használható konfigurációs file-ra van szüksége. Ebben található az összes olyan szabály, amely a címek átírását, mailer-ekkel való megfeleltetését írja le, valamint a mailerek definíciója és a működéshez tartozó opciók is mind ebbe kerülnek. Ebből kifolyólag egy konfigurációs file szokásos mérete 25-35K, emellett igen nehezen olvasható. Ennek kézzel történő beállítása rendkívül nehéz feladat. Ennek megkönnyítésére az újabb sendmail disztribúciókhoz előredefiniált, paraméterezhető makrócsomagokat mellékelnek, amelyekből az m4 makrófordító alkalmazásával egy sendmail konfiguráció állítható össze. A mellékelt makrók a forrás-disztribúcióban a cf directory alatt, szerepük szerint csoportosítva találhatók a következőképpen: - cf: ide kerül az ún. Master Configuration (.mc) file, ami az elkészítendő sendmail konfigurációs file (.cf) alapja. Ezt nekünk kell elkészítenünk, néhány példát mellékeltek. A konfigurációs file előállítását leíró Makefile is itt van. - domain: a saját domain-re vonatkozó beállításokat gyűjthetjük össze itt, mint pl. a különböző relay szervereket (ezt is mi írjuk). - feature: a különböző öszetett funkciók leírására szolgáló makrók. Ezeket tetszés szerint vehetjük igénybe. - hack: egyéb helyi igények kielégítésére összebarkácsolt beállítások. Ha lehet, kerüljük ezeket. - m4: alapvető makrók, amelyek szükségesek a .cf file elkészítéséhez. - mailer: mailer-ek definíciója. Ezek közül azokat a mailer-eket kell csak belevenni a konfigurációba, amelyek számunkra fontosak. - ostype: az operációs rendszertől függő dolgok, pl. rendszerfile-ok elhelyezkedése. - sh: a .cf file előállítása során használt shell script-ek. Ezekhez ha lehet, ne nyúljunk. - siteconfig: a UUCP hálózat leírása kerülhet ide (mi készítjük el).
250.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A konfigurációs file alapja a cf/cf alatt található Master Configuration (.mc) file. A többi file-ra a megfelelő makrók segítségével hivatkozhatunk: pl. DOMAIN(mfa.kfki.hu) hatására a cf/domain directory alatt lévő mfa.kfki.hu.m4 file-t is beveszi a konfigurációba. Saját makrókat a define m4 paranccsal definiálhatunk; számos beállítás a megfelelő makró (át)definiálásával érhető el. Ami nem m4 makró, az változtatás nélkül bekerül a .cf file-ba. A sendmail konfigurációba megjegyzéseket # karakterrel kezdődő sorokba írhatunk. Itt vigyázni kell arra, hogy az m4 az inputot nem soronként, hanem token-enként dolgozza fel, és ha egy makrót talál, azt akkor is kifejti, ha az egy # karakterrel kezdődő sorban volt; ez pedig esetenként problémát okozhat. Ha azt akarjuk, hogy egy megjegyzés ne jelenjen meg a .cf file-ban, arra az m4 dnl parancsát (Delete Through Newline) használhatjuk: ez a következő ,,újsor'' karakterig mindent töröl az m4 inputjából (az ,,újsor'' jelet is beleértve). Az outputban jelentkező felesleges üres sorok kiküszöbölésére is szokás ezt használni. Egy makró kifejtését megtilthatjuk úgy, hogy `ilyen' idézőjelek közé zárjuk; ez makródefiníciókor is hasznos lehet. Egy Master Configuration file szokásos szerkezete: - VERSIONID (megjegyzésként belekerül a kimenetbe, azonosítására használható) - OSTYPE (kötelező!) - DOMAIN - FEATURE - lokális makródefiníciók - MAILER - lokális átírási szabályok
az
input
file-ok
Az ebből elkészült .cf file-t lemásolhatjuk /etc/sendmail.cf néven, és onnantól kezdve használható. A sendmail emellett még egyéb külső (adatbázis) file-okat is használhat a konfigurációban leírt módon. ,,Kézi'' beállítások A konfigurációs file-okba szükség esetén beírhatunk olyan sorokat is, amelyek nem előredefiniált makrók, hanem változtatás nélkül átkerülnek a sendmail.cf file-ba. Ezek általában egy egybetűs parancsot, valamint paramétereket tartalmaznak. A legfontosabb ilyen parancsok: - D: a sendmail számára definiálhatunk makrókat (ezeknek semmi közük nincs az m4 makrókhoz!). Pl. a DMmfa.kfki.hu sor a masquerade címet állítja be. - C: egy adott beállítási ,,osztály''-hoz (class) adhatunk tagokat ezzel. Pl. Cwmufi.hu jelentése: a mufi.hu domain számára is fogadjuk a leveleket. - O: sendmail opciók beállítása, pl. OHostStatusDirectory=.hoststat. - F: hasonlít a C parancshoz, de itt az osztály elemei egy külső file-ban vannak felsorolva. Pl. FE/etc/mail/sendmail.cE hatására a masquerade alól kivételt jelentő felhasználók neveit sorolhatjuk fel az említett file-ban.
251.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Példa: Sendmail az intézetben Elvárások a levelezőrendszertől Az MFA levelezőrendszerétől a legfontosabb elvárás természetesen az, hogy a felhasználók tudjanak leveleket küldeni és fogadni. A kimenő levelekhez egy SMTP mailer szükséges, a bejövő üzeneteket pedig az MX (mail exchanger) gépen kell SMTP mailer-től fogadni, és a lokális mailer-nek átadni. Az intézeti PC-k előtt ülő felhasználók a levelezőprogramjukban SMTP szervernek beállított gépen futó sendmail-nek adják át a leveleiket egy távoli gépre címezve, tehát ekkor a mail relay szolgáltatást veszik igénybe. A szükséges mailer-ek tehát: local, smtp, relay (utóbbi az SMTP-nek egy változata). További igény, hogy az MFA levelezését egy virtuális domain-név (mfa.kfki.hu) mögé rejtsük el, tehát a levelek címzésében ne jelenjen meg a levelezőszervernek beállított gép neve. Bejövő levelek esetén ehhez egy MX rekordot kell beállítani, valamint az így beállított gépen azt, hogy a virtuális domain számára érkezett leveleket fogadja. Az MFA két intézet (ATKI és MÜFI) összevonásából született. Levelezés szempontjából ez azt jelenti, hogy megjelent egy új domain (mfa.kfki.hu), ugyanakkor a két régi domain-re (atki.kfki.hu és mufi.hu) is érkeznek még levelek. Az ATKI számára érkező leveleket felsőbb domain-szinten átírják úgy, hogy hozzánk már az MFA-nak címezve érkeznek. A MÜFI-s leveleket pedig regimufi.mfa.kfki.hu címre kapjuk. A hozzánk így beérkező két domain leveleit külön kell választani, mert megegyező felhasználónév is előfordul. Fontos, hogy amennyiben rendszeresen nemkívánt (spam) levelek érkeznének hozzánk, lehetőség legyen ezek kiszűrésére. Ami ennél is fontosabb, hogy ne lehessen a mi levelezőszervereinkkel visszaélve ilyen leveleket küldeni másoknak, mert ez számunkra igen kellemetlen következményekkel járhat (mint ahogy volt is erre példa). A levelezőrendszer elrendezése Az MFA-ban jelenleg mind a kimenő, mind a bejövő levelezést egy szerver bonyolítja le. Ez a felix.mfa.kfki.hu nevű gép (Solaris 2.6). A mailbox-ok kezelése is itt történik. A fiok.mfa.kfki.hu (Debian Linux 2.1) tartalék szerverként van beállítva; gyakorlatilag azonos funkció ellátására képes, de arra van felkészítve, hogy a bejövő leveleket másik gépre (postas.mfa.kfki.hu) küldi tovább. A maradék két szerver (fuga.mfa.kfki.hu és forte.mfa.kfki.hu) minden kimenő levelezése a posta.mfa.kfki.hu, és minden bejövő levelezése a postas.mfa.kfki.hu szerverre van átirányítva.
252.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A levelezőszerver konfigurálása A levelezőszervernek beállított gép jelenleg a felix. A hozzá tartozó Master Configuration file: cf/cf/mfaconf.mc. divert(-1) # # A bevezető megjegyzések. # Ezeket most nem részletezem ... # divert(0)dnl VERSIONID(`@(#)mfaconf.mc8.9 (Berkeley) 5/19/98')dnl OSTYPE(solaris2)dnl DOMAIN(mfa.kfki.hu)dnl FEATURE(use_cw_file)dnl FEATURE(limited_masquerade)dnl FEATURE(masquerade_envelope)dnl FEATURE(masquerade_entire_domain)dnl FEATURE(redirect)dnl FEATURE(access_db, dbm -o /etc/mail/access)dnl FEATURE(virtusertable, dbm -o /etc/mail/virtusers)dnl FEATURE(mailertable, dbm -o /etc/mail/mailertable)dnl FEATURE(domaintable, dbm -o /etc/mail/domaintable)dnl MAILER(local)dnl MAILER(smtp)dnl Az itt felhasznált cf/domain/mfa.kfki.hu.m4 file a következő: divert(-1) # divert(0) VERSIONID(`@(#)mfa.kfki.hu.m48.9 (Berkeley) 5/19/98') MASQUERADE_AS(mfa.kfki.hu)dnl MASQUERADE_DOMAIN(mfa.kfki.hu)dnl FE/etc/mail/sendmail.cE define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward')dnl define(BITNET_RELAY, hugbox.sztaki.hu)dnl define(`confHOST_STATUS_DIRECTORY', `.hoststat')dnl define(`confCW_FILE', `/etc/mail/sendmail.cw')dnl
A következőkben az egyes beállítások értelmezése következik. Levelek fogadása Ha azt akarjuk, hogy a leveleket fogadó szerver ne csak a saját host-nevére küldött leveleket fogadja, a többi címet külön fel kell sorolni. A use_cw_file nevű ,,feature'' azt jelenti, hogy ezek a confCW_FILE makróban definiált file-ban találhatók. Ennek megfelelően a /etc/mail/sendmail.cw tartalma jelenleg: mfa.kfki.hu felix.mfa.kfki.hu postas.mfa.kfki.hu posta.mfa.kfki.hu mufi.hu falcon.mufi.hu
253.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Ez megfelel annak, mintha ezeket a Cw parancsban soroltuk volna fel. A saját levelek átirányítására minden felhasználó készíthet a confFORWARD_PATH szerinti file-okat. A legfontosabb az, hogy (az itt utolsóként szereplő) $z/.forward szerepeljen, tehát a UNIX rendszerekben szokásos $HOME/.forward szerinti átirányítás működjön. Az itt szereplő többi file a fogadó és a címzett gép host-neve szerinti átirányítást tesz lehetővé. Címelrejtés: masquerading Az ún. masquerading funkció szolgál arra, hogy a kimenő levelezés az mfa.kfki.hu virtuális domain-név mögé rejtve történjen. Amennyiben a MASQUERADE_AS makrót használjuk, a paraméterként megadott név kerül a kimenő levelek fejlécére feladóként. Ez alapértelmezésben a Cw osztályba tartozó host-nevekre vonatkozik (lásd sendmail.cw), de a MASQUERADE_DOMAIN használatával bővíthetjük ezt a listát. Amennyiben a limited_masquerade lehetőséget használjuk, csak az utóbbi módon felsorolt neveket rejti el (így nálunk pl. mufi.hu-t nem). A masquerade_entire_domain hatására az elrejtendő címeket teljes domain-eknek tekinti, tehát nálunk elrejt minden mfa.kfki.hu alatti nevet. A masquerade_envelope pedig azt jelenti, hogy az átírás nem csak a fejlécre, hanem a borítékra is vonatkozik (ennek a szerepe nem egészen világos, de amennyiben ez is elrejt valamit, érdemes használni). Bizonyos felhasználók esetében nem szerencsés az ilyen átírás. Erre a legjellemzőbb példa a root lehet: minden rendszer küldhet ilyen címről leveleket pl. cron job-ok futtatása után, és jó tudni, hogy pontosan honnan jött a levél. Emellerr nálunk vannak az új lehetőségek kipróbálására létrehozott account-ok is, amelyek nem találhatóak meg az mfa.kfki.hu leveleket fogadó gépen. Az utóbbi eset alias-szal is megoldható lehet, de pillanatnyilag ezek is kivételt jelentenek a maszkolás alól. Az ilyen kivételek a CE osztályba tartoznak, de az EXPOSED_USER makróval is felsorolhatók; nálunk az FE parancsban megadott /etc/mail/sendmail.cE file-ban vannak. Levelek irányítása Az új sendmail lehetőséget ad arra, hogy egyes címzett domain-ekhez mi magunk mondjuk meg, hogy milyen mailer-en keresztül és milyen címre küldjük el a levelet. Ennek egyik módja a mailertable, ami szó szerint az előbb említett módon használható. Ez egy olyan adatbázis, amelyben a kulcsok a címzett domain-ek, az értékek pedig mailer:domain alakban adhatók meg. A mailer helyére alapértelmezésben relay-t helyettesít. A domain-re vonatkozó esetleges MX rekordot figyelmen kívül hagyhatjuk úgy, hogy a domain-t szögletes zárójelek közé zárjuk. Speciális célú mailer-ek: local, amelyhez helyi címzettet írhatunk (alapértelmezés: az eredeti címzett), így egy domain levelei összegyűjthetők egy felhasználónál; valamint error, ami után egy tetszőleges hibaüzenetet írhatunk, amit a sendmail visszaküld a feladónak.
254.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Nálunk az utóbbi két speciális lehetőség van beállítva. A PC-kre (jellemzően az lpd által automatikusan) helyből elküldött leveleket az adott PC felelős felhasználója kapja meg. A MÜFI-ben régebben létező, de általunk valamilyen okból nem kezelt címekre küldött leveleket az 553 Address no longer exists hibaüzenettel küldjük vissza; az ilyen leveleket először a mufi-hiba.mfa.kfki.hu domain-re irányítjuk át, amihez az előbbi hibaüzenetet visszaküldő mailertable bejegyzés tartozik. Példa: # # # #
mailertable -- üzenetek irányításának beállítása Ez csak az innen elküldött levelekre vonatkozik ! Új mailertable beállítása: cat mailertable | makemap dbm /etc/mail/mailertable
# Erre a címre küldjük az általunk nem kezelt mufi-s leveleket. mufi-hiba.mfa.kfki.hu
error:553 Address no longer exists
# A PC-kre küldött leveleket letesszük a tulajdonos mailbox-ába. adam1.mfa.kfki.hu local:adam
A mailertable mellett bizonyos ál-domain-ekhez beállíthatunk olyan relay szervereket, amelyek a megfelelő (általában nem SMTP alapú) levelezést képesek lebonyolítani. Mi a BITNET hálózatra küldött levelekkel járunk el így: a BITNET_RELAY definiálása azt jelenti, hogy az érvényes felső szintű domain-ek közé a .BITNET-et is felvesszük, és az ilyen címre küldött leveleket az ott megadott hugbox.sztaki.hu szervernek adjuk át továbbításra. Virtuális domain-ek elkülönítése Mint azt már is említettem, újabb problémákat vetett fel, hogy az MFA két intézet összevonásából született. Lényegében arról van szó, hogy a mufi.hu és az mfa.kfki.hu domain-eket kell különválasztani úgy, hogy néhány kivételtől eltekintve a MÜFI-s felhasználók azonos néven MFA-s account-ot kaptak (tehát külön gép használata értelmetlen lenne). Mivel előfordulhatnak azonos nevű MÜFI-s és ATKI-s account-ok, a két régi domain-t nem lehet egyszerűen összekeverni. A virtusertable adatbázis az aliases-hoz hasonló, két fontos eltéréssel. Az egyik az, hogy kulcsként nem felhasználónevek, hanem teljes user@domain címek szerepelnek, ahol a domain-nek benne kell lennie a Cw osztályban. Értékként itt is címek szerepelhetnek, de a virtusertable esetében mindenhol csak egy lehet. A másik fontos különbség a későbbi hivatkozásban van: ha egy kifejtett alias-ra vonatkozó üzenet megy a feladónak, a tényleges címre hivatkozik, míg virtusertable esetén az eredeti címzettre -- ez a 3.4.3 <node4.html> pontban említett mailertable funkcióval együtt használható bizonyos címzettek saját hibaüzenettel való visszautasítására.
255.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Példák a MÜFI-s levelek elkülönítésére: # Virtual User Table # mufi-s címek kezelése # Az eredetitől eltérő MFA-s címmel rendelkeznek [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] # Ismert távoli címmel rendelkeznek [email protected] [email protected]
[email protected] [email protected]
# Müfi-sek, akiknek a levelét visszaküldjük a feladónak [email protected] [email protected]
%[email protected] %[email protected]
# Levelek vissza a futo-ra [email protected]
%[email protected]
# Alapértelmezés: ugyanazon a néven MFA-s címre küldjük @mufi.hu
%[email protected]
Ezzel kapcsolatban még problémát jelent az, hogy a mufi.hu címre érkező leveleket a KFKI szinten fogadják, és ott a regimufi.mfa.kfki.hu címre küldik tovább, ami azonban ugyanarra a címre mutat, mint a jelenlegi levelezőszerverünk neve. Ehhez a domaintable funkciót lehet alkalmazni: ezzel egyszerűen átírhatjuk a címekben található domain-neveket, így a regimufi.mfa.kfki.hu-t mufi.hu-ra. Ez is a virtusertable-hez hasonló adatbázis file. Spam-védelem Az utóbbi időben a nagy tömegben küldött kéretlen levelek (spam) egyre nagyobb problémát jelentenek az elektronikus levelezést rendeltetésszerűen használni kívánók számára. Bár nemkívánt hirdetéseket, esetleg megbotránkoztató tartalmú leveleket a hagyományos postán keresztül is lépten-nyomon kaphatunk, az elektronikus levelezés, egyszerűségéből eredően, erre sokkal kézenfekvőbb és kellemetlenebb lehetőségeket nyújt. Emellett egy nem megfelelően beállított rendszert akár le is lehet ültetni a levelezőrendszeren keresztül. Ezt felismerve a sendmail 8.9-es verziójába számos spam-elleni funkciót építettek be. Ha megnézzük az SMTP alapú levelezőrendszereket a hozzáférés szempontjából, láthatjuk, hogy az egész nagyon hasonlít a klasszikus postához. Minden végső címzettnek megvan a saját postaládája (mailbox), amihez a saját jelszavával férhet hozzá. A közbülső MTA-ek (jellemzően a sendmail) pedig egy-egy postahivatalhoz hasonlóan viselkednek: beérkeznek a levelek, majd az MTA a megkapott címzett(ek)nek továbbítja a levelet. Ez utóbbihoz semmilyen felhasználó-azonosítás nem tartozik, és a levél feladójaként tetszőleges cím lehet megjelölve.
256.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A levél nyomonkövetését a postabélyegzőhöz hasonló Received: mező teszi lehetővé: minden MTA ráírja a borítékra, hogy honnan, milyen protokoll szerint és kinek címezve kapta az üzenetet. A levél ténye mindenhol naplózásra kerül egy egyedi azonosítóval ellátva. Az egyik legfontosabb spam-elleni dolog, hogy lehetőség van bizonyos címekről érkezett levelek kitiltására. Ez mind az SMTP protokoll MAIL parancsával megadott feladóra, mind domain-ekre vonatkozhat, amelyek akárhol megjelenhetnek a levél útjában. Abban az esetben például, ha egy adott levelezőszerveren keresztül különböző feladóktól rendszeresen érkeznének ilyen levelek, az illető levelezőszerver feketelistára tehető. Talán ennél is fontosabb az, hogy a saját levelezőszerverünk ne kerüljön ilyen listára, tehát azzal visszaélve ne tudjon akárki a mi nevünkben ilyen leveleket küldeni. Míg a 8.9-es sendmail előtt bármilyen kívülről érkezett levél bármilyen külső címre mehetett (relaying), addig mostantól az alapértelmezés ennek az ellentéte: csak a helyi érdekeltségű levelekkel foglalkozunk, tehát a helyből (azaz jelszóval belépett felhasználótól) indított leveleket küldjük távoli címre, a többit csak akkor fogadjuk el, ha az saját címre érkezik -- azaz csak a saját gépünkben bízunk meg ilyen értelemben. Ezt a kört természetesen ki kell bővíteni a hozzánk tartozó gépekkel. A feladó ellenőrzését is bevezették: a MAIL parancsban feladóként megjelölt domainnek (ennek a syslog-ban lesz nyoma, a levél fejlécében ezt könnyű becsapni) léteznie kell. Nálunk a spam-védelmet egy adatbázis file, az ún. Access Database (access_db) irányítja. A következő műveletek lehetségesek egy adott címről érkező levéllel kapcsolatban: - RELAY: a domain számára engedélyezzük a mail relay szolgáltatást (oda-vissza). Ez egyúttal az OK-t is magában foglalja (lásd később). - REJECT: 550 Access denied üzenettel visszaküldjük a levelet. - Lehet saját hibaüzenet is, pl. 550 We don't accept mail from spammers - DISCARD: a levelet eldobjuk. - OK: a levelet elfogadjuk a rá vonatkozó tiltó szabályok ellenére. Az előző esetek mellett ez vonatkozhat pl. olyan címre is, amelyre a névfeloldás nem működik. Jelenleg az access tábla a következő: mfa.kfki.hu rmki.kfki.hu iif.hu atki.kfki.hu dial.kfki.hu 148.6.168.85 fpcrf.fujitsu.co.jp
RELAY RELAY RELAY RELAY RELAY RELAY OK
A hozzánk tartozó (vagy közel álló) domain-ek számára tehát engedélyezzük a mail relay szolgáltatást, köztük egy olyan gépnek is, amely nincs a DNS-be bejegyezve (ez remélhetőleg nem lesz tartósan így). Egy olyan domain-ről pedig, ahonnan fontos adatok érkeznek, de a távoli DNS-konfiguráció miatt nem oldható fel rendesen, elfogadjuk a leveleket. 257.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A tartalék levelezőszerver A tartalék szerver feladata az, hogy az elsődleges levelezőszerver kiesése esetén minél kevesebb munkával beállítható legyen annak helyére. Ennek megfelelően ugyanazzal a relay és MX funkcióval működik, egy fontos eltéréssel: a DOMAIN konfigurációban be kell állítani a MAIL_HUB makrót postas.mfa.kfki.hu értékre, tehát minden bejövő levelet tovább kell küldeni az itt megadott gépre, hogy ne legyenek több helyen mailbox-ok. Jelenleg a teszt célú account-okra való tekintettel a LOCAL_USER makróval kivételeket sorolunk fel az előbbi alól. A tartalék szerveren lévő alias és adatbázis file-okat szinkronban kell tartani a levelezőszerverrel. Levelezési funkcióval nem rendelkező szerverek A többi szerver gépen a sendmail default beállításokkal konfigurálandó, és definiálni kell a MAIL_HUB makrót (postas.mfa.kfki.hu), valamint a SMART_HOST makrót (posta.mfa.kfki.hu). Előbbi a bejövő, utóbbi a kimenő levelek átirányítását állítja be. A bejövő levelekkel kapcsolatban a LOCAL_USER(root) sort is be kell írni, azaz a rootnak szánt leveleket helyben kezelje le. A sendmail indítása A sendmail boot-oláskor automatikusan indul, az /etc/init.d/sendmail script indítja (Solaris). Kézzel az /etc/init.d/sendmail start paranccsal indíthatjuk, ill. az /etc/init.d/sendmail stop paranccsal állíthatjuk le. A rendszergazda teendői Az előző szakaszokban olvashatóak az új sendmail telepítésével kapcsolatos tennivalók. Következzen néhány recept a menet közben felmerülő feladatokra. Átkonfigurálás Amennyiben új sendmail.cf file-t állítunk be, a sendmail-t újra kell indítani. Mind Linux, mind Solaris alatt alkalmazható a következő módszer: 1. Állítsuk le a sendmail-t: /etc/init.d/sendmail stop. A ps segítségével ellenőrizzük, hogy valóban nem fut semmilyen sendmail folyamat. (Ha igen, kill -9 használatával lőjük ki.) 2. Másoljuk át az új konfigurációs file-t a helyére. 3. Indítsuk újra a sendmail-t: /etc/init.d/sendmail start. A .cf file a .mc file-ból (és az abban hivatkozottakból) készül. Utóbbiak az előzőekben ismertetettek szerint (és az ott említett helyen) írandóak meg, majd a .mc file directory-jában a make configfile.cf paranccsal fordíthatók le. (Ha a Makefile nincs meg, kézzel is megcsinálhatjuk: m4 configfile.mc ../m4/cf.m4 > configfile.cf, és chmod 444 configfile.cf.)
258.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Új alias file Ha magát az aliases file-t írtuk át, a newaliases programot kell lefuttatni. Ha egy :include: szerint megadott file-ról van szó, ez nem szükséges, mert az ilyen alias-okat minden alkalommal beolvassa a file-ból. Adatbázis file-ok Az adatbázis file-ok helye a konfigurációs file-ban található, célszerűen /etc/mail. Miután a szövegfile-t átszerkesztettük, a következő parancsot adjuk ki: makemap adatbázis-formátum file < file
ahol file értelemszerűen az adatbázis neve (pl. access), adatbázis-formátum pedig Solaris alatt dbm, Linux alatt hash. A szóbanforgó adatbázisok jelenleg: mailertable, domaintable, access, virtusers. A tartalék levelezőszerver élesítése Ahhoz, hogy a tartalék levelezőszerver teljes értékű finkciót lásson el, új konfigurációs file készítendő, amelyből kivesszük a MAIL_HUB beállítást. Komoly átállás esetén a posta és a postas DNS-bejegyzéseket is módosítani kell úgy, hogy az új szerverre mutassanak. Új PC bejegyzése A PC-k bejegyzésével kapcsolatos új feladat: a mailertable adatbázis file-ba be kell venni a következő sort: PC.DNS.neve local:user
ahol a PC.DNS.neve pl. kovacsjozsi1.mfa.kfki.hu, a user pedig a PC-ért felelős felhasználó user-neve, pl. kovacsjozsi. Átirányítás megváltoztatása Ehhez a virtusers adatbázist kell értelemszerűen módosítani. Spam szűrése A spam eredete a Received: mezők tartalma alapján deríthető ki. Eszerint megkeressük azt a domain-t, amelyik megítélésünk szerint a legközelebbi (esetleg nemkívánt) kapcsolatban állhat a spam küldőjével, és az ottani postmaster-t (ez egy kötelező alias minden levelezőrendszerben) értesítjük a történtekről. Amennyiben egy domain-ről (vagy azon keresztül) ismételt spam levelek érkeznének, a domain-t az access táblában tiltó listára tesszük.
259.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Postfix Spam, remote exploit, adress harvesting... Ismerősek ezek a szavak? A legtöbbet akkor halhattuk ezeket, ha levelező szervert ért támadás, vagy egyszerűen csak kéretlen leveleket kaptunk cégektől. Így eljött az idő, mikor a levelező szervereknek is fel kellett nőni az internet biztonságot érintő kihívásaihoz. Ezért született meg a Postfix is, hogy egy hatékony és biztonságos szervert biztosítson számunkra, ráadásul alapvető beállítása is könnyen elvégezhető. A Unixos időszámítás kezdetén (1970) még olyanok használták a hálózatokat, akik nem is gondoltak arra, hogy társaiknak bosszúságot, netán kárt okozzanak. Majd az Internet kitört a szélesebb rétegekhez, melyben természetesen a valós élethez hasonlóan megjelentek a bűnözők és a "rossz emberek". Sajnos a legtöbb hálózatot használó eszközt még a "békeidőkben" tervezték, és nem gondoltak a biztonságra. Ezek közé tartoztak levelező szervert biztosító szoftverek is, mindnek szülőatyja a sendmail. Sok-sok hiba után ezért határozta el a postfix írója, hogy egy olyan programot készít, mely könnyű áttérést biztosít a sendmail-ről, könnyű használni, gyors és biztonságos. A postfix kódolását az a Wietse Venema végezte, akinek a nevéhez fűződik a tcp_wrappers csomag is. Jelenleg az IBM T. J. Watson kutatóközpontjában dolgozik, munkájáról azonban semmit nem árulnak el. Ideje nagy részét azonban a postfixnek szenteli, erre enged következtetni a levelezési listán lévő levélforgalma és jelenléte. Akkor kezdte el foglalkoztatni a biztonság és az internet kapcsolata, mikor azt a holland egyetemet, ahol tanított, a 90-es évek elején bekapcsolták az Internet vérkeringésébe. Azóta több cikk, konferencia és szeminárium bizonyította rátermettségét és szakértelmét. A program felépítése teljesen moduláris: 17 teljesen különálló rész hajtja végre magát a működést, ezeket 13 különálló program írányít, illetve befolyásolja működését. Bár ez a szám soknak tűnhet, mégsem az, mert az egész levelezést apróbb részekre bontja. Alapjaiban úgy tervezték meg, hogy egy olyan része sincs, amit hálózaton keresztül el lehet érni, és a root felhasználó jogaival vagy setuid-es programként futna. Ha lecseréljük a sendmailt, az összes addig használt beállítást használni tudja, tudni fog a felhasználók számára fentartott esetleges alias (az igazitól eltérő, a leveleket csupán továbbító címekről, a virtuális domain-ekről, és egyátalán minden beállítást kiszed a sendmail által használt cf fájlból.
260.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Új telelepítésnél, ha csomagkezelővel raktuk fel deb vagy rpm csomagból, már telepítés közben beállítja a szerverre vonatkozó információkat, melyekhez hozzáfér. Ilyenek a gép teljes neve (FQDN), a kiszolgálandó domain, és az, hogy honnan fogad el leveleket. Persze itt sem árt meggyőződni arról, hogy a beállított értékek megfelelnek-e a valóságnak. Kövessük végig egy levél útját, annak megérkezésétől tárolásáig, vagy esetleges továbbításáig. Ehhez fontos tudni, hogy az egész postfix részekből áll ugyan, de mindezt felügyeli egy daemon, ami megvédi a rendszer egészének épségét, és irányítja a szervert. Levelet két módon kaphatunk: vagy a hálózat felől, vagy pedig lokálisan. Az előbbi a gyakoribb, az utóbbi általában akkor fordul elő, ha - lévén levelező szerveren helyi felhasználók nem szoktak létezni - egy másik, a szerveren futó program üzen valamit, netán a postfix maga. A lokálisan érkező levelek egy gyűjtő könyvtárba kerülnek, ahonnan a postfix azt figyelő programja felveszi azt, majd továbbítja azt egy olyan alkalmazásnak amely esetleges műveleteket végez el a levélen (címátírás, egyéb ellenőrzések), majd beteszi azt a beérkező levelek sorába. Ha hálózaton keresztül kapunk levelet, akkor az azt figyelő elem először megvizsgálja, hogy megfelel-e az általános, illetve a mi általunk beállított szűrőfeltételeknek. Majd, ha mindent rendben talált, akkor ugyanolyan procedúrákon esik keresztül, mint a lokálisan érkezett levél, és végül ugyanabba a beérkező sorba is kerül. Ekkor érkezik el a postfix legfontosabb részéhez, az úgynevezett sorokat (queue) felügyelő programhoz, mely több bejegyzést tart fenn a levél állapotának megfelelően, ami lehet küldésre kész, visszapattant és később közvetítésre kerülő is. Mielőtt azonban akármelyik sorba is bekerülne egy levél, sok változtatást és ellenőrzést végezhetünk el itt is a levélen, majd az állapotának megfelelően ütemezhetjük a továbbítást. Az a levél, amelyik először lép kapcsolatba a sorokat kezelő programmal, mindenképpen az aktív sorba kerül, és a program megpróbálja továbbítani lokálisan, hálózaton keresztül, vagy egyszerűen egy másik program bemenetére irányítani. Ha a továbbítás valami miatt nem sikerül, akkor kerül a visszapattant, vagy később továbbítandó üzenetek közé. Ezek között az a különbség, hogy a visszapattant levél valamilyen szabályozást sértett, és soha többé nem próbálja meg közvetíteni a postfix, míg a későbbi továbbításra kerülő leveleket még megpróbálja eljuttatni a címzettekhez, ha a hiba, ami ezt megakadályozta, elhárult. Konfigurálás A fő konfigurációs fájl, mely a szoftver viselkedését befolyásolja a /etc/postfix/main.cf. Telepítés után elég néhány dolgot módosítani, a szabályok pedig érthetőek, nem olyan bonyolultak, mint a sendmail-nél. Minden beállítás az alábbi sémát követi: változó = érték
Például myhostname = mail.cegunk.hu
261.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Először nézzük meg azt az esetet, amikor egy bérelt vonal mögött helyezkedik el a szerverünk, esetleg ISDN kapcsolat mögött, de mindenképpen rendelkezünk érvényes domain névvel és az rendelkezik MX rekord-dal, ami a mi levelző szerverünkre mutat. Hogy mi is az az MX rekord? Angolul Mail Exchanger, azaz "levél cserélő", utalva a gép funkciójára. Ha a mi gépünk az, akkor az összes cégnek érkező levelet erre a gépre küldik. Ezenkívűl miért fontos ez a DNS bejegyzés? Mert ma Magyarországon nem regisztrálnak domaint, ha nem rendelkezik MX rekord-dal. Ezt általában a szolgáltató, akinél regisztrálunk biztosítja, ez is benne van a díjban (jobb esetben). Hogyan is ellenőrizhetjük le, hogy mi a domain MX rekordja? Adjuk ki a következő parancsot: host -t mx cegunk.hu
Most már tudjuk, hogy ez mit jelent. Akkor kezdjük el megnézni, hogy melyik sor mit jelent, de változtatásokat csak ott eszközöljünk, ahol szükséges. queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix mail_owner = postfix default_privs = nobody
A fentiek általános beállítások és nem is kell változtatni rajtuk, hacsak nem tértünk el valamitől a telepítés során. A következő értékek viszont érdekesek lehetnek, és változtatásokat igényelnek. myhostname = mail.cegunk.hu
Ez a sor mondja meg, hogy mi a gépünk teljes neve az interneten. Az MX rekord is erre van rögzítve. mydomain = cegunk.hu
Ez mondja meg, hogy melyik domaint is kezeljük. myorigin = $mydomain
Minden levél amit felhasználóink küldenek ilyen domain névvel kerül kiküldésre, azaz ha a cég domainje cegunk.hu és a mariska felhasználó küld egy levelet, akkor az a következő formában kerül kiküldésre: [email protected] inet_interfaces = all,
alapbeállítás, bár ki van kommentezve a konfigurációs fájlban. Nyugodtan hagyjuk ezen a beállításon, így az összes hálózati csatoló címén fogadunk leveleket, a további kezelésüket pedig az egyéb beállításokra bízzuk. mydestination = $myhostname, localhost.$mydomain $mydomain
Ebben a beállításban elfogadjuk, hogy levél érkezzen a teljes internetes nevünkre (FQDN - full qualified domain name), domain nevünkre és a localhost.domain nevünkre. 262.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Jelen esetben: mail.cegunk.hu, cegunk.hu, localhost.cegunk.hu.
A localhost beállítása fontos, ha kifelejtjük problémáink lehetnek! Ha több nevünk is van, például ez a web szerver is, és az fogad leveleket akkor be kell írni a www.$mydomain-t is. A fenti példából látszik, hogy ami értéket átadtunk egyszer a postfix-nek, azt ő képes később a változó nevével felhasználni. mynetworks = 10.0.0.0/24, 127.0.0.0/8
Megadjuk, hogy mely alhálózatról fogadunk el leveleket továbbításra, azaz relayezünk. Itt fontos, hogy a localhost címe (127.0.0.0/8) is benne legyen. Az újabb postfixekben már beállíthatjuk azt is, hogy ne csak subnet típusú, azaz a fenti, hanem host típusú relay-ezést akarunk engedélyezni, tehát akar egy hosztra is lekorlátozhatjuk a levélküldés engedélyezését! #relay_domains = $mydestination
Ez nem véletlenül van kikommentezve. Alapesetben a postfix engedi a levelek küldését a saját domainre, az összes beállított névre, amit megadtunk a például a mydestination változóban, ezenkívűl a virtuális domainek számára is. #local_recipient_maps = $alias_maps unix:passwd.byname
Ha akarjuk, külön is beállíthatjuk, hogy hol ellenőrizze le, hogy létező felhasználónak küldtek-e levelet. Ezt csak akkor kell megváltoztatni, ha esetleg SQL vagy NIS táblában tartjuk a felhasználókat. Egyébként hagyhatjuk így is a beállítást. alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
A fentiek adják meg, hogy hol tartjuk az alias fájlokat, mely segítségével egy felhasználónak több címe is lehet, például maris szeretne olyan e-mail címet, hogy [email protected] (elnézést minden Kis Máriától :-) ), akkor csak fel kell őt venni az alias táblába a következő módon: Kis.Maris : maris
Majd le kell futtatni a newaliasesparancsot és már létre is jött az új, virtuális felhasználó, akinek leveleit a létező kapja meg. Ezenkívűl nagyon sok beállítási lehetőséggel rendelkezik a postfix, de a legtöbb olyan értékre van állítva ami megfelel nekünk, a többihez pedig nem árt ismerni a hálózati kommunikáció alapjait, illetve az SMTP protokoll működését. Eddig megismerhettük a postfix felépítését és használatát akkor, ha vállalati környezetben, állandó internetkapcsolattal rendelkezünk. De mit tegyünk, ha otthon szeretnénk használni vagy olyan kis cégnél, ahol nincs állandó kapcsolatunk?
263.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A konfigurációhoz most is a main.cf fájlt használjuk, de lényegesen kevesebb beállítást kell elvégeznünk, mint állandó kapcsolat esetén. Meg kell viszont majd különböztetnünk azt az esetet, mikor egy cég nem állandó kapcsolattal rendelkezik, de van érvényes domain neve, és azt, amikor mi otthon használjuk a szoftvert. Előbbi esetben vegyük alapul az előző részben ismertetett beállításokat. Majd egészítsük azt ki a következő beállítással: relayhost = mail.szolgaltato.hu
Vagyis akire mutat az MX rekord -ennek magyarázatához szintén ajánlom az előző rész elolvasását. Még egy dolgunk van. Mivel nem küldünk folyamatosan adatot a szolgáltató felé, ezért az smtp protokollon keresztüli levéltovábbításra nincs szükség állandóan. Ezt a következőképpen adjuk a postfix tudtára: defer_transports = smtp
Ekkor addig gyűlnek a levelek, amíg ki nem adjuk azt a parancsot, hogy ürítse ki a várakozó levelek sorát és küldje el a szolgáltatón keresztül. Ezt a következő parancs segítségével hajtjuk végre: $ postfix flush
Ezt érdemes berakni abba a szkriptbe, ami tárcsázás és bejelentkezés után hajtódik végre, hogy mindig elmenjenek a levelek és ez automatikusan történjen. Érdemes lehet még berakni a konfigurációs fájlba a következő sort: disable_dns_lookups = yes
Ezzel kikapcsoltuk a postfix azon szolgáltatását, hogy megkeresi nekünk a cél domainnévhez a levelező kiszolgálót. Figyelem! Ekkor IP számmal kell megadni a relayhost változó értékét! Tulajdonképpen az otthoni konfiguráció nem sokban különbözik attól, amit egy kisebb cégnél használunk. Mindössze annyi a különbség, hogy itt a szolgáltató domainnevét és gépeinek elérhetőségét adjuk meg saját gépnévnek. Legyen például szolgaltato.hu akitől kapjuk az elérést és legyen mail.szolgaltato.hu a mail szerver amin keresztül mi küldjük a leveleinket. Ekkor a következőképpen fognak kinézni az erre vonatkozó sorok: myhostname = sajat.szolgaltato.hu mydomain = szolgaltato.hu myorigin = $mydomain
Ezenfelül szükséges még beállítani az alábbi paramétert: masquerade_domains = szolgaltato.hu
Ezzel elértük, hogy minden kimenő levelet átenged a szolgáltató és minden levél @ utáni részében a szolgáltató neve fog szerepelni, így a válaszok is megérkeznek hozzánk. 264.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Qmail Miért váltsunk a qmail-re? Ha már editáltál valaha sendmail.cf file-t, tudod miért. De persze vannak más indokok is. Nézzünk párat: - Biztonság. A qmail biztonságos. Ezt az állítást alátámasztja a qmail forgalmazók által felajánlott 1000$-os díj. Egy év elmúltával sem igényelte senki, így átutalták a Free Software Foundation-höz. Dan Berstein, a program írója jelenleg is fenntart egy 500$-os összeget annak, aki biztonsági lyukat talál a qmail-ben. - Sebesség. A qmail képes napi milliós nagyságrendű levélforgalmazásra egy közepes rendszeren. Még egy 486-os is tud 100000 üzenetet küldeni vele naponta, köztük párhuzamosan többet is. - Megbízhatóság. A program kiírja a lemezre a leveleket, mielőtt jelenti a sikeres továbbítást. Emiatt, még ha áramkimaradás lép is fel, a qmail egyetlen levelet sem veszít el. - Különlegesen könnyű virtuális domén-kezelés. Még egy kiegészítő is létezik vchkpw néven, ami lehetővé teszi virtuális POP-domének kezelését. Ezt a csomagot használva lehetővé válik olyan POP felhasználók „készítése”, akiknek még accountjuk sincs a UNIX rendszeren. - Felhasználó által vezérelhető levelezőlista-program, az ezmlm. - Még egyszerűbb, magától értetődő és egyszerű adminisztrálás. Amikor most azt mondom, hogy a qmail egyszerűbb, mint a sendmail, hinned kell nekem, habár az első pár órában nem így fog tűnni. A dokumentáció, annak ellenére, hogy jól megírt és teljes, néha egzotikus bír lenni. Nagy része nem lépésről lépésre vezet végig, mint egy HOGYAN. A qmail minden egyes levélforgalmazással kapcsolatos speciális feladatot szétoszt különböző programok között. Minden program független egymástól. Ez a modell számos előnyt rejt, pl. a könnyű használhatóságot, a gyorsabb hibakeresést, és egyéni eszközökkel való együttműködés lehetőségét. Követelmények Mielőtt egyáltalán megpróbálnánk installálni, a következő feltételeknek teljesülni kell: - UNIX vagy azzal kompatíbilis operációs rendszert kell futtatnod. A qmail-hez tartozó README file-ban több olyan oprendszer is fel van sorolva, amivel már működésre bírták a programot. - Lennie KELL egy működő DNS-szerverednek, és a rendszerednek rendelkeznie kell DNS névvel. A qmail NEM keresgél az /etc/hosts file-ban domén-nevek után. Egy módszer létezik ugyan a /var/qmai/control/smtproutes file használatával, de ez nem ajánlott illetve célszerű a legtöbb esetben. - Egy működő fordítóprogramra is szükség van. Ha nem „cc” paranccsal kell meghívni a Te rendszereden, akkor editálnod kell a conf-* file-okat a forráskönyvtárban.
265.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A mi qmail installációnk A qmail nagymértékben rugalmas. Rengeteg féleképpen lehet installálni. Ezt a HOGYAN-t pontosan követve azonban egy a sendmail-éhez nagyon hasonlító rendszert fogsz kapni: - Támogatást az /etc/aliases file használatához - Támogatást a .forward file-ok használatához Feltételezem továbbá, hogy: - Legalább alapvető fogalmad van a UNIX-ról és annak működéséről - Tudod, hogyan kell felhasználókat létrehozni, és konfigurációs file- okat kezelni a saját rendszereden - A GNU tar / gzip / binutils / gcc és hasonló programokat használod. A qmail saját könyvtárának elkészítése Első dolgunk a qmail saját könyvtárának elkészítése lesz. Ebben foglaltatik majdnem a teljes program, beleértve a konfigurációs file- kat, a várakozási sort (queue), és a binárisokat. # mkdir /var/qmail
A szükséges felhasználók és csoportok előkészítése Most el kell készítenünk az összes felhasználót és csoportot, amiknek a neve alatt a különböző démonok futnak majd. Lásd az INSTALL.ids file-t! Ha Debian Linux -ot használsz, ezek már elő vannak készítve (milyen jó is a Debian! ). A következő parancsok működnek a legtöbb Linux-on és Solaris-on is: # # # # # # # # #
groupadd nofiles useradd -g nofiles -d /var/qmail/alias -s /bin/false alias useradd -g nofiles -d /var/qmail -s /bin/false qmaild useradd -g nofiles -d /var/qmail -s /bin/false qmaill useradd -g nofiles -d /var/qmail -s /bin/false qmailp groupadd qmail useradd -g qmail -d /var/qmail -s /bin/false qmailq useradd -g qmail -d /var/qmail -s /bin/false qmailr useradd -g qmail -d /var/qmail -s /bin/false qmails
Megjegyzés: a felhasználók előkészítéséről más oprendszerek alatt, vagy ha problémáid akadtak a fenti parancsokkal, olvasd el az INSTALL.ids-t. Figyelmeztetés: Ha nem készíted elő ezeket a felhasználókat és csoportokat, a qmail nem fog működni!
266.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Konfigurálás Miután a telepítés megvolt, konfigurálnunk kell a programot. A legkönnyebb módja ennek a következő: root:/usr/local/src/qmail-1.03# ./config
A config szkript egy inverz DNS lekérdezést próbál meg végrehajtani az összes helyi IP címen. Ha ez nem működik, akkor némi kézimunkára lesz szükségünk. Olvasd el az INSTALL.ctl-t. Amíg az összes helyi IP címed szerepel a DNS-ben, nem lehet semmi problémád. Egyébként tedd a következőt: root:/usr/local/src/qmail-1.03# ./config-fast a.géped.domain.neve
Ez elkészíti a futáshoz legszükségesebb konfig-file-okat. Miután futtattad a fenti szkriptek valamelyikét, valószínűleg még be kell állítanod néhány file-t a /var/qmail/control könyvtárban, hogy használható rendszert kapj. Figyelem: ha a config szkript nem működik valami okból, ne folytasd tovább az installálást! Ha nem konfigurálod a rendszert, nem működik rendesen, és ezen felül egy „open relay-t” (bárki számára levéltovábbításra felhasználható mailszerver – a ford.) fogsz üzemeltetni! Az alias-ok beállítása root:/usr/local/src/qmail-1.03# cd ~alias root:/var/qmail/alias# echo adam > .qmail-root root:/var/qmail/alias# echo bob > .qmail-postmaster root:/var/qmail/alias# echo bob > .qmail-mailer-daemon
A qmail file-okat használ az alias-ok (álnevek) használatához. Ez az egyik legfőbb dolog, amiben különbözik a sendmail-től (még szólunk erről alább). Figyeld meg, hogy van egy alias a root számára is. Ez azért van, mert a qmail nem fogad levelet a root felhasználónak. Pontosabban, a qmail-lspawn program azonnal kilép és visszadobja az üzenetet, ha a UID = 0. Olvasd el az INSTALL.alias-t további részletekért. A daemontools telepítése és a vezérlőkönyvtárak elkészítése Miután installáltad a qmail-t, most azt kell elérnünk, hogy el is induljon, miután a rendszerünk elindul. Ennek elérésben segít a svscan program, ami a daemontools csomag része. Ha eddig rendben követted a doksit, a daemontools már installálva van a /usr/local/bin-ben. Először el kell készítenünk a daemontools szervízkönyvtárait. Dan Berstein a /service könyvtárat ajánlja erre a célra. Ha másik helyet választasz, ám legyen.
267.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Csak ne felejtsd el az alábbiakban mindenhova azt behelyettesíteni: # # # # # # # # # # # # #
mkdir mkdir mkdir chmod mkdir mkdir chmod mkdir mkdir mkdir mkdir chown chown
/service /var/qmail/supervise /var/qmail/supervise/qmail-send +t /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-send/log /var/qmail/supervise/qmail-smtpd +t /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-smtpd/log /var/log/qmail /var/log/qmail/qmail-send /var/log/qmail/qmail-smtpd qmaill /var/log/qmail qmaill /var/log/qmail/*
A svscan működése miatt most nem akarunk egyetlen könyvtárat sem csinálni a /service alatt. Ehelyett valódi könyvtárakat készítünk a /var/qmail/supervise alatt, majd később szimbolikus linkeket helyezünk el a /service alatt ezekre a könyvtárakra, de még nem most. A következő dologként azt kell elérni, hogy a svscan minden rendszerindításnál elinduljon. Ez pl. a következő rc szkripttel megy: #!/bin/sh -e # /etc/init.d/svscan : start or stop svscan. #start-qmail case "$1" in start) echo -n "Starting djb services: svscan " env - PATH="/usr/local/bin:$PATH" svscan /service & echo $! > /var/run/svscan.pid echo "." ;; stop) echo -n "Stopping djb services: svscan " kill `cat /var/run/svscan.pid` echo -n "services " svc -dx /service/* echo -n " logging " svc -dx /service/*/log echo "." ;; restart|reload|force-reload) $0 stop $0 start ;; *) echo 'Usage: /etc/init.d/svscan {start|stop|restart}' exit 1 esac exit 0
268.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Ha ezt korrektül beilleszted az init-folyamatba, a svscan el fog indulni minden bootolásnál. Nézd meg, hogy a rendszereden hogyan kell az indulási folyamatot befolyásolni. Ha pl. Debian-t használsz, a következőt tedd (feltéve, hogy a szkripted az /etc/init.d/svscan): # update-rc.d svscan defaults Magának a qmail-nek a vezérléséhez a következő szkriptet használhatjuk: #!/bin/sh -e # /etc/init.d/qmail : start or stop the qmail mail subsystem. #start-qmail PATH=$PATH:/usr/local/bin:/var/qmail/bin case "$1" in start) echo -n "Starting mail-transport-agent:" svc -u /var/qmail/supervise/* echo -n " qmail" svc -u /var/qmail/supervise/*/log echo " logging." ;; stop) echo -n "Stopping mail-transport-agent: " echo -n " qmail" svc -d /var/qmail/supervise/* echo " logging" svc -d /var/qmail/supervise/*/log ;; restart) $0 stop $0 start ;; reload|force-reload) echo "Reloading 'locals' and 'virtualdomains' control files." start-stop-daemon --stop --quiet --oknodo --signal HUP --exec /usr/sbin/qmail-send ;; *) echo 'Usage: /etc/init.d/qmail {start|stop|restart|reload}' exit 1 esac exit 0
Megjegyzés: a svscan szkrip-tel ellentétben, ezt NEM kell az init szkriptek közé tenni. Ez arra szolgál, hogy azután kontrollálja a qmail- t, miután azt a svscan elindította. Most már ideje valamit csinálni a /var/qmail/supervise alatt is. Először lépjünk be a /var/qmail/supervise/qmail-send-be. Itt készítsünk egy run nevű file-t a következő tartalommal: #!/bin/sh exec /var/qmail/rc
269.
Barhács OktatóKözpont
Majd készítsük tartalommal:
el
Linux rendszergazdai modul - 11. fejezet
a
/var/qmail/supervise/qmail-send/log/run-t
a
következő
#!/bin/sh exec /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t s2500000/var/log/qmail/qmail- send
Majd hasonló file-okat csináljunk a /var/qmail/supervise/qmail-smtpd- ban is. A run tartalma: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \ -u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
A log/run-é pedig: #!/bin/sh exec /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t s2500000 /var/log/qmail/qmail- smtpd
Hozzáférés-szabályozás Mielőtt a qmail-smtpd elindulna, egy kis hozzáférés-szabályozást kell végeznünk. Ennek a legegyszerűbb módja az /etc-ban készítendő file- ok használata. Én az /etc/tcp.smtp file-t használom. Ha nem akarsz semmilyen szabályozást, akkor ebbe mindössze egy sort kell elhelyezni: :allow
Az alapértelmezett beállítás nem enged meg SEMMILYEN relay-ezést, még a localhost-ról sem. Ha a localhost-ról és a helyi hálózatodról engedélyezni akarod ezt, akkor a file tartalma valami hasonló legyen: 127.0.0.1:allow,RELAYCLIENT="" 192.168.1.:allow,RELAYCLIENT="" :allow
Miután elkészítetted a szabályokat, aktiválnod kell őket. A tcpserver program egy cdb (adatbázis) file-t olvas. Emiatt a tcprules programot kell használnod arra, hogy cdb file-t készíts a fenti egyszerű szövegfile-ból, a következő paranccsal: # tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
270.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
A sendmail letiltása Ha idáig eljutottál, az azt jelenti, hogy már kész vagy a jó öreg, rozoga sendmail kipusztítására. Először keresd meg a sendmail démon PID- jét és állítsd le! A Linuxon: # killall -TERM sendmail
Ha úgy érzed, ez nem okozott elég örömöt, indítsd újra a sendmail-t, majd ismételd meg a fenti lépéseket. Majd: # # # # # #
mv mv ln ln mv ln
/usr/lib/sendmail /usr/lib/sendmail.old /usr/sbin/sendmail /usr/sbin/sendmail.old -s /var/qmail/bin/sendmail /usr/lib/sendmail -s /var/qmail/bin/sendmail /usr/sbin/sendmail /usr/sbin/newaliases /usr/sbin/newaliases.old -s /var/qmail/bin/newaliases /usr/sbin/newaliases
Fontos: ne felejtsd, hogy a sendmail-t valószínűleg valamelyik init szkripted indítja. Ezért el kell onnan távolítanod, hogy ne indulhasson újra a következő boot-olásnál. Nézd meg, hogy megy ez a Te rendszereden. A /var/qmail/rc elkészítése A /var/qmail/rc egyike a legfontosabb qmail file-oknak. Ő felelős a qmail indításáért, de még fontosabb szerepe, hogy megadja a programnak azt, mit kell tennie a beérkező levelekkel. Az rc file tartalmazza az alapértelmezett levéltovábbítási utasításokat. Mi azt szeretnénk, hogy a rendszer kezelje a .forward file-okat, és a leveleket rakja a /var/spool/mail-be. Ezért az rc file tartalma a következő: #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start '|dot-forward .forward |preline procmail'
A Maildir A Maildir formátum egy alternatíva a levéltovábbításra. A következő előnyei vannak: - Nincs lock-olás, tehát NFS-en is működik - Lehetővé teszi a qmail-pop3d használatát, ami a qmail biztonságos POP3 démonja - A programoknak nem kell mindig stat() funkciót végezni a /var/spool/mail-en, valahányszor megnyitják a levelesládádat. Nagy rendszereken ez gyötrelmesen lassúvá teheti a dolgokat - A mutt levelezőprogram helyből támogatja
271.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Vannak hátrányai is: - Néhány népszerű levelezőprogram, mint pl. a Pine, patch-elésre szorul és újra kell fordítani a Maildir használatához. - A Maildir-ek minden üzenetet külön file-ban tárolnak. Ez több inode felhasználásával jár, mint ha egyetlen file-ban tárolnánk a leveleinket. Ha mégis ilyen formátumú levéltovábbítást akarsz a felhasználók saját home könyvtárában található Maildir-ekbe, akkor az rc tartalma ilyen legyen: #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start '|dot-forward .forward ./Maildir/'
A Maildir-nek annak felhasználónak a tulajdonában kell lenni, akinek a home könyvtárában található. Ha root-ként készítesz Maildir-t, akkor a chown paranccsal meg kell változtatni a tulajdonjogokat. Jó ötlet a Maildir-t az /etc/skel-ben létrehozni, így amikor új felhasználót hozol létre, mindig hozzá fog tartozni. További információt az INSTALL.maildir tartalmaz. A qmail elindítása Minden a helyén van immár, készek vagyunk a program indítására. Mivel az svscan már fut, már csak symlinkeket kell csinálnunk a /service-ben a /var/qmail/supervise alatt lévő könyvtárainkra. # ln -s /var/qmail/supervise/* /service/
A qmail szervizeinek el kell indulni egy percen belül. Ennek ellenőrzésére a ps parancs szolgálhat. # ps auxw | grep qmail
Több taszkot kell látnod, de legalább a qmail-send-et, és néhány supervise processzt. Ha ezek nem jönnek fel egy percen belül, valamit rosszul csinálhattál, ellenőrizd újra a lépéseket. Miután a qmail elindult, tesztelheted a helyi levélforgalmazást a TEST.deliver file alapján. Győződj meg róla, hogy a qmail-smtpd fut: telnetelj a helyi gépre, a 25-ös portra. rblsmtpd Az rblsmtpd egy általános program, ami együttműködik minden, a tcpserver felügyelete alatt futó programmal (pl, qmail, sendmail). Ha csak azokat a site-okat akarod blokkolni, amelyek a MAPS RBLadatbázisában vannak felsorolva, mást nem kell megadni neki argumentumként, mint az SMTP démon-t. Ha viszont más blokkoló rendszerek, mint pl. a Relay Spam Stopper (RSS) alapján akarsz dolgozni, az rblsmtpd több példányát kell futtatnod, a –b kapcsolót kell használnod annak a szervernek a nevével, amelyen az egyes meghívásokkor körül kell nézni az adatbázisban.
272.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Ahhoz, hogy az rblsmtpd is része legyen a qmail-nek, a /var/qmail/supervise/qmailsmtpd könyvtár run file-jában kell javítanunk: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \ -u $QMAILDUID -g $NOFILESGID 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2>&1
Ha jó szemed van, észreveheted, hogy az rblsmtpd-re vonatkozó bejegyzést a qmailsmtpd processz elé írtuk be. Ez blokkolja az összes olyan levelet, ami szerepel az rbl.maps.vix.com zónájában. Ha ezen kívül még az RSS-t is használni akarod, még egy rblsmtpd kell a qmail-smtpd elé: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \ -u $QMAILDUID -g $NOFILESGID 0 smtp rblsmtpd \ rblsmtpd -rrelays.mail-abuse.org /var/qmail/bin/qmail-smtpd 2>&1
Annyi processzt illesztesz be, amennyit akarsz, hogy különböző „feketelistákat” is ki tudj szűrni. A vezérlő file-ok Miután a rendszered működőképes, van még néhány dolog, amit meg kell még tanulnod. Először is, tudnod kell, hogy a virtuális host-okat jóval könnyebb megcsinálni, mint a sendmail-ben. Nézz be a /var/qmail/control könyvtárba. Nagy valószínűséggel a következőket látod: /var/qmail/control$ ls -la total 8 drwxr-xr-x 2 root qmail 1024 Sep 29 10:08 . drwxr-xr-x 10 root root 1024 Sep 18 02:48 .. -rw-r--r-- 1 root root 22 Sep 18 02:40 defaultdomain -rw-r--r-- 1 root root 27 Sep 18 02:40 locals -rw-r--r-- 1 root root 27 Sep 18 02:40 me -rw-r--r-- 1 root root 17 Sep 18 02:40 plusdomain -rw-r--r-- 1 root root 27 Sep 18 02:40 rcpthosts -rw------- 1 root root 147 Sep 29 10:08 virtualdomains
A 3 legfontosabb file (fontosságuk sorrendjében): - me – (a qmail tulajdonképpen működik ezzel az egy file-al is. Ez tartalmazza a gép teljes domén-nevét) - rcpthosts – (az összes host neve, ahonnan a qmail levelet fogad. Az összes helyi domén-ed benne kell hogy szerepeljen) FONTOS: a qmail visszadobja azokat a leveleket, amelyek olyan doméneknek szólnak, amelyek az rcpthosts-ban nem szerepelnek. Ezért minden létező és virtuális domén-ednek benne kell ebben lennie.
273.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 11. fejezet
Ha ez a file nem létezik, a géped „open relay”-ként működik. Az ilyen gép nem elfogadható a mai Interneten, és ha mégis üzemelteted, hamarosan benne leszel a különböző, ezekre vonatkozó feketelistákban, mint az ORBS vagy az RSS. locals – (minden helyi gép neve. Az ezekre küldött leveleket a rendszer az /etc/passwd-ben felsorolt user-eknek továbbítja.)
dot-qmail A dot-qmail fontos fogalom, és azt hiszem megérdemel egy külön részt. Azért, mert ha egyszer felinstalláltad a qmail-t, utána 95%-ban ezel fogsz foglalkozni. A dotqmail mondja meg a qmail-local-nak, mit csináljon a beérkező levelekkel. A felhasználó továbbíthatja, forwardolhatja az üzenetet, levelezőlistát csinálhat (mint pl. a qmail levelezõlista), álneveket készíthet, és külső programokat hívhat meg, amelyekkel pl. automatikusan meg tud válaszolni bizonyos leveleket. A dot-qmail a user saját könyvtárában található, .qmail file-ok formájában. A qmaillocal elolvassa ezeket a file-okat, hogy eldöntse, mit csináljon a levelekkel. Ha a qmail nem talál egy ilyen file-t sem, akkor az alapértelmezett levéltovábbítási szabályokat veszi figyelembe, amik a /var/qmail/rc- ben vannak (vagy bármilyen, a qmail indítását végző szkriptben). Lásd a dot-qmail manual oldalán a felhasználható parancsok listáját. Az egyik jó dolog a dot-qmail-ben, hogy a user saját álnevet készíthet magának. Ha az én accountom pl. „adam”, akkor készíthetek egy .qmail-info nevű file-t, ami tartalmazza azokat az utasításokat, ami az adam-info névre érkező leveleket lekezeli. Annyi alias-t használhatsz, amennyi tetszik. Virtuális domének Hála a dot-qmail-nek, a virtuális doméneket ugyanolyan könnyű elkészíteni, mint az egyszerű alias-okat. A virtualdomains file a következő formátumot használja: example.com:user
ahol a user annak a felhasználónak a neve, aki az erre a domén-re szóló leveleket kapja. Ez elsőre bonyolultnak hangzik, de igazából nem az. Ha az én accountom, adam, benne van a virtualdomains-ben, hogy ő kapja az example.com-ra szóló leveleket, akkor bármilyen .qmail file, amit én csinálok a home könyvtáramban, úgy működik, mint egy álnév az example.com-ra vonatkozóan. Tehát, a .qmail-info lesz az info@example .com. De mi van, ha több virtuális domén-t is akarok az account-ommal kezelni? A virtualdomains file ezt is egyszerűvé teszi. Ahelyett, hogy a user-t tenné meg címzettnek, a user-ext-et használja fel erre. Például: example.com:adam-example example2.com:adam-example2
274.
Barhács OktatóKözpont
Linux rendszergazdai modul - 11. fejezet
Ezzel a konfigurációval a virtuális host álnevek készítése ugyanilyen egyszerű, az egyetlen különbség, hogy egy kiterjesztést kell a dot- qmail filenév után raknunk. Így az [email protected] .qmail- example-info lesz, az [email protected] lesz a .qmail- example2.info, stb. Ha a .qmail-ext nem létezik, a qmail-local megpróbálkozik néhány alapértelmezett .qmail file-lal. Pl., ha a kiterjesztés foo-bar, a qmail- local először a .qmail-foo-bar-t próbálja ki, aztán a .qmail-foo-default- ot, majd végül a .qmail-default-ot. Ha ezek egyike sem létezik, a qmail-local visszadobja az üzenetet. (Kivétel: az alap felhasználói címnél a qmail-local a nemlétező qmail file-t egyenértékűnek tekinti az üressel.) Ha virtuális domén-eket akarunk kezelni, a DNS szerveren a megfelelő MX rekordoknak szerepelnie kell, tehát pl. : MX 10 example.hu. ; Primary MX MX 20 mittu.domain.hu. MX 30 nemtu.domain.hu.
A /var/qmail/control/virtualdomains-ben álljon a következő 2 sor: mittu.domain.hu:pistike-alfa nemtu.domain.hu:pistike-beta
A /var/qmail/rcpthosts file-ban a végére írjuk be: mittu.domain.hu nemtu.domain.hu
Indítsuk újra a qmail-t: # /etc/rc.d/init.d/qmail reload
A pistike nevű felhasználó home könyvtárban léteznie kell a következő két file-nak: .qmail-alfa-alma és .qmail-beta-barack. Ezekben levéltovábbító utasítások vannak, pl, az elsőben: ./almanak
a másodikban: ./baracknak
Ha most ezek után levelet küldünk az [email protected] -ra, akkor azt pistike kapja meg, és az ő home könyvtárában lévő almanak nevű file-ba kerül, ha pedig a [email protected] -ra, az pedig a baracknak nevűbe.
275.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
A Samba Mi is az a SaMBa? SaMBa olyan programcsomag, amely elérhetővé teszi a kliensek számára a kiszolgáló file- és nyomtatóterületeit az SMB (Session Message Block) protokollon keresztül. Eredetileg Unixra irták, de ma már futatható VAX VMS, Novell Netware, OS/2 és AmigaDOS operációs rendszereken is. Néhány fogalom - Share: megosztott erőforrás. Ez lehet file vagy nyomtató szolgáltatás. A megnevezése \\server\share módon történhet. - Browsing: A gépek és gépeken lévő share-ek listájának összeszedése, megfelelő hirdetése, keresés a gépek vagy share-ek között. - Workgroup: Egy munkacsoportba tartozó gépek. Minden workgroupnak van egy master browsere. A gépek szavazással döntik el, hogy ki legyen a master browser. - Domain: tartomány. Ez nagyon hasonlít a workgroupra, de annál legalább egy dologban többet tud: tartalmaz egy kitüntetett számítógépet, a tartományvezélőt (domain controller) - Domain controller: tartomány vezérlő gép, tulajdonképpen a szervernek megfelelő. Ha a kliensek számára előírjuk egy tartományba belepést, akkor nem a kliens, hanem a tartomány vezérlő végzi el a felhaszálóinév/jelszó ellenőrzést, sikeres belepés esetén pedig lefuttathattat egy logon script-et a kliensel. A SaMBa fő részei - smbd: Az SMB szerver. Ez kezeli a kapcsolatokat, ellenőrzi a jogokat és végzi az aktuális adatátvitelt. - nmb: Netbios Name Server. Segit a klienseknek megtalálni a szervereket, ö intézi a böngészést (browse) és a maga módján a tartományvezérlő (domain controller) szerepet is betöltheti. - smbclient: Unix-os kliens program, ftp szerű felhasználói illesztővel. - smbrun: Egy kis "glue" (ragasztó) program, hogy az smbd biztonságosan tudjon külső programokat hívni. - testprns: program a szerver nyomtatóeléréseinek tesztelésére. - testparms: program a konfigurációs file szintaktikus ellenörzésére szolgál. - smb.conf: a SaMBa konfigurációs file. Általaban a /usr/local/samba/lib/smb.conf helyen található, de ha Linux diszrtibució (mint példaul a Debián) tartalmazza, akkor az /etc/smb.conf helyre kerül. - dokumentáció: Nagyon hasznos. Nem csak a SaMBA-hoz, de nagyon érdekes dolgokat tudhatunk meg a kereskedelemben kapható egyéb SMB-s rendszerek belső lelkivilágáról is. Ha mi telepítjük a SaMBa-t, akkor a /usr/local/src/samba1.9.16p11/docs/ könyvtárban található, a disztribució részeként pedig a verb+/usr/doc/samba+ helyen keresendő. Továbbá vannak szabvanyos UNIX kézikönyv lapok, nagyon tanulságos a man smb.conf.
276.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
Elterjedtebb kliensek - LAN manager client for DOS: Ez egy szabadon letölthető Microsoft kliens. - Windows for Workgroups 3.11: Nem ingyenes, de a TCP/IP stack szabadon letölthető hozzá. A trumpet winsock nem elég, mert nem csak az alkalmazásoknak, de a rendszerrnek is kell a TCP/IP. Nem csak kliens, de szerver is lehet. Angol verzió 8. lemezén található az admincfg.exe, Ezzel le lehet tiltani a password cache-t, ami elég nagy biztonsági rést üthet az egyébként jól védett UNIX-os rendszerünkön is. ( A password cache fájlok felhasználónév.pwl nevüek, és többek között tartalmazzák azt, hogy az adott felhasználó melyik share-re, milyen jelszóval csatlakozott. Elvileg biztonságos a kódolása, de tudott, hogy melyik pozición tartalmazza a felhasználó nevet (ami a file neve is!), ezt kihasználva egy jó gépen néhány óra alatt feltörhető). Az Microsoft TCP/IP stack nehezen él együtt az IPX/SPX-el, ha ilyenre van szükség, akkor inkább használjunk win95-öt. - Windows 95: Egyes verzióknál, ha megosztott nyomtató van, akkor a \windows\system\ könyvtár mindenki által olvasható. A rendszer itt tárolja a usernev.pwl fájlokat. Lehetséges következményei már ismertek fentebbről. - Windows NT 3.x WorkStation: Megbizható kliens, de sajnos a SaMBa még nem tud domain controller lenni NT-knek. - Windows NT 4.x WorkStation: Kedveli a titkosított jelszavakat. Ha egyszer egy gépről megjegyzi, hogy tudja kezelni a titkosított jelszavakat, akkor késöbb már szóba sem áll vele, ha az a gép nem így kéri. Ha ilyen kliensünk vagy szerverünk van, akkor jobb a legutolsó SaMBa verziót használni. Néhány kliens nem rendelkezik olyan lehetőséggel, hogy más felhasználóként kapcsolódjunk egy share-hez, mint ahogy bejelentkeztünk. Ez a "Kapcsolodás másként" (Connect As). Ekkor használhatjuk a \\server\share%username formát. Ez akkor is használható, ha azt tapasztaljuk, hogy a kliens figyelmen kivül hagyja azt, amit megadunk neki a fenti dialógus ablakban. Egy példa konfiguráció Itt bemutatok egy általam évek óta használt konfigurácót. Tervezett csoportok és jogaik Egy felhasználó vagy a user vagy a jht csoportba tartozik elsődlegesen. A többi csoport úgynevezett másodlagos. (Egy már meglévő felhasználót a adduser lajbi masik parancsal tehetünk be másodlagos csoportba. Az alábbi táblázatban az r olvasási (read), a w irási (write) az x böngészési (browse) jogot jelent. Egy sor egy share, egy oszlop egy group. user homes -rw printers x-admin x-tdk x-alkalmazasok x-annonftp xrnetlogon xrefi ---
jht -rw xwxrw x-xrxrxr---
pusr -rw x-x-x-xrw xrxrw ---
277.
tdk -rw xwx-xrw xrxrxr---
efi -rw x-x-x-x-xrxr-rw
guest --x-x-x-x-xrxr---
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
Szavakkal elmondva: a user csoport tagjai elérhetik saját home könyvtárukat irásra olvasásra, és az annonymous ftp területet olvasásra. A jht csoportnak van egy közös munkaterülete admin névvel. A pusr (power user) csoport irhat is az alkalmazasok share-re. Ök installálhatnak a kliensek számára programokat. A tdk csoport hasonló a jht-hoz, de ők nem az admin-t használjak, hanem annak egy alkönyvtárát, tdk névvel. Az efi share érdemel egy kis figyelemet. Ez senki számára nem browseolható, tehát csak úgy lehet elérni, ha valaki tudja hogy létezik, es beirja, hogy \\jht\efi. Innentöl már a normális kapcsolódási eljárás folyik le. Az ezt megvalósító smb.conf így néz ki: ; Configuration file for jht. ; last update: Lajbi 96.11.05 [global] server string = %h Jarmu- es Hotechnika tanszek, Samba %v workgroup = JARMUTECHNIKA printing = bsd printcap name = /etc/printcap load printers = yes guest account = guest security = user hosts allow = 192.188.244. 192.188.243. 192.188.245. domain logons = yes domain master = yes guest ok = no logon script = %G.bat max diks size = 120 log file = /usr/local/samba/var/log.%m lock directory = /usr/local/samba/var/locks share modes = yes os level = 34 remote announce = 192.188.243.255/JHT 192.188.245.255/JHT message command = /usr/bin/mail -s 'message from %f on %m' root < %s; rm %s ; sajat home konyvtar mindenkinek [homes] comment = Home directories browseable = no read only = no create mode = 0700 mangled map = (*.html *.htm) ; nyomtatas csak a jht es tdk csoportnak [printers] comment = All Printers path = /var/tmp browseable = no printable = yes public = no writable = no create mode = 0700 ; maganterulet valid users = @jht, @tdk
278.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
; kozos munkaterulet a jht group tagjainak, full access minden tagnak [admin] comment = Tanszek kozos dolgai path = /home/admin valid users = @jht ; ok kapcsolodhatnak public = no writable = yes printable = no force user = admin force group = jht ; a leterhozott file-ok tulajdonosa admin.jht lesz create mode = 770 ; a csoport szabadon garazdalkodhat ; kozos munkaterulet a tdk group tagjainak, az [admin] resze! [tdk] comment = TDK-s hallgatok terulete path = /home/admin/tdk valid users = @tdk public = no writable = yes printable = no force user = admin force group = jht create mode = 770 ; dos/windoze binarisok a jht,tdk groupnak es guest usernek, de read-only ; pusr group irhat ra! [dosbin] comment = DOS es Windows alkalmazasok path = /home/jht/dosbin writable = no printable = no write list = @pusr valid users = @jht,@tdk force user = jht force group = jht ; ez a dosbin meg1x [alkalmazasok] copy = dosbin ;annon ftp terulet, de itt read-only az incoming is [anonftp] comment = JHT anonnymous ftp terulete path = /home/ftp/pub public = yes writable = no printable = no
279.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
; domain controller miatt [netlogon] comment = Domain Controller logon directory path = /home/jht/netlogon writable = no printable = no guest ok = yes write list = @pusr browseable = no force user = jht force group = jht ; ezek itt nem browse-olhato, csak azoknak, akik tudnak rola :-) ; egy project altal hasznalt terulet ; efi: EFI project tagjainak (efi group) [efi] comment = EFI project path = /home/efiproject valid users = @efi public = no writable = yes printable = no force user = lajbi force group = efi create mode = 770 browseable = no
A SaMBa a valid users opcióval szabályozza, hogy ki kapcsolódhat az adott sharehez. Az elindított smbd procces ugyanolyan jogokkal rendelkezik mint belépett felhasználó, vagy (ha van) a force user és force group előír. De ekkor meg nem jelenti azt, hogy minden fájlt fölött urtalkodik, mert a hagyományos UNIX-os jogosultságok érvényben vannak. Ez nem egyszerű, mert harom szinten szabályozhatjuk a hozzáféréseket: - ki kapcsolódhat az adott share-hez? (valid users ) - ha kapcsolódott, akkor milyen jogosultságuvá válik? ( force user, force group ) - a UNIXos fájlok hagymányos hozzáférés szabályozása (tulajdonos, csoport, többiek). Ezért nézzünk még két konfigurációs fájlt. Egy rövid /etc/passwd részlet: lajbi:xxx:510:101:Lajber Zoltan,aula 120,1535,,:/home/lajbi:/bin/bash znagy:xxx:505:100:Nagy Zoltan:/home/znagy:/bin/bash czanik:xx:512:100:Czanik Andras,ELTE JTK,,,:/home/czanik:/bin/bash admin:xxx:1002:101:Tanszeki adminisztracio,aula 125,1430:/home/admin:/bin/bash jht:xxxxx:1003:101::/home/jht:/bin/bash fjuhasz:x:1008:100:Juhasz Ferenc,GM IV,,,:/home/fjuhasz:/bin/bash jritz:xxx:1013:100:Ritz Jozsef,GM V/8,C/4026,,:/home/jritz:/bin/bash guest:xxx:1016:109::/home/guest:/bin/true
és /etc/group részlet: users:*:100: jht::101:lajbi,ari,jbeke,llaib,admin pusr::103:jht,lajbi tdk::104:znagy,tracz,losgyan,fjuhasz,horvath,jritz,bhamza,beno efi::107:lajbi,fjuhasz
280.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
Mivel a Linuxos gép tartományvezérlő is, szükség van a kliensek számára lefuttatható logon scriptre is. Mivel az smb.conf-ban a logon script = %G.bat sor szerepel, a beléptetett felhasználó elsődleges csoport neve szerinti batch fájl fog elindulni. Ezek: users.bat: net use i: net use h: net use w: jht.bat: net use i: net use h: net use w:
\\jht\homes /yes \\jht\tdk /yes \\jht\alkalmazasok /yes \\jht\homes /yes \\jht\admin /yes \\jht\alkalmazasok /yes
Az smb.conf security opciója Ennek háromféle értéke lehet: - share Ez akkor jobb, ha többnyire olyan felhasználók kapcsolódnak a SaMBahoz, akiknek nincs account-juk a UNIX-os gépen. - user Ez akkor javasolt, ha a klienseken és a UNIX-on a login nevek megegyeznek. Gondot okozhat néhány furcsa tulajdonsággal rendelkező kliens program. A wfwg például ebben az esetben néha teljesen figyelmen kivül hagyja a "kacsolódás másként" dialogdobozba irt nevet és jelszót. Úgy tűnik, némelyik NT4-esnél van hasonló mizéria, ekkor használjuk a \\server\share%user formát. Bár ezt meg nem minden kliens fogadja el. - server Ekkor meg kell adni a password server = gepnev opciót is, és a felhasználói név/jelszó ellenörzést az adott gép fogja elvégezni. Ez általában egy NT AS szokot lenni. Hogyan is müködik ez? Az SMB szerver a kapcsolat létrehozásakor közli a klienssel, hogy milyen üzemmódban van. Ez azt befolyásolja, hogy a kliens milyen módon probálja azonosítani magát: - security = user :Elöször erről, ez az egyszerübb. Ez esetben a kliens küld egy session setup blokkot közvetlenül a protokoll egyeztetése után. Ez tartalmaz egy felhasználói név/jelszó párost. Ez esetben a szerver még nem tudja, hogy ez a kliens milyen share-ekhez fog fordulni, tehát a megadott felhasználói név, jelszó és természetesen a gép ismeretében dönthet arról, hogy elfogadja-e vagy nem a kérést. Ha ez megtörtént, akkor a kliens elvárja, hogy a késöbbiekben a tree connection blokkal mount-olni tudjon share-eket. Egy kliens több session setup kérést is küldhet. A szerver a válaszban ad egy "felhasználó azonosítót", így a kliens elvileg képes többszörözött kapcsolatok fentartására. - security = share: Ez az alapértelmezett a SaMBA-ban, mert ez volt készen elsőnek. A kliens ekkor azonosítani próbálja magát minden tree connect esetében, vagyis amikor mount-olni akar egy share-t. Ekkor viszont nem küld explicit felhasználói nevet, csak a kért share nevét és egy jelszót! A kliensek ekkor azt várják, hogy a egy jelszó egy share-hez tartozik, és nem egy felhasználóhoz. Windows for WorkGroups és a Windows 95-ben nincs felhasználói azonosítás, így arra nem lehetett építeni a védelmet, ezért ott a egy share-hez tartozik egy jelszó.
281.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 12. fejezet
A SaMBa mindig a UNIX rendszerü felhasználó/jelszó séma alapján azonosít és dönt a hozzáférésről. Sok kliens küld session setup blokkot még akkor is, ha share szintű az ellenörzés, és ebben megad egy felhasznói nevet, de nem ad jelszót. A SaMBa feljegyzi ezt a nevet egy lehetséges felhasználók listára. Amikor a kliens küld egy tree connection blokkott, akkor az ebben kért share neve is felkerül a lehetséges felhasználók listájára, továbbá az összes, az smb.conf file adott share-hez tartozó valid users sorában szereplő nevek. Ha a küldött jelszó bármelyik, a lehetséges felhasználók listáján szereplő névhez megfelel, akkor a kliens engedélyezett a hozzáférésre, mint az a felhasználó, ahol az egyezés történt. security = server : Ebben az esetben a SaMBa azt mondja a kliensének, hogy verb+security = user+ -en van. Amikor megkapja a felhasználói név/jelszó párost, akkor ezeket használva a SaMBa megpróbál belépni a password server-re. Ha ez sikerül, akkor elfogadja a kérést, különben nem.
A titkosított jelszavak A SaMBa a kapcsolat létrehozásakor nem csak azt közli, hogy milyen üzemmódban van, hanem azt is, hogy képes-e titkosított jelszavakat kezelni. Ha ezen opcióval fordítottuk a SaMBa-t, akkor visszaküld a kliensnek egy kulcsot is. Ez esetben a kliens az összes jelszavát titkosított formában fogja küldeni. Ekkor külön jelszó fájlt kell karbantartani a SaMBa számára, ugyanis kriptográfialilag lehetetlen a UNIX tipusú jelszavakat SaMBa tipusúra konvertálni. Előnyként jelentkezik, hogy a bizonyos kliensek felhasználói távolból is megváltoztathatják a jelszavukat, ehhez nem szükséges bejelentkezniük pl. telnet-el a SaMBa-s gépre. WINS Windows Name Server, a DNS es a netbios nevek közötti megfeleltetést segíti, alapértelmezetten be van kapcsolva. Ha már van NT-s WINS a hálózaton, ki kell kapcsolni. Windows-os hálózat elérése Linuxból Megosztások elérése Linuxból Érdemes beírni a Windows-os számítógép nevét és IP címét a /etc/hosts fájlba. Így legalább nyugodtan hivatkozhatunk rá, név szerint is. 193.214.38.28
kuksi2.igyuk.hu
kuksi2
Ahhoz, hogy felmountolhassuk egy Windows-os számítógép merevlemezét nem szükséges, hogy fusson az smbd és az nmbd szerver, mert ezek az ellenkező irányú kapcsolat kellékei. Viszont szükségünk van az smbmount parancsra, amelyet az smbfs csomagban található meg. Miután feltettük a csomagot, már csak egy könyvtárat kell kijelölnünk, ahová majd a Windows-os merevlemezt felmountoljuk.
282.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
És végül a parancs szintaktikája: smbmount //win_gép_azonosítási_név/a_vinyó_megosztási_neve /ahová_mountolom -P jelszó
Azaz jelen esetben: smbmount //kuksi2/winc /export/kuksi2 -P favago
A fájlrendszer lekapcsolására használható az umount parancs: umount /export/kuksi2
Az újabb disztribúciókban a kernelbe fordított vagy modulárisan betöltött smbfs támogatás van, emiatt használható a mount parancs is, ilyen módon: mount -t smbfs -o user=valaki,password=favago //kuksi2/winc /export/kuksi2
A Windows alatti nyomtató elérése Linux alól Itt nincs szükség további beállításokra ahhoz, hogy elérjük a Windows 95-ös géphez kapcsolt, előzőleg megosztott nyomtatót. A nyomtatást az smbclient programon keresztül vihetjük végbe, amelyet még sok egyéb dologra is felhasználhatunk. Megtudhatjuk azt, hogy például egy Windows 95-ös gépen milyen osztott erőforrásokhoz férhetünk hozzá. Hogy ezt lekérdezzük, használjuk az smbclient parancsot a következő módon: smbclient -L win95_gép_azonosítási_neve
Azaz jelen esetben: smbclient -L kuksi2
Valami hasonló felépítésű üzenetet kellene erre többek között kapnunk: Server=[KUKSI2] User=[] Workgroup=[SYSTEAM] Domain=[SYSTEAM] Sharename --------CD-ROM-E CD-ROM-F CDROM-G EPSON HP6L TUNEL WIN95C
Type ---Disk Disk Disk Printer Printer Disk Disk
Comment ------A kuksi2 gep Win95 A kuksi2 gep Win95 A kuksi2 gep Win95 Epson FX-1050 HP Laserjet 6L A kuksi2 gep Win95 A kuksi2 gep Win95
alatti E CD-ROM alatti F CD-ROM alatti G CD-ROM
alatti Tunel alatti Quantum1
A kapott jelzés magáért beszél. A SYSTEAM munkacsoportba tartozó KUKSI2 nevü szerver megosztott hozzáférést enged három darab CD-ROM-hoz, két nyomtatóhoz és két merevlemez partícióhoz. A Sharename (Megosztási név) alatti oszlopban felsorolt nevekre hivatkozhatunk, ha hozzá szeretnénk férni az megosztott távoli erőforrásokhoz.
283.
Barhács OktatóKözpont
Linux rendszergazdai modul - 12. fejezet
A nyomtatóhoz való hozzáférés a következőképpen történik: smbclient //win95_gép_azonosítási_neve/Megosztási_név "jelszó" -P
A -P kapcsolóval hivatkozunk arra, hogy a nyomtatási szolgáltatáshoz szeretnénk hozzáférni. Azaz a parancs jelen esetben, (ha itt is a favago szót adtuk meg a hozzáférés jelszavaként): smbclient //kuksi2/epson "favago" -P
Ekkor kapunk egy promptot: smb:\>
Itt különböző parancsokkal manipulálhatjuk a nyomtatás folyamatát. Lássunk néhány parancsot: Parancs print fájlnév printmode text | graphics queue
Jelentés Kinyomtatja a megadott fájlt. Itt állíthatjuk be a nyomtatási módot. A nyomtatási várakozó sor állapotát kérdezhetjük le.
Amennyiben nem használjuk a -P kapcsolót és egy merevlemez megosztási nevét adjuk meg akkor egy, az ftp-hez hasonló felületen át érhetjük el a távoli számítógép merevlemezét. Itt is használhatunk különféle parancsokat. Ezekről az smbclient kézikönyvlapján olvashatunk bővebben, de ezekből is adok egy kis ízelítőt: Parancs put hely_fájlnév | távoli_fájlnév recurse setmode fájlnév
Jelentés A ftp-ből már ismert felmásolási funkció. A put és a get funkció rekurziójának kapcsolója. Az állomány attribútumok állítása a távoli gépen, ,,a la DOS'' (read-only, system, hide, archive).
284.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Adatbázisszerver kialakítása Linuxon A Postgres adatbáziskezelő A POSTGRES adatbázisszerver dokumentációját az Internetről a http://fules.c3.hu/postgres/ címről tölthetjük le. A kézikönyvek - melyek összes terjedelme jelenleg néhány száz oldal - POSTSCRIPT formátumban is elérhetőek, ami azoknak kedvez, kik szeretnék ezeket az oldalakat kinyomtatni. (Itt hívjuk fel a figyelmet, hogy az adatbázisszerver és a használt dokumentumforma nevének hasonlósága a véletlen műve.) A POSTGRES megismerésében az installálás során felkerült - angol nyelvű - kézikönyvoldalak is segíthetnek, mivel meglehetősen részletesen tartalmazzák az egyes parancsok leírását. Jelen írás nem tartalmaz információkat a programok installálásával és karbantartásával - a rendszergazdai feladatokkal - kapcsolatban. Ezeket szintén angol nyelven érhetjük el már bemutatott helyeken. Figyelembe kell vennünk, hogy a tárgyalt programok egy része fejlesztés alatt áll, napról-napra változik. A fejlesztők igyekeznek a változásokat a felhasználók elől elrejteni, de a rendszergazdának mindenképpen tisztában kell lennie azzal, hogy az adott programnak melyik verzióját használja éppen. A Postgres használata A POSTGRESQL - továbbiakban POSTGRES - olyan adatbáziskezelő rendszer, amely SQL (Structured Query Language, rendszerezett lekérdezőnyelv) szabványú felületen elérhető adatbáziskezelést tesz lehetővé. Habár a POSTGRES nem tartalmazza az SQL szabvány teljes parancskészletét - még fejlesztés alatt áll -, a legfontosabb kifejezéseket értelmezni és végrehajtani képes, ezért a munkára már jelenlegi állapotában is alkalmas. Az adatbázis létrehozása Az adatok a POSTGRES alatt adatbázisokba vannak rendezve, amelyek általában egy-egy teljes feladatcsoportot felölelnek. Ilyen adatbázis lehet pl. a munkaügyi adatbázis, ahol az adott vállalat dolgozóinak adatait tároljuk, vagy az ügyfelek adatbázisa, ahol a megrendelők és megrendelések adatait tartjuk nyilván. A adatbázis rendszergazda feladata beállítani, hogy ki dolgozhat az adott - LINUX-ot futtató - gépen a POSTGRESsel és milyen adatbázisokhoz férhet hozzá. Engedélyezheti a felhasználónak azt is, hogy újabb adatbázisokat hozzon létre, ezért a felhasználónak tisztában kell lennie azzal, hogyan hozhat létre adatbázist: [root@pip pstricks]# createdb szotar [root@pip pstricks]#
285.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Amint az látható adatbázist létrehozni igen egyszerű. A createdb (create database, adatbázis létrehozása) parancs csak egy szót vár, amely az újonan létrehozott adatbázis neve lesz. Amennyiben az adatbázis létrehozása a parancsot kiadó felhasználónak engedélyezett és a művelet más okból sem hiúsult meg, külön üzenet nem jelenik meg a képernyőn az adatbázis létrehozásáról. Az adatbázist megsemmisíteni a destroydb (destroy database, adatbázis elpusztítása) paranccsal lehetséges, éppen olyan formában, ahogy azt a létrehozásánál láttuk. [root@pip /root]# destroydb szotar [root@pip /root]#
Az adatbázisban található adatok az adatbázis törlésekor megsemmisülnek, helyreállításukra általában nincsen mód, ezért óvatosan kell bánnunk e paranccsal. Az SQL parancssor Amennyiben SQL rendszerben kívánunk adatokat feldolgozni két út áll előttünk: parancsok begépelésével kezeljük adatbázisunkat vagy pedig programot készítünk, amely speciálisan az adott adatokon az adott feladatnak megfelelő módon képes dolgozni. Mindkét módszernek vannak előnyei. A parancsok begépelésével - SQL parancssort használva - igen rugalmas és hatékony eszközhöz jutunk, míg a speciális programok mellett szól, hogy ezek kezelését könnyű megtanulni. A speciális program és a nehezebben kezelhető hatékony parancssor közül mi a parancssort tárgyaljuk részletesebben, mivel a felhasználótól nem várható el, hogy a) minden feladatra programozót szerződtessen vagy b) speciális programokat készítsen. A POSTGRES SQL parancssora a következőképpen indítható: [root@pip latex]# psql szotar Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL type ? for help on slash commands type q to quit type g or terminate with semicolon to execute query You are currently connected to the database: szotar szotar=>
A psql parancs után az adatbázis nevét kell megadnunk amelyen dolgozni kívánunk. Ez ugyanaz a név, amelyet az adatbázis létrehozásakor beírtunk a createdb parancs után. (Itt jegyezzük meg, hogy ha a psql parancs után nem írunk adatbázis nevet, akkor az a felhasználói nevünkkel megegyező adatbázist kísérli meg megnyitni.) A szotar=> parancskérő jel - amely a mindenkori aktív adatbázis nevét tartalmazza mutatja, hogy SQL parancsokat gépelhetünk be. A parancskérő jel igen fontos információt hordoz, ezért időzzünk el itt egy picit.
286.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Amikor a parancskérő szotar=> alakú, akkor új parancsokat kezdhetünk el begépelni. Az SQL parancs azonban nem az ENTER billentyű lenyomásakor értékelődik ki, hanem akkor, amikor a parancssor ,,;'' jelet talál. Ezért előfordulhat, hogy az ENTER lenyomása után nem az eredeti (szotar=>) parancskérő jelet kapjuk vissza - amely jelezné, hogy parancsot kezdhetünk begépelni - hanem szotar-> jelet8.2. Ez - a másodlagos parancskérő jel - azt jelzi, hogy a parancsot most folytathatjuk. Ha a másodlagos parancskérő jel után egy - egyébként helyes - teljes SQL parancsot gépelünk be, akkor hibaüzenetet kapunk, mivel a parancssor az előző - befejezetlen - paranccsal együtt értelmezi azt. Ráadásul a dolog még ennél is bonyolultabb! Ha pl. egyszeres idézőjelet használunk a parancsban és azt nem zárjuk le, akkor a parancskérő jel alakja szotar'> lesz. A parancssor ezzel jelzi, hogy restanciánk van. Általánosságban elmondható, hogy komolyan kell figyelnünk a parancskérő jelet munka közben. A parancssor vezérlő utasításai Amíg az SQL parancssorban vagyunk, annak belső - nem SQL - parancsokat is adhatunk a jellel bevezetve. Ilyen belső parancs a q, amellyel az SQL parancssorból kiléphetünk: szotar=> q [root@pip latex]#
A ? segítségével a lehetséges belső parancsokról kérhetünk listát. Igen hasznos belső parancs pl. a d amely kilistázza az adatbázisban található összes táblázatot és indexet a tulajdonosaikkal együtt. Hasznos a h vezérlőparancs is, amely az SQL parancsok szintaxisával ismerteti meg a kezdő felhasználót. Igen korlátozott ez a segítség, emlékeztetőnek azonban jól jön, mivel nem kell elhagynunk a parancssort a használatához. 8.3 Ha egy parancsot hibásan gépeltünk be és már leütöttük az ENTER billentyűt, akkor a r belső parancs siet a segítségünkre. Ezzel a paranccsal kiüríthetjük a parancsort és visszatérhetünk az elsődleges parancskérő jelhez. (Abban az esetben, ha ') jelet gépeltünk be, s ennek még nem írtuk be a párját, a r nem működik. Ekkor mindenképpen le kell zárnunk az idézőjelet, hogy továbbmehessünk.) root=> rossz parancs root-> r buffer reset(cleared) root=>
A Postgres SQL nyelvjárása E fejezetben azokról a parancsokról lesz szó, amelyek a POSTGRES számára értelmes SQL parancsok. E parancsokat - a megfelelő formában - a psql parancssorba gépelhetjük, vagy speciális programba építhetjük azokat, hogy képzetlen felhasználók is használhassák az adatbázist. (Ilyen módszerre láthatunk példákat a fejezetben.)
287.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
A POSTGRES parancsok összetettek, szinte megegyeznek a beszélt nyelvvel. A kulcsszavak - parancsok - a nagybetű-kisbetű különbségre érzéketlenek, a nevek (identifyers, azonosítók) - amelyeket mi vezetünk be - esetében azonban ügyelnünk kell a pedáns írásmódra8.4. Ehelyütt a parancsokat mindig nagy-, az azonosítókat pedig kisbetűvel írjuk az átláthatóság kedvéért, de ez természetesen nem kötelező. A POSTGRES parancsait mindig pontosvessző zárja le. Amíg az SQL parandcssor nem talál pontosvesszőt, addig a parancsot nem értelmezi, nem kezdi el végrehajtani. Amikor olyan sort után ütjük le az Entert amelynek nem zárja le a végét pontosvessző, az SQL parancssor várakozik a parancs további részeire. szotar=> szotar-> szotar-> szotar-> CREATE szotar=>
CREATE TABLE szavak ( magyar varchar(36), angol varchar(36) );
Ha a parancs begépelésekor hibát vétettünk, akkor a Backspace billentyűvel törölhetjük a hibás betűket. Ha a hiba valamelyik előző sorban van, akkor használhatjuk a e belső parancsot, amely az aktuális parancs szerkesztését teszi lehetővé a vi szövegszerkesztőben. Amint kimentettük a szerkesztés eredményét és kiléptünk a szövegszerkesztőből, a parancs automatikusan végrehajtódik. A felfelé és lefelé mutató kurzormozgató billentyűkkel az előzőleg begépelt sorok közt válogathatunk. A példák bemutatásánál a parancskérő jeleket elhagytuk, hogy átláthatóbb legyen a begépelt parancs. Szintén a könnyű olvasást segíti a tördelés, amelynek során a parancsok struktúráját a sorok egymás alá rendezésével próbáljuk meg jelezni. Tábla létrehozása A POSTGRES az adatokat - az adatbázisokon belül - táblázatokban (classes, osztályok)8.5 tartja. Egy adatbázis több táblázatot is tartalmazhat - a dolgozók adatbázisa pl. egy táblázatban tartalmazhatja a munkatársak címét és telefonszámát, míg egy másik táblázat az általuk teljesített munkákat. A táblázat oszlopai egymástól független de azonos formájú adatokat tartalmaznak pl. neveket - míg a sorai együvé tartozó, de formában és jelentésben különböző információknak adnak helyet - pl. egy dolgozó összes adata. Az oszlopokat szokás mezőknek (fields) a sorokat pedig rekordoknak (records, feljegyzés) nevezni. Mielőtt használni kezdenénk egy táblát, azt létre kell hoznunk. Ehhez meg kell adnunk a létrehozandó tábla nevét, a benne található oszlopok nevét és az egyes oszlopokban tárolt adatok formátumát. Az SQL nyelvben a dolgok létrehozására a CREATE (létrehozni) parancs szolgál, amelyet táblázat létrehozásakor a TABLE (táblázat) szó egészít ki. A parancs teljes formája pl. a következő lehet:
288.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
CREATE TABLE szavak ( magyar varchar(36), angol varchar(36) );
A parancsra sikeres végrehajtását a POSTGRES a CREATE szó kiírásával jelzi. Ha a táblázatot valamilyen oknál fogva nem lehet létrehozni, a postgres angol nyelvű hibaüzenetet ad. A CREATE parancs formája tehát tablázat létrehozásakor mindig a TABLE parancs beírását és az egyes oszlopok zárójelek közti - vesszőkkel történő - felsorolását jelenti. Az oszlopok megadásakor meg kell mondanunk, hogy mi az oszlop neve, és milyen a típusa. A következő oszloptípusok közül válogathatunk: - [bool]Logikai értéket hordozó típus, amely két értéket vehet fel. Megadható - igaz érték esetén - TRUE, 't', 'true', 'y', 'yes', 1, vagy - hamis érték esetén - FALSE, 'f', 'false', 'n', 'no', 0 formában. - [char]Egyetlen betűt hordozó adattípus (character, betű). Az érték megadásánál egyszeres idézőjeleket kell használni, pl: 'm'. - [char()]Fix hosszúságú szöveg. A szöveg hossza a zárójelben található szám, amelyre - ha a tényleges szöveg hossza kisebb - a POSTGRES szóközök hozzáadásával kiegészíti azt. Az érték megadásánál egyszeres idézőjeleket kell használni. - [date]Dátum (date, dátum), amely évet, hónapot és napot tartalmaz. Habár a dátum igen sokféle formában adható meg, mindig az előre beállított módon jelenik meg. A beíráshoz használhatjuk a 'éééé-hh-nn' formát8.7 , amennyiben a magyar szokásnak megfelelő beállítást használjuk. A dátumforma beállításáról bővebben a 8.2.1 fejezetben olvashatunk a . oldalon. A dátum megadható szövegesen is, a 'now' (most), 'tomorrow' (holnap), 'yesterday' (tegnap) formák valamelyikét használva. - [datetime]Időpont tárolására szolgáló adattípus, amely beépített öröknaptárral rendelkezik. A legrégebbi ábrázolható időpont kb. az időszámításunk elötti negyedik évezredre tehető. Nem kell aggódnunk a 2000 év problémájától sem, az SQLt nem úgy fejlesztették ki, hogy az ezredforduló után ne lehessen használni. Az adatok megadási formája lehet pl. a következő: '4013-Dec-31 23:59:59 BC GMT', ahol a GMT (Greenwich mean Time) az időzóna rövidítése. - [float4, float8]Lebegőpontos (float, lebegő) számokat hordozó típus. A ,,lebegőpontos'' kifejezés arra utal, hogy az ábrázolt számban, a tizedes vessző bárhol lehet - majdnem bárhol -, korlátozva csak az ábrázolt számjegyek száma van. Extrém nagy vagy kicsiny értékek megadhatóak exponenciális alakban, pl.: 1.2e-307, ahol az e után található szám a tizes hatványkitevője: . - [int2, int4]Egész típusú változó, amely előjellel is rendelkezhet. - [time]Óra, perc, másodperc és századmásodperc hordozására alkalmas adattípus. Az ábrázolható érték 00:00:00.00 és 23:59:59.99 között van. A time típus megadásának módja: '23:59:59.99'. Az időpont megadásánál használható a 'now' rövidítés, amely az óra által mutatott értéket jelenti. - [timespan]Időintervallum tárolására szolgáló adattípus. Az értéket pl. másodpercben adhatjuk meg, kiolvasáskor pedig mindig szöveges formában kapjuk: 8 days 7 hours 2 mins 3.00 secs.
289.
Barhács OktatóKözpont
-
Linux rendszergazdai modul - 13. fejezet
[timestamp]A teljes időpontot hordozó adattípus, melybe az év, hónap, nap, óra, perc és másodperc, ráadásul az időzóna is hordozható. Az adattípus beviteli módja: '1997-12-30 11:55:59+1', de itt is használható a 'now'. [varchar()]Változó hosszúságú karaktersorozat hordozására alkalmas adattípus. Az egyszeres idézőjelek közt megadandó karakterláncot ennél a típusnál a POSTGRES nem egészíti ki szóközökkel. A karakterlánc maximális hosszát a zárójelek közt meg kell adnunk. Amennyiben a bevitelnél ennél a hosszúságnál nagyobb karaktersorozatot írunk be, a POSTGRES figyelmeztetés nélkül a maximális hosszra csonkolja.
Az adattípusok meglehetősen széles skálája áll rendelkezésünkre és az adatok megadási módja is igen változatos lehet - különösen a dátumok és időpontok tekintetében. Az itt bemutatott típusok általában a legtöbb feladat megoldására elégségesek, de nem szabad elfelednünk, hogy egyébb típusok és változatok is rendelkezésre állnak. Táblázat törlése A POSTGRES a törlésre a DROP parancsot használja. A TABLE szóval jelölhetjük, hogy táblázatot kívánunk törölni - és ilyenkor a táblázat nevét is meg kell adnunk: DROP TABLE szavak;
A POSTGRES sikeres törlés esetén a DROP szóval jelzi, hogy a művelet befejeződött. Óvatosan kell eljárnunk a táblázat törlésével, mivel az adatok visszanyerésére általában nincs mód. Táblázat feltöltése adatokkal Ha már létezik egy táblázat, akkor oda adatokat tehetünk, vagyis elkezdhetjük az adatbázis feltöltését. Természetesen felhasználhatjuk a más formában már meglévő adatbázisainkat, de az SQL parancssort használva is rögzíthetünk a táblázatba új sorokat. Az adatok bevitelét parancssorból az INSERT INTO parancs segítségével végezhetjük. Ennek formája egyszerű példánkban a következő: INSERT INTO szavak VALUES ( 'nap', 'sun' );
Amint láthatjuk az INSERT parancs a CREATE paranccsal igen nagy hasonlóságot mutat. Itt az INSERT után a az INTO következik, majd a VALUES kiegészítő szó után zárójelben a táblázathoz hozzáadni kívánt sor adatait kell felsorolnunk, a forma azonban már ismerős. Itt is vesszőkkel kell elválasztani az egyes oszlopokat, bár nem a nevüket és típusukat kell megadnunk - hiszen az már ismert a POSTGRES számára -, hanem a tartalmukat. A tartalom megadásánál - ha az oszlop típusa szöveges - az adatokat egyszeres idézőjelek, aposztrófok közt kell beírnunk.
290.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Azt, hogy a a felsorolt adatok közül melyik kerül az első, a második, stb. oszlopba, kizárólag a sorrend dönti el, ezért mindig szigorúan ügyelnünk kell arra, hogy az adatokat olyan sorrendben adjuk meg, ahogyan azokat a táblázat létrehozásánál deklaráltuk. Ha az adatok már rendelkezésünkre állnak valamilyen szöveges állományban, akkor természetesen azokat nem kell újra begépelnünk. Az SQL parancssor copy paranccsa szolgál adatok másolására állományok és táblázatok közt8.8. Az adatokat kinyerhetjük pl. a szavak nevű táblázatból a kimenet állományba: copy szavak to kimenet
Ha tabulátorjellel elválasztott hasábokba rendezzük adatainkat és a bemenet nevű állományba mentjük, akkor a következő paranccsal azt a szavak SQL táblázatba tölthetjük: copy szavak from bemenet
Adatok listázása a képernyőre Az adatokat a SELECT (kiválaszt) paranccsal listázhatjuk a képernyőre az SQL parancssort használva: SELECT magyar, angol FROM szavak;
Ekkor a parancssor egy egyszerű táblázatban felsorolja a táblázatban található adatokat: magyar|angol ---+--nap |sun (1 row)
Az első sorban az oszlopnevek találhatóak, a további sorok pedig a táblázat sorait mutatják meg. Az utolsó sorban - (1 row) - azt látjuk, hogy hány sornyi a kilistázott táblázat (row, sor). A SELECT parancs után azoknak az oszlopoknak a nevét kell megadni, amelyeket a képernyőn látni szeretnénk majd a FROM (-ból, -ből) kulcsszó után a táblázat nevét. Az oszlopneveket nem szükséges felsorolni abban az esetben, ha mindegyiket látni szeretnénk - ahogy az előző példában is -, ilyenkor azok a * jellel helyettesíthetőek. SELECT * FROM szavak;
Valójában a SELECT parancs sokkal többre képes mint amit első pillanatban gondolnánk róla. A továbbiakban azokat a toldalékokat vesszük sorra, amelyek a SELECT hatékonyságát, rugalmasságát adják.
291.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Szűrések A SELECT parancs tovább bővíthető szűrési feltételekkel, amelyek azt határozzák meg, hogy mely sorokat kívánjuk listázni a táblázatból. A szűréseket a WHERE (ahol) kiegészítővel vezetjük be: SELECT * FROM szavak WHERE magyar='csillag';
A parancs hatására a POSTGRES kikeresi azokat a sorokat, ahol a magyar nevű oszlopban a csillag szó szerepel, majd ezeket a sorokat a képernyőre listázza: magyar |angol ----+--csillag|star (1 row)
Ha a kísérleti szótárunkat az ellenkező irányban szeretnénk használni - vagyis angol szavakat keresünk -, nem kell mást tennünk, mint a WHERE kiegészítőben az angol nevű oszlopnevet megadni a feltételben: szotar=> SELECT * FROM szavak WHERE angol='planet';
A válasz a megszokott formában érkezik: magyar|angol ---+--bolygó|planet (1 row)
A feltétel nem csak az lehet, hanem a (nem egyenlő), (nagyobb szöveg esetében ,,a névsorban utána álló''), (kisebb, ,,a névsorban előtte álló'') is. Szöveges esetben használható a részleges egyezést jelző LIKE (hasonló) szó is: szotar=> SELECT * FROM szavak WHERE angol LIKE 'mo%';
A szavak csonkolására a % jel használható. A % jel bármennyi betűt helyettesíthet, a fenti kifejezés tehát listázza az összes ,,mo'' kezdetű angol szót és a magyar fordítását: magyar|angol ---+--hold |moon hétfô |monday (2 rows)
A % nem csak a szavak végén használható, hanem az elején és belsejében is. Ennek megfelelően a ,,%net'' kifejezés az összes ,,net'' végződésű szóra keres, a ,,we%k'' pedig minden szóra illeszkedik, amely ,,we'' kedetű és k betűvel végződik.
292.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Táblák egyesítése oszlopok szerint Igen hasznos lehetőség az, hogy a SELECT parancson belül hivatkozhatunk több táblázatra is egyszerre. Ha pl. a vásárlások adatai egy adattáblában vannak - vasar , míg egy másikban a vevők alapvető adatai - vevok. Ez az elrendezés hasznos, mivel a vevok adatait nem kell újra- és újra tárolni, valahányszor vásárol valamit. Lássuk, hogyan nyerjük vissza az adatokat egy ilyen adatbázisból: SELECT vevok.nev, vevok.cim, WHERE vasar.vevokod = vevok.kod;
vasar.vegosszeg
FROM
vevok,
vegosszeg
Amint látjuk ott, ahol a tábla nevét kell megadnunk megtalálható mindkét tábla neve vesszővel elválasztva. Mivel két táblát is használunk, az oszlopneveknél meg kell adnunk azt is, hogy melyik táblázat oszlopáról van szó. Ezt - mint látjuk - egy pont segítségével tehetjük meg. A fenti lekérdezés érdekességét a WHERE után található vasar.vevokod = vevok.kod adja. Ez végzi a tulajdonképpeni vásárlás-vevő egymáshozrendelést. Felfoghatjuk úgy is, hogy a parancs első fele összepárosítja az első táblázat minden sorát a második táblázat minden sorával, míg a WHERE kiegészítő kiválogatja azokat a sorokat, ahol a vásárlás vevőkódja megegyezik a vevő kódjával. Sorrendbe rendezés A lekérdezéskor megadthatjuk az is, hogy milyen sorrendben kívánjuk a sorokat a képernyőre listázni. Erre az ORDER BY (sorrend szerint) kiegészítő szolgál. A sorrendbe rendezés az ORDER BY után felsorolt oszlopok tartalma szerint történik: SELECT * FROM szavak WHERE angol LIKE 's%' ORDER BY angol; magyar |angol ----+--hét |seven csillag|star nap |sun (3 rows)
A ORDER BY használata esetén a USING (használva) kulcsszó után megadható a művelet, amelyet a POSTGRES fel fog használni a sorrendiség eldöntésére. Ennek a lehetőségnek leggyakrabban használt formája a csökkenő sorrend beállítása: SELECT * FROM szavak WHERE angol LIKE 's%' ORDER BY angol USING <;
Az ORDER BY parancskiegészítő megadható akár a WHERE parancskiegészítővel együtt is.
293.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Oszlopfüggvények A SELECT parancs használatakor nem csak a táblázatban található oszlopok közül válogathatunk, hanem számított értékeket tartalmazó oszlopokat is listázhatunk. Tételezzük fel, hogy a arucikk táblázatban létezik elnevezes, netto és afa nevű oszlop, s közülük a netto és afa számadatokat tartalmaz. Ekkor listázhatunk a következő módon: SELECT arucikk, netto, netto*(1+afa/100) FROM aruk;
A SELECT három oszlop listázására kapott parancsot, abból azonban csak az első kettő szerepel a táblázatban. A harmadik oszlop a táblázat oszlopaiból kerül előállításra, matematikai műveletek segítségével. A végeredmény a következő formájú: arucikk|netto|?column? ----+---+---ollo | 50| 62.5 villa | 250| 312.5 (2 rows)
Amint látjuk a harmadik - számított - oszlop is szerepel a listában. A POSTGRES a táblázat minden sorára elvégezte a kijelölt műveleteket, az adott sorban éppen aktuális értékekkel. A vázolt módon beírt képleteket oszlopfüggvényeknek nevezzük. Az oszlopfüggvények használata esetén megadhatjuk, hogy milyen néven jelenjen meg a kiszámolt érték. Erre az AS (úgy mint) parancs használható: SELECT arucikk, netto*afa AS afa, netto*(1+afa/100) AS brutto FROM arucikk;
Amint látjuk minden egyes kiszámolt érték esetén külön-külön nevet adhatunk az AS kulcsszó segítségével. Csoportosítás A lekérdezésekben használható a csoportosítás egy igen hatékony eszkoze, a GROUP BY (csoportosítani vmi szerint) kiegészítés. Ez a kiegészítés arra ad lehetőséget, hogy a táblázat soraiból az ismétlődő elemeket kiszűrjük. Tételezzük fel, hogy egy igen egyszerű táblázatban a következő adatok vannak: arucikk|netto|afa ----+---+-ollo | 50| 25 villa | 250| 25 villa | 238| 25 (3 rows)
294.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Amint látjuk a ,,villa'' kétszer szerepel az adatbázisban, egyszer 250, egyszer pedig 238 netto értékkel. A GROUP BY kiegészítő segítségével ezt az ismétlődést kiszűrhetjük - ha pl. csak az árucikkekről szeretnénk egy névklistát; SELECT arucikk FROM aruk GROUP BY arucikk; arucikk ---ollo villa (2 rows)
A példában a GROUP BY kiegészítő után egy oszlop nevét adtuk meg. A POSTGRES ezen oszlopban keresi az ismétlődéseket. Ez az oka annak, hogy az adatbázisban egyébként kétszer szereplő ,,villa'' most csak egyszer jelentkezik. Fontos megjegyeznünk, hogy a csoportosítás csak olyan oszlop szerint történhet, amely a listában egyébként megjelenik. Vizsgáljuk meg, mi történik ha a a listában olyan oszlopokat kérünk, amelyek a GROUP BY által kiszűrt ismétlődő sorokban különböző értékekkel jelentkezik: SELECT arucikk, netto FROM arucikk GROUP BY arucikk; arucikk|netto ----+--ollo | 50 villa | 238 (2 rows)
Amint látjuk, a felsorolásba belekerült az egyik ,,villa'' és a netto értéke. Történetesen éppen 238 áll a ,,villa'' mellett, de ez nem jelent túl sokat, hiszen a lista netto oszlopa véletlenszerűen kiválasztott értékeket hordoz. A táblázat így használhatatlan. Ha a GROUP BY kiegészítést használjuk, akkor a különbözőséget hordozó oszlopokra ügyelnünk kell. Használható információt ezekből a különböző értékeket felsorakoztató oszlopokból ilyen esetben a csoportosítható oszlopfüggvényekkel nyerhetünk. Lássunk egy példát: SELECT arucikk, SUM(netto) FROM arucikk GROUP BY arucikk; arucikk|sum ----+-ollo | 50 villa |488 (2 rows)
A példában szereplő SUM (summa, összeg) függvény numerikus oszlopok összegét adja. Mivel a SUM csoportosítható, az egyes csoportokra külön kiértékelésre kerül és így helyes eredményt adja.
295.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
A csoportosítható oszlopfüggvények a következőek: - [SUM]Summa (összeg). A numerikus oszlop összegét adja csoportonként. - [MIN]Minimum (legkisebb). A legkisebb elem értékét adja csoportonként. - [MAX]Maximum (legnagyobb). A legnagyobb elem értékét adja csoportonként. - [COUNT]Counter (számláló). Az csoportosítás előtti előfordulások számát adja csoportonként. - [AVG]Average (átlag). Az elemek számtani átlagát adja csoportonként. Nézettábla létrehozása és törlése A nézettábla egy olyan látszólagos adatbázistábla, amely egy már létező adattáblához kapcsolódik. Amikor nézettáblát hozunk létre, akkor valójában nem jön létre új tábla, a POSTGRES csak szimulál a számunkra egy táblát a létező tábla felhasználásával. A nézettábla mindazonáltal nem kell, hogy teljes egészében megegyezzen az eredeti táblával - akkor nem is volna értelme a használatának - hanem lehet annak szűkített változata - mind az oszlopok mind a sorok tekintetében. Mindenekelőtt lássunk egy példát. Hozzunk létre egy nézettáblát az adosok tábla szűkítésével. CREATE VIEW tart AS SELECT nev, tartozas FROM adosok WHERE tartozas>1000;
Használjuk fel az új nézettáblánkat egy lekérdezés erejéig. SELECT * FROM tart; nev |tartozas ------------------Gaz Gizi | 2300 Beko Antal| 3300 (2 rows)
Most vizsgáljuk meg, hogy ha az eredeti adosok táblázatba egy sort szúrunk be, akkor az megjelenik -e a nézettáblánkban. Ehhez olyan adatokat kell beszúrnunk, amelyek a nézettábla létrehozásakor definiált szűrésen - tartozas>1000 átjut. INSERT INTO adosok VALUES( 'Nagy Arpad', 'Zoldfa u. 21', 5500 );
296.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
A beszúrt új sor azonnal megjelenik a nézettáblában is: SELECT * FROM tart; nev |tartozas ------------------Gaz Gizi | 2300 Beko Antal| 3300 Nagy Arpad| 5500 (3 rows)
Szeretnénk felhívni a figyelmet arra, hogy a nézettábla az itt bemutatottnál bonyolultabb alakulat létrehozására is alkalmas. Használhatunk például oszlopfüggvényeket annak érdekében, hogy a nézettábla olyan oszlopokat is tartalmazzon, amelyek az eredeti táblázatban nem találhatóak meg, azok oszlopaiból származtatott adatokat tartalmaznak. Felhasználhatjuk a GROUP BY kiegészítőt a nézettábla létrehozásához. A nézettábla tartalmazhat adatokat több táblázatból is, megfelelő módon összefűzve az egyes mezőket. Ez talán az egyik leghatékonyabb felhasználási módja. Nézettáblát a DROP VIEW parancs segítségével törölhetünk az adatbázisból. DROP VIEW tart AS;
Index létrehozása és törlése A POSTGRES sokkal gyorsabban képes végrehajtani bizonyos utasításokat, ha a táblázathoz indexet készítünk. Az index olyan kiegészítő eleme az adatoknak, amely új információt már nem tartalmaz, csak a táblázatban lévő sorok kikeresését gyorsítja meg. Indexek létrehozásakor mindig háttértárkapacitást áldozunk fel a sebesség növelése érdekében. Indexeket létrehozni a CREATE INDEX parancs segítségével lehet: CREATE INDEX nev ON cikkek (nev, brutto);
Látható, hogy minden index nevet kap az elkészítésekor. Az index létrehozásához az ON kulcsszó után a táblázatot kell megadnunk amelyen az indexet használni szeretnénk, valamint zárójelek közt felsorolva azokat az oszlopokat, amelyek szerint a rendezés az indexben történik. Az elkészített indexet a POSTGRES folyamatosan frissíti, ezért az adatbevitel az index létrehozásával lassulhat. Az indexek használata automatikus, ha tehát a POSTGRES olyan indexet talál, amely az éppen végrehajtásra kerülő műveletet gyorsíthatja, akkor az indexet használni fogja a gyorsaság növelése érdekében. Mivel az indexek használata automatikus, jól meg kell gondolnunk, hogy milyen indexeket hozzunk létre. Az adatbázis szerkezetéből nem állapítható meg, hogy milyen jellegű indexeket érdemes létrehozni, hiszen a jó index a leggyakrabban használt adatkezelési feladatokat gyorsítja, az indexelés milyenségét ezek a feladatok határozzák meg.
297.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Ha pl. sokszor keresünk az ügyfelek adatait tartalmazó táblázatban város szerint, akkor a város nevét tartalmazó oszlop szerint érdemes indexet készíteni. Az egyedi kulcsok szerint mindenképpen érdemes indexet létrehozni. Ekkor az UNIQUE (egyedi) kulcsszóval egészíthetjük ki a CREATE INDEX parancsot, amelynek hatására a POSTGRES az index létrehozásakor és új adatok beszúrásakor ellenőrzi, hogy az egyedi kulcs aktuális értéke szerepel -e már valahol a táblázatban: CREATE UNIQUE INDEX csz ON cikkek (cikkszam);
Ha megpróbálunk olyan sort beszúrni a táblázatba, amelynek cikkszáma - egyedi kulcsa - már szerepel az indexben, a POSTGRES megtagadja a beszúrás végrehajtását és hibaüzenetet ír a képernyőre. Indexet törölni a DROP INDEX paranccsal lehet. DROP INDEX nev;
Az indexeket bármikor újra elő lehet állítani az adatokból , bár nagyméretű adatbázisok esetén ez hosszú időt vehet igénybe. Jogok adása felhasználóknak A POSTGRES képes arra, hogy minden felhasználójának külön kezelje a jogosultságait - ráadásul akár táblázatonként. Ez igen hasznos, hiszen csak így tudunk egy - a pillanatnyi adattömegtől és programállománytól független biztonsági rendszert létrehozni. Amennyiben a felhasználó - vagy az általa kezelt bármely adatkezelő program olyan kéréssel fordul a kiszolgálóhoz, amelyhez nincs joga, akkor a POSTGRES megtagadja a feladat végrehajtását és hibaüzenetet ad. Az alábbi parancs a books táblázatra adja meg az összes - ALL - jogot a gizi nevű felhasználónak. GRANT ALL ON books TO gizi;
Ha nem csak egy felhasználó számára szeretnénk jogot adni, akkor a felhasználó nevének a helyén használhatjuk a PUBLIC kulcsszót. Ez egyszerre vonatkozik az adatbázis összes felhasználójára. A legfontosabb kiosztható jogok a következőek: - [ALL] Minden jog. Akinek minden jogot megadunk, az bármit megtehet a táblában. - [SELECT] Ez a SELECT parancs futtatásához szükséges jog. Aki ezzel a joggal rendelkezik, az lekérdezheti a tábla tartalmát. - [INSERT] Az új adatok beszúrásához szükséges jog. - [UPDATE] Adatok módosításához szükséges jog. - [DELETE] Aki ezzel a joggal rendelkezik az, sorokat törölhet az adott adattáblából a DELETE parancs futtatásával.
298.
Barhács OktatóKözpont
Linux rendszergazdai modul - 13. fejezet
Figyeljük meg, hogy a kiosztható jogosultságok jól illeszkednek a szokásos munkamenethez. Elképzelhető például, hogy egyes felhasználók az adatokat nem kérhetik le, de oda újabb adatokat vihetnek fel, esetleg adatokat módosíthatnak, de újabb adatokat nem rögzíthetnek. Ha egy jól átgondolt irodai munkarend már kialakult valahol, akkor azt igen könnyen és precízen tudjuk az adatbázisszerver segítségével kontrollálni. Hozzá kell tennünk, hogy ha egy munkahelyen nincsenek kidolgozva az egyes feladatkörök, ha mindenki azt csinálja, amit az adott pillanat megkövetel, ha a felelős személyek nem tudják, hogy az egyes dolgozóknak mi a feladatuk, akkor egy bevezetett jogosultsági rendszer nagymértékben akadályozza a munkát. A rendszertáblázatok A POSTGRES a belső működéséhez szükséges adminisztratív táblázatokat a felhasználó adataival megegyező módon kezeli. Ez igen könnyű hozzáférést biztosít a felhasználó számára olyan adatokhoz, amelyek a rendszer belső állapotát tükrözik. A felhasználó számára elérhető rendszertáblázatok közül a legfontosabbak a következőek: - [pg_database]A rendszeren található adatbázisokat tartalmazó táblázat. Ha a felhasználó elfeledte, hogy milyen néven hozott létre adatbázist, e táblázat lekérdezésével könnyedén lekérdezheti azt. A psql indításához ugyan szükséges egy adatbázist megadni, de mivel normális esetben mindig létezik a template1 adatbázis, ez nem jelent akadályt. - [pg_class]Az adatbázisban található táblázatok adatait találhatjuk ebben a táblázatban. Amikor lekérdezzük a pg_class táblázatot, akkor a POSTGRES rendszertáblázatait is itt találjuk. Ha csak a fehasználó adatait tartalmazó táblázatokat kívánjuk megjeleníteni, akkor a pg_class táblázatot szűrnünk kell. Ehhez felhasználhatjuk azt, hogy a Postgres minden adminisztratív távbla nevét ,,pg_'' kezdettel látja el: SELECT * FROM pg_class WHERE relname NOT LIKE 'pg_%'; - [pg_operator]Az értelmezett operátorok - műveleti és relációs jelek - listáját tartalmazó táblázat. A pg_operator tartalmazza azokat az operátorokat is, amelyeket a felhasználó vezetett be.
299.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Csomagszűrés Linuxon Ip masquerading Mi is az IP masquerading? Ez egy lehetõség, melyet a linux kernele (is) képes biztosítani számunkra. Segítségével például egy regisztrált IP-vel rendelkezõ gépen keresztül a hozzá lokális hálozaton kapcsolódó gépek számára is elérhetõvé válhat az internet szolgáltatásainak nagy része. Az IP masquerading-et végzõ gép a belsõ háló felõl érkezõ IP csomagokat úgy továbbítja, mintha azok forrása õ maga lenne, a válaszcsomagokat pedig továbbadja a kapcsolatot valójában kezdeményezõ, belsõ hálon lévõ gép felé. Azt hiszem legegyszerûbb, egy példán keresztül bemutatni a szükséges beállítások elvégzésének mikéntjét. Adott egy lokális hálozat a 192.168.1.x tartományból kiosztott, csak lokálisan érvényes IP címekkel. Emellett van egy modemes ppp kapcsolat, amely a 192.168.1.1-as lokális IP-vel ellátott gépen elérhetõ. A beállítások 1. 2. 3. 4. 5.
Kernel oldali támogatás biztosítása Masquerading beállítása az átjáróként használt gépen Speciális eseteket kiszolgáló kernelmodulok betöltése A forwarding engedélyezése Az alapértelmezett átjáró beállítása a belsõ háló gépein
Kernel oldali támogatás biztosítása A kernel fordítása során az alábbi opciók kiválasztása szükséges, illetve célszerû. (Az egyébként is szükséges opciókon felül!) A disztribúciók alapkernelei általában tartalmazzák ezeket. Networking options ---> [*] ... [*] [*] [*] [*] [*] <*> <*> ...
Network firewalls IP: IP: IP: IP: IP: IP: IP:
firewalling always defragment (required for masquerading) masquerading (NEW) ICMP masquerading (NEW) masquerading special modules support (NEW) ipautofw masq support (EXPERIMENTAL) (NEW) ipportfw masq support (EXPERIMENTAL) (NEW)
300.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Masquerading beállítása az átjáróként használt gépen Ehhez mindõssze két ipchains parancsot szükséges kiadnunk az átjároként használt gépen. ipchains -P forward DENY ipchains -A forward -j MASQ -s
Az elsõ tilt minden forwardingot, amit külön nem engedélyeztünk. A második pedig a lokális háló felõl engedélyezi a masqueradinget. A fenti példánál maradva ez így néz ki: ipchains -A forward -j MASQ -s 192.168.1.0/24
A /24 itt a 255.255.255.0 netmask rövidebb formában történõ megadása. A beállításokat az "ipchains -L" paranccsal tekinthetjük meg, hibás beállítás esetén az "ipchains -F" kiadása után indulhatunk újra tiszta lappal. A forward chain-nek esetünkben így kell kinéznie: Chain forward (policy DENY): target prot opt source MASQ all ------ 192.168.1.0/24
destination anywhere
ports n/a
Speciális eseteket kiszolgáló kernelmodulok betöltése Speciális esetek alatt általánosan azokat értem, amelyekben az IP csomagokon forrás-, illetve célcímén kivül egyéb módosítás elvégzése is szükséges. Ezen módosításokat külön betölthetõ kernelmodulok végezhetik el. Ezek mindenképp modulként fognak lefordulni, és nem töltödnek be automatikusan, hisz speciális eseteket kezelnek le, amelyeket egyáltalán nem biztos, hogy szándékunkban áll kezeltetni. Ilyen eset például, az irc-n használatos dcc kapcsolat létrehozása. A problémát az okozza, hogy a dcc kapcsolat létrehozásához az irc kliensnek egy IP címet, illetve egy kapcsolódási portszámot kell közölnie a túloldallal az irc szerveren keresztül. Ennek a lehetõsége azonban a masquerading miatt nem áll fenn. Emiatt egy speciális modulra van szükség ehhez is. A szükséges modulok betöltése pl. az /etc/rc.d/rc.local scriptbõl célszerû. -
modprobe ip_masq_ftp modprobe ip_masq_raudio modprobe ip_masq_irc
A modulok nevük alapján könnyedén, és egyértelmûen azonosíthatóak, de akár mindet betõlthetjük egy egyszerû for ciklussal. A modulok a /lib/modules//ipv4/ alatt találhatóak (ip_masq_*.o). 301.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
A modulok betöltöttségét az lsmod paranccsal ellenõrizhetjük. Ha valamely szolgáltatás nem müködik, akkor érdemes lehet a neten speciális modult keresni hozzá. A forwarding engedélyezése Alapállapotban a kernelben minden forwarding le van tiltva, így a beállított masqerading sem mûködik, amíg nem engedélyezzük az ip csomagok továbbítását. Ezt az alábbi paranccsal tehetjük meg. echo 1 >/proc/sys/net/ipv4/ip_forward
Ugyanitt lehet ellenõrizni is a "kapcsoló" állását. (1 = engedélyezett, 0 = tiltott) cat /proc/sys/net/ipv4/ip_forward
Az alapértelmezett átjáró beállítása a belsõ háló gépein A lokális hálózat többi gépével csupán annyit kell tudatnunk, hogy minden 192.168.1.x címtõl eltérõ IP-t a ppp kapcsolattal rendelkezõ gépen keresztül kell megpróbálni elérnie. Azaz ez lesz számukra az alapértelmezett átjáró (default gateway). A routing táblában az alábbi paranccsal állíthatjuk be ezt a lokális hálózat gépein: route add default gw 192.168.1.1
A tábla megtekintése a route parancs paraméterek nélküli kiadásával lehetséges, megfelelõ beállítás esetén körülbelül eképpen festene: Destination Iface 192.168.1.0 eth0 127.0.0.0 default eth0
Gateway
Genmask
*
255.255.255.0
* bubukapcje
255.0.0.0 0.0.0.0
Flags Metric Ref U U
0 0
UG
0 0
0
Use 0 0 lo
0
0
A bubukapcje jelen esetben a 192.168.1.1 iphez tartozó név, mely az /etc/hosts fileban van hozzárendelve. :) (A route -n paraméterével kizárolag ip cimeket írna ki, de a nevekkel talán szemléletesebb.) A belsõ hálózat elérhetõsége Az IP masquerading miatt a lokális gépek a külsõ hálozat felõl nem elérhetõek, ez voltaképp nagyon kellemes, hisz semminemû támadás nem érheti õket közvetlenül. Néha azonban mégis szükségét érezhetjük, hogy a belsõ hálozaton lévõ gép bizonyos szolgáltatása elérhetõ legyen kivûlrõl is. Erre biztosít lehetõséget az ún. port forwarding, azaz a gateway bizonyos portjára érkezõ kérést az képes a belsõ háló valamely gépének bizonyos portjára továbbítani. 302.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Legyen például egy http szerver a 192.168.1.2 IP-jû gép 80-as portján, amit szeretnénk, hogy az internet felõl is elérhetõ legyen. Ennek beállításához az ipmasqadm programra van szükségünk. A gatewayen a következõ parancs kiadása szükséges: ipmasqadm portfw <portszám>
-a
-P
tcp
-L
cím>
<portszám>
-R
cím>
Esetünkben ez eképpen fest: ipmasqadm portfw -a -P tcp -L 195.70.50.1 80 -R 192.168.1.2 80
Eképpen az internetrõl a 195.70.50.1 (gateway) gép 80-as portjára érkezõ kérések a 192.168.1.2 címû gép 80-as portjára továbbítódnak.
Ipchains Minden hálózaton keresztül haladó forgalom csomagok formájában valósul meg. Például, ehhez a dokumentációnak a letöltéséhez (ami mondjuk 50 kbyte hosszú), kb. 36 darab 1460 byte hosszú csomagnak kell hozzád megérkeznie (most csak úgy mondtam valamit, a számokat hasra ütésre). Minden csomag eleje arról árulkodik, hova megy, honnan jött, mi a csomag típusa, valamint egyéb adminisztratív részletek is szerepelnek itt. A csomagnak ezt a részét fejlécnek hívjuk. A csomag többi része, maga a tényleges adat, a csomag teste. Némely protokollfajta, mint például a TCP is (ami a web, levélforgalomhoz, távoli belépésekhez használatos) a 'kapcsolat' fogalmát használják - mielőtt akármilyen csomag, tényleges adat elküldődne, különböző 'beállító' csomagok (speciális fejlécekkel) cserélnek gazdagépet, mondván például: 'kapcsolódni akarok!', 'OK, gyere bébi', 'kösz', azután a normális csomagok cseréje kezdődik meg (tényleges adatátvitel). A csomagszűrő olyan program a csomagok fejlécét megvizsgálván eldönti, mi legyen a sorsa az egész csomagnak. Dönthet úgy, hogy a csomagot megtagadva (deny) eldobja (mintha sose érkezett volna meg a csomag), a csomagot elfogadja (accept, a csomag átmegy), vagy pedig elutasítja (reject), ami olyan mint a megtagadás, csak a csomag forrását elmondja, amelyikkel ez történt. Linux alatt a csomagszűrés bele van építve a kernelbe, és van itt még pár trükkös dolog, amit a csomagokkal kezdhetünk, de az általános elv az, hogy megnézzük a csomag fejlécét, aztán eldöntjük, mi legyen vele.
303.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
1. Irányítás: Ha arra használod a Linuxodat, hogy csatlakoztasd a belső hálózatodat egy másik hálózathoz (mondjuk, az Internethez), lehetőséged nyílik bizonyos forgalmat engedélyezni, bizonyosakat pedig megtiltani. Például, a csomag fejléce tartalmazza a csomag úti célját, tehát megelőzheted bizonyos csomagok átjutását a külső hálózatra. Egy másik példa: A Netscapeemmel el akarom érni a Dilbert archívumokat, de az oldalon reklámok vannak a doubleclick.net-ről, és a Netscape csak az időmet pazarolja, hogy a hirdetéseket is letöltse. Ha megmondjuk a csomagszűrőnek, hogy ne engedjen csomagokat ki és be a doubleclick.net által birtokolt címekről/re, a probléma megoldódik. (van jobb módszer is, lásd később) 2. Biztonság: Ha a Linuxod az egyetlenegy dolog az Internet káosza és a szép, rendes kis belső hálózatod között, jó tudni hogy szabályozhatod mi jöhet be az ajtódon kopogtatva. Például kiengedhetsz bármit a hálózatodról, de aggódva gondolván a jól ismert 'Ping of Death'-re (a halál pingje), szabályozhatod miféléket küldhetnek neked a rosszindulatú kívülállók. Másik példa: mondjuk megtilthatod, hogy kívülről be lehessen a gépedre telnetelni, még akkor is, ha minden usernek jelszava van, talán megfigyelő szeretnél lenni az Interneten (mint a legtöbben), és nem pedig egy szolgáltató gép (akarva vagy máshogyan), egyszerűen senkit nem engedsz bekapcsolódni, elutasítva a csomagszűrővel a kapcsolódás felállítására beérkezett csomagokat. 3. Éberség: Néha egy rosszul beállított gép a lokális hálózaton úgy dönt, nekiáll csomagokat hányni a külvilág felé. Jó dolog elmondani a csomagszűrőnek, ha bármi rendellenes történik, azt vegye észre és így talán időben tenni tudnunk ellene, vagy talán csak kíváncsi természetű vagy. A Kernel a csomagszűrővel. Szükséged van egy olyan kernelre, ami tartalmazza az új IP tűzfal láncokat. Ha nem tudod, megfelelő kernellel rendelkezel-e, nézz utána a /proc/net/ip_fwchains nevű file-nak. Ha megvan, a kerneled jó lesz. Ha nincs meg, fordítanod kell egy új kernelt, hogy tartalmazhassa a tűzfal láncokat. Először is, tölts le egy új kernel forrást (ha nincs meg a disztribúciód cd-jén) a kedvenc ftp helyedről. Ha 2.1.102-es vagy nagyobb verziószámű kerneled van, nem szükséges patch-elni, egyébként igen. Ennek részleteit megtalálod a KERNELHOWTO-ban. Itt van, milyen konfigurálási opciók szükségesek a fordításnál (2.0-s kernelek) CONFIG_EXPERIMENTAL=y CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_CHAINS=y
2.1 és 2.2-esek esetén: CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y
Az ipchains program a kernellel társalog, és elmondja neki mely csomagokat szűrje. Ez az, ahogy kontrollálod a csomagszűrést. 304.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Az ipchains program szabályokat szúr be és töröl ki a kernel csomagszűrő részébe. Ez azt is jelenti egyben, hogy amit beállítasz, újraindításnál elvész, nézd meg 'szabályok permanens beállítása' részt, hogy a szabályok akkor is visszaálljanak, amikor újraindítod a gépet legközelebb. A kernel a szabályok három listájával kezd, ezeket a listákat hívjuk tűzfal láncoknak, vagy csak szimplán láncoknak. A három láncot inputnak, outputnak, valamint forwardnak hívják. Amikor egy csomag érkezik, mondjuk az Ethernet kártyán keresztül, a kernel az input láncot használja arra, hogy eldöntse a csomag sorsát. Ha a csomag túléli ezt a lépést, akkor a kernel eldönti, hogy a csomaggal mit csináljon (hova küldje, ezt szokás routing-nak hívni). Ha a cél egy másik gép, a kernel a forward lánccal konzultál. Végül, mielőtt még a csomag lelépne, a kernel megbeszéli a dolgot az output lánccal. Egy lánc tulajdonképpen szabályok listája. Minden szabály megmondja: "ha a csomag fejléc ez és ez, akkor itt van mit kell csinálni a csomaggal.". Ha a szabály nem egyezik a csomag fejlécével, a lánc következő szabálya vizsgálja meg a csomagot. Végül, ha nincs több szabály, a kernel megvizsgálja az adott lánc irányelvét (policy), hogy eldöntse mit is tegyen. Egy tudatosan biztonságra törekvő rendszerben ez az irányelv általában megmondja a kernelnek, hogy tagadja meg vagy utasítsa vissza a csomagot. Az ipchains az ipfwadm új cseréje, ami a régi tűzfal kódnál volt használatos. Van egypár hasznos szkript az ipchains ftp lelőhelyén: ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz Az ipchains használata Az ipchains-nak eléggé részletes az online dokumentációja (man ipchains), de ha még több információra van szükséged az apró részletekről, megnézheted a programozási interfészt is (man 4 ipfw), vagy pedig a kernel forrásokban lévő /net/ipv4/ip_fw.c nevű állományt (2.1.x kernelek), ami nyilván mértékadó lehet. Van egy kiváló gyors referenciakártya Scott Bronsontól a forráscsomagban, A4 és US Letter Postscript formátumban. Van jónéhány dolog, amit az ipchains-al kezdeni tudsz. Először is, egész láncokra vonatkozó műveletek. Alapvetően három beépített lánc van, az input, output és forward, amelyeket nem tudsz kitörölni. 1. 2. 3. 4. 5. 6.
Új lánc létrehozása (-N) Üres lánc törlése (-D) Irányelv változtatás a beépített láncokra (-P) A láncban lévő szabályok listázása (-L) A szabályok kitörlése a láncból (-F) Csomag és byte számlálók nullázása az összes szabályra egy adott láncban (-Z)
305.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Szabályok manipulálása egy láncon belül: 1. 2. 3. 4. 5.
Új szabály hozzáfűzése a lánchoz (-A) Új szabály beszúrása valahol a láncban (-I) Meglévő szabály cseréje egy új szabállyal valahol a láncban (-R) Szabály törlése a lánc adott pozíciójáról (-D) Az első szabály kitörlése a láncból, ami megegyezik a megadottal (-D)
Néhány művelet a masqueradinghoz: 1. Az éppen aktuális masquerade-olt kapcsolatok listázása (-M -L) 2. A masquerading időtúllépési határának beállítása (-M -S) (de nézd meg: 'Nem tudom beállítani a Masquerading időtúllépéseket!') Az utolsó (és talán egyben a leghasznosabb) funkció megengedi számodra, hogy megvizsgáld, mi történne egy adott csomaggal ha átmenne egy adott láncon. Műveletek egy szabályon Ez az ipchains színe-java, a szabályok manipulálása. Általában a hozzáfűzés (-A) és a törlés (-D) parancsokat fogod használni. A többi (-I, -R) az előző kettő kiterjesztései. Minden szabály feltételek halmazát határozza meg a csomagok fejléceivel kapcsolatosan, így egy szabály el tudja dönteni (amit ugye mi határozunk meg), hogy mit tegyen, ha a csomag fejléce megegyezik a szabályban specifikált feltételekkel, mi legyen a cél. Például, le szeretnél tiltani minden ICMP típusú csomagot, ami a 127.0.0.1-ről jön. Ebben az esetben szabályunk feltétele az kell legyen, hogy a csomag típusa ICMP legyen, valamint a forráscíme 127.0.0.1. A célunk (target) DENY. A 127.0.0.1 a visszahurkolási interfész, ami akkor is létezik, ha tényleges hálózati kapcsolat nincsen (pont azért lett kitalálva, hogy akkor is lehessen hálózati szoftvereket írni és tesztelni, ha nincs hálózat). Kipróbálhatod rajta a ping nevű programot, ami csomagokat fog generálni (egyszerűen ICMP 8-as típusú csomagokat (echo-request) fog küldeni, amelyre minden kooperatív hoszt ICMP 0-s típusú csomagokkal fog válaszolni (echo-reply)). Ezzel jól lehet tesztelni: # ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms --- 127.0.0.1 ping statistics --1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms # ipchains -A input -s 127.0.0.1 -p icmp -j DENY # ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes --- 127.0.0.1 ping statistics --1 packets transmitted, 0 packets received, 100% packet loss
306.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Látható, hogy az első ping sikeres volt (a -c 1 azt jelenti, hogy csak egy csomagot küldjön a ping, különben nélküle nyomja a világ végéig, vagy amíg leállítod Ctrl+Cvel, esetleg megszakítod Ctrl+Z-vel) Ezek után befűztünk az input láncba egy új szabályt (-A), amivel meghatároztuk, hogy azt a csomagot, aminek a forráscíme 127.0.0.1 (-s 127.0.01), valamint típusa ICMP (-p icmp), ugrassa a DENY targetre (-j DENY). A második ping eredménye jól látható, a csomagot megtagadta kernelünk. Ha szabályt szeretnénk törölni, két módón tehetjük meg. Először is, tudjuk hogy ez az egyetlen szabály az input láncban, így a sorszáma is egyértelmű (1), ezért törölhetjük így: # ipchains -D input 1
A másik módszer a hozzáfűzés tükörképe, csak egyszerűen lecseréljük az A-t D-re: # ipchains -D input -s 127.0.0.1 -p icmp -j DENY
A szintaxisnak ugyannak kell lennie, mint a hozzáfűzésnél (vagy -I, -R-nél). Ha több ugyanilyen szintaxisú szabály van, csak az első törlődik a láncból. Szűrési meghatározások Láttuk, hogy a '-p'-vel a csomag protokolltípusát, a '-s'-el pedig a csomag forráscímét határoztuk meg. Van ezen kívül jónéhány opció, amit bevethetünk csomagmeghatározásra a szabályok megadásánál. Következzék a kimerítő részletezés. Forrás és cél IP cím meghatározása A forrás (-s) és cél (-d) IP címeket négy módon határozhatjuk meg. A legegyszerűbb mód, ha a hoszt teljes nevét adjuk meg, mint pl. 'localhost', vagy 'www.linuxhq.com'. A második mód, ha megadjuk a gazdagép IP számát, pl. 127.0.0.1. A harmadik és negyedik módszerrel IP címcsoportokat határozhatsz meg, mint pl. 199.95.207.0/24', vagy `199.95.207.0/255.255.255.0'. Mindkettő bármilyen IP számot meghatároz 199.95.207.0-tól 199.95.207.255-ig. A '/' utáni számok megmondják, az IP cím mely részei számítanak (/24=24 byte, az ipv4 címek 32 byte-osak). A '/32', vagy a '/255.255.255.255' az alapértelmezés, minden IP számot magukba foglalnak. Ahhoz, minden létező IP-t meghatározzunk, én a következő módszert kedvelem: # ipchains -A input -s 0/0 -j DENY
Ez mondjuk így ritkán használatos, mert a fenti szabály hatása ugyanaz, mintha nem adnánk meg a '-s' opciót.
307.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Inverzió meghatározása Sok jelzőt, belefoglalva a '-s'-t és a '-d'-t is, megelőzheti egy argumentum, a '!' (jelentése nem, mint a c-ben), és így jelentése megváltozik: azokra az IP-kre érvényes a szabály, amik NEM egyenlők a felkiáltójel után megadottakkal. Például, a '-s ! localhost' minden csomagra vonatkozik, ami nem a lokálhosztról való. Protokoll meghatározása A csomag protokolltípusa a '-p' opcióval határozható meg. Értéke lehet szám (ha tudod fejből az értékeket), vagy sztringek olyan speciális fajtáknál, mint pl 'TCP', 'UDP' vagy 'ICMP'. Kis és nagybetű jelen esetben lényegtelen, szóval 'tcp' ugyanúgy jó, mint 'TCP'. Itt is lehet invertálni, pl: '-p ! tcp'. UDP és TCP portok meghatározása Abban az esetben, ha protokollként a tcp-t vagy az udp-t adjuk meg, kitehető némi extra argumentum jelezvén a tcp vagy udp portokat, vagy pedig portok tartományát határozunk meg (de lásd a 'Töredékek kezelését' lentebb). Tartományt a ':' segítségével adhatunk meg, mint pl.: '6000:6010', ami 11 portszámot ad meg, 6000tól 6010-et is magába foglalva. Ha az alsó határt elhagyjuk, alapértelmezés szerint így az 0 lesz. Ha a felső határt hagyjuk el, az alapból 65535 lesz. Például, ahhoz hogy meghatározzunk tcp kapcsolatokat 1024-es alatti portokon, a szintaxis: '-p tcp s 0.0.0.0/0 :1023'. Az általános portszámok helyettesíthetőek sztringekkel, például a 80-as az 'www'. Invertálni tudunk itt is, például ahhoz, hogy meghatározzunk minden tcp csomagot, kivéve ami www: '-p tcp -d 0.0.0.0/0 ! www'. Fontos, hogy érezzük a különbségeket: -p tcp -d ! 192.168.1.100 www
És ez: -p tcp -d 192.168.1.100 ! www
Ez a két utóbbi meghatározás nagyon hasonlít egymásra, pedig teljesen mást jelentenek. Az első meghatároz minden www portra igyekvő csomagot, aminek nem a 192.168.1.100 a célja, míg a második meghatároz minden csomagot, aminek célja a 192.168.1.100, kivéve a www portra igyekvő csomagokat. Végül, ez meg azt jelenti, hogy se nem www portra, se nem a 192.168.1.100-ra : '-p tcp ! 192.168.1.100 ! www'.
308.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
ICMP típusok és kódok meghatározása Az icmp protokoll meghatározása szintén lehetővé tesz egy opcionális argumentumot, de vegyük figyelembe, hogy az ICMP-nek nincsen portja, hanem típusa és kódja van. Mást jelentenek. Sztringekként is megadhatod az icmp típusokat (ipchains -h kilistázza a neveket) a 's' után, vagy pedig számként a típust és a kódot, ahol a típus követ a '-s'-t, és a kód követi a '-d'-t. Itt egy kis táblázat az alapvető ICMP csomagokról: Szám 0 3 5 8 11
Név echo-reply destination-unreachable redirect echo-request time-exceeded
Mihez kell ping Bármilyen TCP/UDP forgalomhoz útválasztás, ha nem fut útválasztó démon ping traceroute
Megjegyezzük, jelen pillanatban ezeket nem lehet invertálni a '!'-al. Interfész meghatározása A '-i' opcióval megadhatunk egy interfészt nevét. Egy interfész a fizikai eszköz, amin a csomag be tud jönni, vagy ki tud menni. Az ifconfig paranccsal kilistázhatod az aktív interfészeidet. A bejövő csomagok interfésze (azaz, a csomagok az input láncon) kerül szóba, amikor bejönnek az interfészen. Logikusan, az output láncra kerülő csomagoknál az az interfész jön szóba, amelyiken a csomagok kimennek. A forward láncon szintén a kimenő csomagok interfésze a mérvadó, kicsit bonyolultra sikerült ez a mondat. Meg lehet adni olyan interfészt is, ami jelenleg nem 'up', azaz nem él, a szabály nem egyezik addig semmivel, amíg az interfész fel nem jön. Ez rendkívül hasznos pl. betárcsázós interfésznél (ppp0), és hasonlóknál. Egy speciális jellel, a '+'-al megadhatjuk azt, hogy bármilyen megadott interfészre jó legyen a meghatározás, például a ppp+ az jelent ppp0-t, ppp1-et, ppp2-t stb. Lehet invertálni is, pl. !ppp+ a meghatározása bármilyen interfésznek, kivéve a ppp interfészeknek. TCP SYN csomagok kizárólagos meghatározása Néha hasznos lehet a tcp kapcsolatok engedélyezése az egyik irányba, de visszafele nem. Például engedhetsz kapcsolatokat egy külső www szerver felé, attól a szervertől befele pedig nem.
309.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
A naív megoldás az lenne, hogy blokkoljuk a felénk érkező tcp csomagokat attól a szervertől, sajnos azonban a tcp kapcsolatok működéséhez mindkét irányban mennie kell a csomagforgalomnak. A megoldás az, hogy csak azokat a csomagokat blokkoljuk, amelyek a kapcsolat felépítését kérik tőlünk. Ezeket a csomagokat SYN csomagoknak hívják (jó, igazából ezek olyan csomagok, amelyeknek a SYN jelző (flag) be van állítva, a FIN meg az ACK flag-ek pedig nincsenek). Ha csak ezeket a csomagokat blokkoljuk, megállíthatjuk a felénk irányuló kapcsolatok felépítését kérelmező csomagokat. Ehhez a '-y' opciót kell használni, és csak akkor érvényes, ha tcp protokollt adunk meg mellé. Például ahhoz hogy meghatározzunk kapcsolódási kísérleteket a 192.168.1.1-ről: -p tcp -s 192.168.1.1 -y. Invertálhatunk itt is, ha pl. fenti meghatározást invertáljuk, az minden kapcsolódási kísérletet meghatároz a 192.168.1.1-en kívül. Töredékek kezelése Néha egy csomag túl nagy ahhoz, hogy egyszerre beférjen a villamos vezetékbe (a fizikai átviteli vonalra, koax-kábelre, optikai vezetékre, fénykábelre, rádióhullámra, mikrohullámra stb). Ilyen esetekben a csomag több töredékre bontódik, és több, kisebb csomagként küldődik el. A másik végpont összeállítja a csomagokat, hogy megkapja eredményül az eredeti nagy csomagot. Ezzel az a probléma, hogy a fentebb tárgyalt meghatározásokhoz szükséges az (részletesebben, forrásport, célport, icmp típus, icmp kód vagy tcp syn jelző), hogy a kernel belekukkantson a csomag elejébe, ami viszont csak az első töredékben van meg. Ha a géped az egyetlenegy kapcsolat a külső hálózat felé, megmondhatod a Linux kernelnek, hogy állítsa össze újra a rajta keresztül haladó csomagokat, ha a kernelbe belefordítod az IP: always defragment: y -t. Ellenkező esetben fontos megérteni, hogyan bánnak a szűrési szabályok a töredékekkel. Ha egy szabály olyan meghatározási információt tartalmaz, amit a csomag nem, akkor a szabály nem fog ráilleni a csomagra. Ez azt jelenti, hogy az első csomaggal a megfelelő módón bánnak el a szabályok, de azt követő töredékekkel már nem. Ilyenformán egy ilyen meghatározás: -p tcp -s 192.168.1.1 www nem fog ráilleni, csak az első töredékre, de még az inverze sem (-p tcp -s 192.168.1.1 ! www). Mégis, megadhatsz specifikus szabályokat, direkt a második és a többi töredék kezelésére, a '-f' opcióval. Töredék szabályba azonban nem lehet megadni TCP, UDP portot, ICMP típust, ICMP kódot vagy TCP SYN jelzőt. Lehet invertálni is.
310.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Általában biztonságosnak tekinthetjük átengedni a második és a további töredékeket, mivel a szűrés hatása az első töredéket érinti, és ilyen módón megakadályozható a töredékek célhoszton való összerakása. Vannak jól ismert hibák, amivel szét lehet ütni egy gépet töredékek küldésével. Megjegyzés a hálófejűeknek: a hibás csomagok (tcp, udp és icmp csomagok túl rövidek, hogy a tűzfal kód beolvassa a portokat vagy az icmp típust és kódot) szintén töredékként vannak kezelve. Csak a 8-as pozíción kezdődő tcp töredékek lesznek határozottan kidobva a tűzfal kód szerint (ha ilyesmi történik, a syslog üzenetet generál). Példaként, a következő szabály megtagad bármilyen töredéket, a 192.168.1.1-re: # ipchains -A output -f -d 192.168.1.1 -j DENY
Mellékhatások szűrése Jól van, tudjuk immár a szabályok meghatározási módszereit, hogy illeszkedjenek adott csomagokra, lássuk illeszkedésnél mi történik: 1. Az illeszkedő szabály byte számlálója növekedik a csomag méretével (fejléc + test) 2. A szabály csomagszámlálója növekszik 3. Ha a szabály kéri, a csomag loggolódik. 4. Ha a szabály kéri, a csomag 'szolgáltatás típusa' mezője cserélődik (Type of Service) 5. Ha a szabály kéri, a csomag megjelölődik (a 2.0-s kernelekben nem) 6. A szabály célja (targetje) szerint a tűzfal kód eldönti, mi legyen a csomaggal. Cél meghatározása A cél elmondja a kernelnek, mit csináljon, ha a szabály ráillik a csomagra. Az ipchains erre a '-j' opciót használja (gondolj az ugrásra, jump-to). A cél nevének 8 karakternél kisebbnek kell lennie, és a kis-nagybetű különbség számít (RETURN nem egyenlő return-al). Legegyszerűbb esetben nincs is cél, ilyenkor a szabályt 'számláló' szabálynak hívjuk, mert nem csinál semmit, csak számlálja az illeszkedő csomagokat. Akár egyezett a szabály, akár nem, a kernel megvizsgálja a következő szabályt a láncban. Például, ha számolni akarjuk a beérkező csomagokat a 192.168.1.1-en, akkor: # ipchains -A input -s 192.168.1.1
Az 'ipchains -L -v' megmutatja a csomag és byte számlálókat mindegyik szabályban az adott láncon. Hat különböző speciális cél van. Az első három az ACCEPT, REJECT, DENY már egyértelműek (remélem). Az ACCEPT átengedi a csomagot, a DENY megtagadja (a kernel eldobja a csomagot, mintha sosem érkezett volna meg), a REJECT pedig visszautasítja, de (ha nem egy ICMP csomag) generál egy ICMP választ, hogy elmondja a forrásnak: a cél nem elérhető (destination unreachable). 311.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
A következő, a MASQ azt mondja a kernelnek, hogy fejlécezze újra a csomagot. Hogy ez működjön, a kernelben benn kell lennie az IP Masquerading kódrészletnek. A részletekért nézd meg az IP-MASQUERADING-HOWTO-t, és a függelékben található 'Különbségek az ipchains és az ipfwadm között' című részt. Ez a cél (MASQ) csak a forward láncon áthaladó csomagokra érvényes. Egy másik különleges cél az átirányítás (REDIRECT), ami elmondja a kernelnek, hogy a csomagot egy helyi portra küldje ahelyett ahova eredetileg tartott. Ez csak tcp és udp protokoll-meghatározásoknál érvényes. Opcionálisan megadható egy port (név vagy szám) a '-j REDIRECT' után, ami a csomagot erre a portra irányítja, még akkor is, ha másik volt a fejlécben. Ez a cél csak az input láncon áthaladó csomagokra érvényes. Az utolsó speciális cél a visszatérés (RETURN), ami a lánc végére eséssel azonos (Lásd lentebb az 'Irányelvek beállítását'). Minden más cél egy felhasználó által definiált láncot jelez (ahogy tárgyaljuk a 'Műveletek a teljes láncon' résznél lentebb). A csomag átugrik a másik láncra, és megkezdődik az itt definiált szabályok tesztelése. Ha a lánc nem dönti el a csomag sorsát, akkor egyszer áthalad ezen a láncon a végére, majd visszatér a következő szabályra az előző láncban. Képzeljünk el egy tcp csomagot, ami a 192.168.1.1-ról jön és célja az 1.2.3.4. Belép az input láncra, és megkezdődik a tesztelés. Az első szabály: nincs illeszkedés (mert az icmp-re illeszkedik). A második szabály már illeszkedik, és annak célja a Test, ami viszont egy új lánc (mi definiáltuk), így a következő szabály a Test láncban tesztelődik. Itt az első szabály illeszkedik, de nem határoz meg célt, így a következő szabály tesztelődik. Ez viszont nem illeszkedik (mert a cél 1.2.3.4 és nem 192.168.1.1), és elértük a Test lánc végét. Visszatérünk az input láncra, ahol az előbb teszteltük a kettes szabályt, szóval most jöhet a hármas számú, ami szintén nem illeszkedik (mert az meg UDP csomagokra illeszkedne). A csomag útvonala így: input lánc --> input lánc.szabály1 --> input lánc.szabály2 --> Test láncra ugrás --> Test lánc.szabály1 --> Test lánc.szabály2 --> Ugrás vissza az input láncra --> input lánc.szabály3 -->
Csomagok loggolása Ez egy mellékhatás, amit egy illeszkedő szabály megtehet. Loggolhatod a szabályra illeszkedő csomagot a '-l' opcióval. Valószínűleg a szimpla rutin forgalmat nem akarod loggolni, de hasznos lehet a dolog kivételes esetekben. A kernel ilyesmit loggol: Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025 S=0x00 I=18 F=0x0000 T=254
312.
L=34
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
A loggolási információ úgy lett tervezve, hogy tömör, lényegretörő legyen, olyan infókat tartalmaz, ami hasznos lehet a hálózati guruknak, de miért ne lehetne hasznos számunkra is? Lássuk: - 'input' a lánc neve, amelyik a loggolást kiváltó szabályt tartalmazza. - DENY a célja a szabálynak. Ha ez '-', akkor a szabály nem csinált a csomaggal semmit (számláló szabály). - eth0 az interfész neve. Mivel a csomag az input láncról való, ez azt jelenti, hogy a csomag az eth0-ra érkezett. - PROTO=17: a csomag protokoll típusa a 17-es számú protokoll. Van egy lista az /etc/protocols file-ban, de a leggyakoribbak az 1 (icmp), 6 (tcp) és 17 (udp). - 192.168.2.1:53: A csomag forráscíme a 192.168.2.1, és a forrásport az 53-as. Ha megnézed az /etc/services file-t, láthatod, hogy ez a port a 'domain' port (azaz, a csomag valószínűleg egy DNS válasz). A tcp és udp portokhoz ez a szám a forrásportot jelöli, icmp-hez ez a szám az icmp típusa. Máshoz a szám 65535 lesz. - 192.168.1.1:1025: A csomag célcíme a 192.168.1.1, a célport pedig 1025. Az udp és tcp csomagokhoz ez a szám a célportot jelöli, icmp-hez az icmp kódot. Máshoz a szám 65535 lesz. - L=34: A csomag 34 byte hosszú. - S=0x00: A szolgáltatás típusa mező (Type Of Service), oszd el 4-el, hogy megkapd az ipchains által használt szolgáltatás típusát. - I=18: Az IP ID (identification). - F=0x0000: a 16 bites töredék offszet plusz jelzők. 0x4-el, vagy 0x5-el kezdődő értékek azt jelentik, ne állítson töredék bitet be. 0x2, vagy 0x3 jelentése: további töredékek jelző beállítva, ezekután több töredék fog következni. A szám nagy része a töredék offszetje, nyolccal osztva. - T=254: Életidő a csomagnak (Time to live). Minden ugrópontnál (hop, útválasztó gép) 1 kivonódik ebből a számból, és általában 15-el, vagy 255-el indul. - Lehet még egy szám a végén (pl. #5), ez a láncban lévő szabály sorszámát jelzi, ami a loggolást kiváltotta (2.2.9 után). Linux rendszereken általában ezt a kernel kimenetet általában a klogd nevű démon (kernel logger) kapja el, ami átadja a syslognak (system logging daemon). Az /etc/syslog.cong file-ban kontrollálhatod a syslogd működését azzal, hogy meghatározol célállományokat a szolgáltatásoknak (faclity) (jelenleg a facilty-nk a kernel), és egy szintet (level), az ipchainshoz egy info nevű szintet használunk. Például, az én (Debian) /etc/syslog.conf file-om két sort tartalmaz, ami illeszkedik a 'kern.info'-ra: kern.* *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none
-/var/log/kern.log
-/var/log/messages
Ez azt jelenti, hogy az üzenetek mind a /var/log/kern.log-ba, mind pedig a /var/log/messages-be bemennek. További infóért olvasd el: man syslog.conf.
313.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
A szolgáltatás típusának manipulálása Van négy ritkán használt bit az IP fejlécben, amit szolgáltatás típusának hívnak (Type Of Service, TOS). A csomagok lekezelésében fejtik ki hatásukat, a négy bit a 'minimális várakozás' (Minimum Delay), 'maximális teljesítmény' (Maximum Throughput), 'maximális megbízhatóság' (Maximum Reliabilty) és 'minimális költség' (Minimum Cost). Csak ezeket a bitekkel lehet szórakozni. Rob van Nieuwkerk, a TOS kezelő kód szerzője így kommentálja: Különösen a minimális várakozás fontos számomra. Bekapcsoltam az interaktív csomagjaim számára a Linux routeremen. Egy 33.6k-s modem kapcsolat mögött vagyok. A Linux a csomagokat három sorba rendezi prioritás szerint. Ezzel a módszerrel elfogadható interaktív eredmény kaptam egyidőben történő nagy letöltések esetén is (még jobb lenne az eredmény, ha nem lenne olyan nagy sor a soros driverben). Nyilvánvalóan nem tudod kontrollálni a bejövő csomagokat (MÁRMINT A TOS-ait), csak a kimenő csomagok kijutási prioritását tudod szabályozni. Hogy megtárgyald a prioritást a másik véggel, használni kell az RSVP nevű protokollt (amiről nem tudok semmit, szóval ne is kérdezd). A leggyakrabban használatos módszer a telnet és ftp kapcsolatok 'Minimum Delay' és az FTP adat 'Maximum Throughput' szabályozása. Például így: ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08
A '-t' opció két extra paramétert fogad, mindkettőt hexadecimálisan. Így bonyolult megoldásokat is elérhetünk a TOS bitekkel: az első maszk logika ÉS műveletet hajt végre a csomag jelenlegi TOS-án, majd a második maszk logika kizáró vagy (XOR) műveletet hajt végre a módosított TOS-on. Mindez persze túlságosan is bonyolult, csak használd az alábbi táblázatot: TOS Minimum Maximum Maximum Minimum
Név Delay Throughput Reliability Cost
Érték 0x01 0x10 0x01 0x08 0x01 0x04 0x01 0x02
Tpikus használat ftp, telnet ftp-adat snmp nntp
Műveletek a teljes láncon Az ipchains egyik nagyon hasznos tulajdonsága, hogy láncokba csoportosíthatjuk az összetartozó szabályokat. Úgy hívhatod a saját láncaidat, ahogyan csak akarod, de nem használhatod új lánc létrehozására a három beépített láncnevet (input, output, forward) és a célneveket (ACCEPT, REJECT, DENY, REDIRECT, MASQ, RETURN). Javallom, a láncnevekhez kisbetűket használj, mint a három beépítetté is ilyen, csak szépségi okokból. A név maximum nyolc karakter hosszú lehet.
314.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Új lánc létrehozása Csináljunk egy új láncot. Hívjuk testnek. # ipchains -N test
Ilyen egyszerű. Most már tudsz szabályokat is belerakni, ahogy fentebb elmagyaráztam. Lánc törlése Szintén egyszerű. # ipchains -X test
Miért '-X'? Nos, minden jó betű már használva van másra. Van néhány megszorítás lánc törlésekor: üresnek kell lennie (lásd a 'Lánc kiürítése' részt), és nem szabad egyetlen szabály céljának sem lennie. A három beépített láncot nem tudod kitörölni. Lánc kiürítése Ezzel a paranccsal kitörölhetjük egy adott láncban az összes létező szabályt. # ipchains -F forward
Ha nem határozol meg láncot, mindegyiket üríti. Lánc listázása Kilistázhatod egy láncban lévő szabályok összességét a '-L opcióval'. # ipchains -L input Chain input (refcnt = 1): (policy ACCEPT) target prot opt source ACCEPT icmp ----- anywhere
destination anywhere
ports any
# ipchains Chain test target DENY
destination anywhere
ports any
-L test (refcnt = 0): prot opt source icmp ----- localnet/24
A refcnt=0 a test láncban jelzi, hogy nincs egyetlenegy szabály sem sehol, amelynek a célja a test lánc lenne. Ennek nullánnak kell lennie, ha törölni akarsz egy láncot. Ha elhagyjuk a listázni kívánt lánc nevét, kilistázza az összes lánc szabályait, még az üreseket is.
315.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Van néhány hasznos opció, amit listázásnál alkalmazhatunk. A '-L -n' (numeric) például megóvja az ipchainst attól, hogy lookupoljon az IP címekért, ami így hosszú várakozástól kímél meg bennünket listázás közben. (akkor tart sokáig, ha nincsen rendesen beállítva a DNS, vagy blokkolod a DNS kéréseket). A portokat is számmal írja ki a nevek helyett. A '-v' opció listázásnál minden részletet kiír a képernyőre (vagy ahova irányítod az outputot), mint például a csomag és byte-számlálókat és a csomag jelzőket. Egyébként ezek elmaradnak. Például: # ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) Pkts bytes target prot opt tosa tosx ifname mark source destination ports 10 840 ACCEPT icmp 0xFF 0x00 lo anywhere anywhere any
A csomag és byte számlálók elé kerülhet esetleg 'K', 'M', 'G', ekkor az érték 1.000x, 1.000.000x, valamint 1.000.000.000x nagyobb értelemszerűen. A '-x'-el kiírja a számokat, nem számít, milyen nagyok. Számlálók nullázása. Hasznos lehet néha kinullázni a számlálókat. Ezt a '-Z' kapcsolóval tehetjük meg. Például: # ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx ifname mark source destination ports 10 840 ACCEPT icmp - 0xFF 0x00 lo anywhere anywhere any # ipchains -Z input # ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx ifname mark source destination ports 0 0 ACCEPT icmp 0xFF 0x00 lo anywhere anywhere any #
Irányelv megadása Elmondtuk fentebb, mi történik, ha a csomag elér egy adott lánc végére és még mindig nem volt illeszkedés valami szabályra, tehát a csomagnak még nincs targetje (Ha nem emlékszel, nézd meg még egyszer a 'Cél meghatározása részt'). Ebben az esetben az adott lánc irányelve a mértékadó. Csak és kizárólag a beépített láncok rendelkezhetnek irányelvekkel, mivel ha egy felhasználó által definiált lánc végére ér a csomag, akkor visszaugrik az előző lánc következő szabályára. Az irányelv az első négy speciális célok valamelyike lehetnek: ACCEPT, DENY, REJECT, MASQ. A MASQ csak a forward láncban érvényes. Fontos még tudni, hogy a RETURN céllal a beépített láncok szabályai valamelyikében explicit módon megcélozhatjuk az adott lánc irányelvét.
316.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Csomag ellenőrzése Néha jó lenne tesztelni a tűzfaladat, vajon mi történne, ha egy "ilyen és ilyen csomag" érkezne. Ehhez a '-C' opciót használhatod. Az opció után megadhatod, melyik láncot akarod tesztelni. A kernel mindig a beépített láncok egyikén küldi át a csomagot (attól függően, a csomag jön vagy megy), de te kezdheted bármelyik általad definiált lánccal is a tesztelést. A csomag fejléc-illeszkedési részleteit ugyanúgy adhatod meg, ahogy a szabályokat is készíted (forrás ip, cél ip, interfész, protokoll). Ha a protokoll tcp vagy udp, egy darab forrásport vagy célport is megadandó, ha pedig icmp, akkor az icmp típus és kód is (ha csak nem töredéket tesztelsz a '-f'-el, ekkor az előbbiek nem érvényesek). Ha a protokoll tcp (és a '-f' nincs megadva), akkor a '-y' megadható, jelezve, hogy a tesztcsomag SYN bitje be van kapcsolva. Itt egy példa egy tcp SYN csomag tesztelésére, ami 192.168.1.1-ről jön a 60000-es portról a 192.168.1.2 www portjára az ethernet interfészre (a 192.168.1.2 ethernetére), amint belép az input láncra (ez egy klasszikus bejövő www request felépítésére vonatkozó kérelem): # ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www packet accepted
Többszörös szabályok egyszerre való tesztelése Néha egyetlenegy parancssor okozhatja több szabály behatását is. Két módon mehet végbe: Először is, ha megadsz egy hosztnevet, ami több IP címet old fel (DNS-t használva), az ipchains úgy fog viselkedni, mintha több parancsot adtál volna ki a címek minden kombinációjával. A másik mód az, hogy megkéred az ipchainst, teljesítsen egyszerre több dolgot, használva a kétirányú opciót, a '-b'-t. Ennek hatására az ipchains úgy veszi, mintha kétszer ütötted volna be a parancsot, a második parancsban pedig felcserélted volna a forrás és célmezőket. # ipchains -b -A forward -j REJECT-s 192.168.1.1
A '-b' használható a beszúrással ('-I'), törléssel ('-D') (de nem azzal a változattal, amikor sorszámot adsz meg a törlésnél), hozzáfűzéssel ('-A'), és a teszteléssel ('-C'). Egy másik hasznos opció a '-v', ami mindent kiír, amit az ipchains a parancsaid következtében tesz. Például itt, megvizsgáljuk a töredékek viselkedését: # ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.1 -> 192.168.1.2 * > * packet accepted tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.2 -> 192.168.1.1 * > * packet accepted
317.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Hasznos példák Van egy betárcsázós PPP kapcsolatom (-i ppp0). Szeretem a news hírcsoportokat (p tcp -s news.virtual.net.au nntp), és levelezek is (-p tcp -s mail.virtual.net.au pop-3). A Debian FTP szerverét használom arra, hogy rendszeresen frissítsem a gépemet (p tcp -y -s ftp.debian.org.au ftp-data). Az interneten is szörfözök az Internet szolgáltatóm proxyján keresztül (-p tcp -s proxy.virtual.net.au 8080), viszont utálom azokat a reklámokat a doubleclick.net-ről a Dilbert archívumoknál (-p tcp -y -d 199.95.207.0/24 és -p tcp -y -d 199.95.208.0/24). Nem bánom, ha be-ftp-znek hozzám amíg online vagyok (-p tcp -d $IPCIMEM), de nem akarom, hogy valaki kívülről olyan IP-vel próbáljon csomagot küldeni, amilyen a lokális hálózatom kiosztása (-s 192.168.1.0/24). Ezt úgy hívják, hogy IP spoofing (nem tudom lefordítani, sajnálom), van viszont sokkal jobb módszer ennek kivédésére, lásd a 'Hogyan állítsak be IP spoofing ellen védelmet?' részt. Ez a felállás elég egyszerű, mert most nincs több gépem a belső hálómon, csak ez az egy. Nem akarom, hogy akármilyen helyi folyamat (Netscape, lynx stb) kapcsolatot létesítsen a doubleclick.net-tel: # ipchains -A output -d 199.95.207.0/24 -j REJECT # ipchains -A output -d 199.95.208.0/24 -j REJECT
Most, némi elsőbbségeket akarok kialakítani a különböző kifele haladó csomagok között (a bejövőkkel nem tudok mit csinálni ilyen téren). Mivel van jónéhány ilyen szabályom, jó ötlet külön láncba tenni őket, hívjuk a láncot mondjuk 'ppp-out'-nak. # ipchains -N ppp-out # ipchains -A output -i ppp0 -j ppp-out
Minimális várakozás a web forgalomnak és a telnetnek: # ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10 # ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10
Alacsony költség az ftp adatnak, nntp-nek (news) és a pop-3-nak: # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
Van egy kevés megszorítás a ppp0-ra érkező csomagoknak: csináljunk egy láncot, amit hívjunk 'ppp-in'-nek: # ipchains -N ppp-in # ipchains -A input -i ppp0 -j ppp-in
318.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Most, nem jöhet csomag a ppp0-ra olyan forrással, hogy 192.168.1.*, szóval ezeket kitiltom és loggolom: # ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
Az udp csomagokat megengedem a DNS lekérdezésekhez (egy cache-elő névszervert futtatok, ami minden kérést a 203.29.16.1-re továbbít, szóval onnan csak DNS válaszokat várok), a bejövő ftp kapcsolatokat és csak a kimenő ftp-adatot (ami csak az 1023 feletti portokat használja, és nem pedig a 6000 körül X11 portokat). # ipchains # ipchains ACCEPT # ipchains ACCEPT # ipchains
-A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT
Végül, a helyi forgalmat engedélyezem: # ipchains -A input -i lo -j ACCEPT
Most az alapértelmezett irányelvem az input láncon DENY, szóval minden más mehet a levesbe: # ipchains -P input DENY
Megjegyzés: Nem ebben a sorrendben állítanám be a láncaimat, mivel csomagok átjuthatnak akkor is, miközben konfigurálok. A legbiztosabb mód, ha először az alapértelmezett irányelvet DENY-re rakom, majd beillesztem a szabályokat. Persze, ha a szabályoknak DNS lookupokat kell kérniük a hosztnevek feloldásához, bajban lehetsz. Az ipchains-save használata Felállítani a lánc-szabályokat, majd legközelebb is emlékezni rájuk igen fájdalmas dolog. Az ipchains-save nevű szkripttel beolvashatod a lánc-beállításokat, és kimentheted őket egy file-ba. Most még bizonytalanságban hagylak, és nem árulom el, vajon mire is jó az ipchains-restore nevű szkript… Az ipchains-save kimenthet egy láncot, de akár az összest is egyszerre (ha nem adtál meg láncnevet paraméterként). Az egyetlen jelenleg működő opció a '-v', ami a szabályokat kinyomtatja az stderr-re, miközben ment. A három beépített lánc irányelve szintén mentődik.
319.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Az ipchains-restore használata Az ipchains-restore visszaállítja a láncokat, amit az ipchains-save-el előzőleg elmentettél. Két opciót adhatsz neki: A '-v', ami kiír minden szabályt, amit a program beállít, valamint a '-f', ami kiüríti a már benn levő felhasználó által definiált láncokat, ha léteznek (lentebb az info). Ha egy felhasználó által definiált lánc a bemenet, az ipchains-restore megnézi, hogy a kernelben van-e már ilyen nevű lánc. Ha igen, akkor a program jelzi számodra, hogy a bennt levő láncban ki fogja törölni az összes szabályt, vagy esetleg hagyja-e a fenébe a visszaállítást. A szabályok permanens beállítása A jelenlegi tűzfal beállításaid a kernelben vannak eltárolva, és ezek újraindításnál elvesznek. Javaslom használd az ipchains-save és az ipchains-restore nevű programokat szabályaid megőrzésére és visszaállítására. Ehhez, állítsd be a szabályokat, majd futtasd ezt (root-ként): # ipchains-save > /etc/ipchains.rules
Csinálj egy szkriptet, mint például ez: #! /bin/sh # Szkript a csomagszures kontrollalasara # Ha nincs szabaly nem csinal semmit [ -f /etc/ipchains.rules ] || exit 0 case "$1" in start) echo -n "Csomagszures bekapcsolasa…:" /sbin/ipchains-restore < /etc/ipchains.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo "." ;; stop) echo -n "Csomagszures kikapcsolasa…:" echo 0 > /proc/sys/net/ipv4/ip_forward /sbin/ipchains -X /sbin/ipchains -F /sbin/ipchains -P input ACCEPT /sbin/ipchains -P output ACCEPT /sbin/ipchains -P forward ACCEPT echo "." ;; *) echo "Hasznalat: /etc/init.d/packetfilter {start|stop}" exit 1 ;; esac exit 0
320.
Barhács OktatóKözpont
Linux rendszergazdai modul - 14. fejezet
Légy biztos abban, hogy ezt a szkriptet még a boot-folyamat eleje tájékán futtatod. Jómagam (Debian 2.1) csináltam egy szimbolikus linket az /etc/rcS.d könyvtárba, S39packetfilter néven (így ez előbb fog lefutni, mint az S40network. Hogy miért? Hát hogy mire a hálózat felhúzódik, a csomagszűrési szabályok már benn legyenek a kernelben).
Iptables Az iptables az ipchains-t váltja fel, de kompatíbilis marad annak szintaktikájával és működésével. Hosszabb leírást nem is adunk róla, a legtöbb opció megegyezik az ipchains-nél leírtakkal. Különbségek az iptables és az ipchains között - Először is, a beépített láncok nevei kisbetűsről NAGYBETŰSRE változtak, jelezve, hogy az INPUT és az OUTPUT láncok kizárólag helyi-forrású vagy helyicélú csomagokat kaphatnak. Ezeket a kimenő és bejövő csomagok kölcsönös vizsgálatára használjuk. - Az "-i" flag már csak a bejövő interfészt jelenti, és kizárólag az INPUT és a FORWARD láncon használjuk. Az OUTPUT és a FORWARD láncok kimenő interfészeit "-o"-val jelöljük. - TCP és UDP portokat külön meg kell határozni a --source-port vagy --sport (illetve --destination-port/ -dport) opciók használatával, és kötelező őket a "-p tcp" vagy a "-p udp" opciók után meghatározni, hogy a TCP illetve UDP kiterjesztéseket a kernel betöltse. - A TCP -y kapcsoló új neve --syn, és szintén kötelező a "-p tcp" után meghatározni. - A DENY célpont új neve véglegesen DROP. - A láncok listázás közbeni nullázása már lehetséges. - A beépített láncok nullázása nullázza az irányelv számlálóját is. - A láncok listázása során a számlálókat kis pillanatfelvételként kapod meg. - REJECT és LOG már kiterjesztett célpontok, ami azt jelenti hogy különálló kernel modulban vannak. - A láncok nevei maximum 31 karakteresek lehetnek. - A MASQ új neve MASQUERADE és különbözik a szintaxisa is. A REDIRECT, miközben a nevét megtartotta, szintén szintaxisváltozáson ment keresztül. Tekintsd meg a NAT-HOWTO-t a további konfigurálási információkért mindkét esetben. - Az -o opció többé nem arra használatos, hogy a csomagot a felhasználói térbe irányítsuk (lásd még: "-i" feljebb). A csomagok a felhasználói térbe mostantól a QUEUE célponton keresztül mennek. És egy példa: ## Alkotunk egy láncot, mely a felénk kezdeményezett kapcsolatokat tiltja, a bentről jövők kivételével. # iptables -N block # iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT # iptables -A block -j DROP ## Ugrás erre a láncra az INPUT és a FORWARD láncból. # iptables -A INPUT -j block # iptables -A FORWARD -j block
321.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Shell programozás Bash Shell A shell a felhasználó és a kernel közötti kommunikációt biztosítja. Egy olyan parancsértelmezonek tekintheto, amely értelmezi a felhasználó által kiadott parancsokat, majd továbbküldi azokat a kernelnek. A shell egy nagyon egyszeru felhasználói felületet biztosít. A shell nem csupán a parancsok értelmezését végzi, hanem igényeinknek megfeleloen alakítható és programozható környezetet is biztosít. A shellnek saját programnyelve van, amely lehetové teszi olyan programok írását, amelyben Linux parancsok kerülnek végrhajtásra. A Linux-rendszer minden egyes felhasználójának saját felhasználói felülete (shellje) van. A felhasználók a saját igényeik szerint alakíthatják a shelljeiket. Az évek során számos shelltípus lett kifejlesztve. Jelenleg három jelentosebb shell létezik: a Bourne, a Korn és a C-shell. Ezeknek a linux alá továbbfejlesztett változatai a Bourne Again Shell (BASH), a Public Domain Korn Shell (PDKSH) és a TCSH shell. Ezek közül a BASH shell rendelkezik a többi shell legtöbb tulajdonságával. A shelleket rendre a követkzo parancsokkal indíthatjuk el: bash, ksh, tcsh. Egy shellbol kilépni az exit parancs segítségével lehet. A shell konfigurálására számos változót használhatunk. Ezek értékeit az inicializációs fájlokban állíthatjuk be. Bourne shell esetén ez a .bash_profile, Cshellben .login nevu fájl. Ezek a shell indításakor futnak le. Bash shell változók -
HOME: A felhasználó home könyvtárának elérése. LOGNAME: Felhasználói azonosító. TZ: Arendszer által használt idozóna. SHELL: Az általunk használt shelltípus teljes elérési útvonala. PATH: A shell által futtatott parancsok elérési útvonalai. PS1: Elsodleges prompt. PS2: Másodlagos prompt. IFS: Mezoelválasztó karakter.
Változóértékadás -
$var: ar értéke; semmi ha var nincs deklarálva ${var}: u.a.; hasznos, ha alfanumerikus karakterek követik a változó nevet ${var:-dolog}: var értéke, ha definiálva van, egyébként dolog. $var változatlan ${var:=dolog}:var értéke, ha definiálva van, egyébként dolog. Ha var nincs definiálva, akkor értéke dolog lesz. ${var:?uzenet}:ha var definiálva van, akkor var értéke, ha nem, akkor kiírja az üzenetet és a burok kilep. Ha az üzenet üres, kiírja, hogy var:parameter ${var:+dolog}: dolog, ha var definiálva van, egyébként semmi 322.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Shell muveletek A shell rendelkezik négy speciális karakterrel: *, ? , [ , ] . Ezek segítségével a parancssorban fájlnév listákat hozhatunk létre argumentumként. A * egy tetszoleges karaktersorozat, a ? egyetlen tetszoleges karakter, a [ ] pedig egy meghatározott karakterkészlet helyettesítésére szolgál. A Linuxban a fájlok és az eszközök, valamint a parancsok ki- és bemenetei, ugyanazzal a szerkezettel rendelkeznek, ez nem más mint egy bájtfolyam. Egy parancs valamennyi bemeno adata egy standard bemenetnek nevezett adatfolyamba kerül, míg a kimeno adatok egy standard kimenetnek nevezett adatfolyamot alkotnak. Mivel a standard bemenet és kimenet felépítése ugyanolyan mint a fájloké, könnyen össze lehet oket kapcsolni egymással. Az átirányítási operátorok segítségével a standard bemenetet fájlokból vehetjük, míg a standard kimenetet fájlokba irányithatjuk át. Mivel a parancsok be és kimenete ugyanazzal a formátummal rendelkezik, egy parancs kimenetét egy másik parancs bemeneteként is használhetjuk. Egy parancssoron belül számos parancsot egymásután fuzhetünk úgy, hogy mindegyik parancs az elozo kimenetét használja bemenetként. Shell scriptek A különbözo shellek a programozási nyelvekhez hasonlóan programozható környezetet is kínálnak. Lehetoségünk van változók definiálására, programkonstrukciók kialakítására pl.: elágazás, ciklus. A scriptek ki- és bemenete az echo, read utasításokkal, valamint beágyazható dokumentumokkal szabályozható. A beágyazott dokumentumok azt teszik lehetové, hogy a scriptbe begépelt adatokat Linux-utasítások bemeneteként lehessen kezelni. A beágyazott dokumentum kezdetét a << operátor jelzi, amit egy a felhasználó által választott karaktersor követ. Ezt a karaktersort kell a beágyazott dokumentum végén egy külön sorban elhelyezni. Egy változó értékére úgy lehet hivatkozni, ha elé írjuk a $ karaktert. Bash shellben a változók karakterlánc típúsúak, ezért összehasonlításukraegyedül az egyenloség operátora használható. Ha valamilyen matematikai muveletet szeretnénk végezni, akkor a let utasítást kell használni. A TCSH shell numerikus típúsú változók deklarálását is lehetové teszi. A karakterláncok deklarálására és értékadására a set utasítást, numerikus adatoknál a @ karaktert használjuk. Megjegyzést a # karakter után lehet írni egy sorba.
323.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Bash shell utasításai -
Break: Kilép a for, while, until ciklusokból.) Continue: Átugorja a ciklumag még végre nem hajtott utasításait, és elkezdi a következo iteráció végrehajtását. Echo: Kiírja az argumentumaként megadott értékeket. Eval: Végrahajtja a parancssor által tartalmazott utasítást. Exec: Lefuttat egy külso utasítást. Exit: Kilép a shellbol. Export változó: Átmásolja a shellbe a változót. History: Felsorolja az eseménylista utolsó néhány elemét. Read: Beolvas egy sort a standard bemenetrol. Return: Kilép egy függvénybol.) Set: Segítségével új értéket adhatunk a parancssori argumentumoknak. Test érték opció érték: Összehasonlítja a két argumentum értékét. Pl.: test 2 -eq $count Unset: Megszüntet egy korábban definiált változót
Parancssori argumentumok -
$0: A linux- parancs neve. $n: Az n. Parancssori argumentum. $*: Az összes parancssori argumentum az elsotol kezdve. $@: Az összes parancssori argumentum az elsotol kezdve, önálló egységként kezelve.. $#: A parancssori argumentumok száma.
Process változók -
$$: Az aktuális processz PID-je. $!: A háttérben legutoljára elindított processz PID-je. $?: Az utoljára végrehajtott utasítás visszatérési értéke.
Kifejezésekben használható aritmetikai és relációs operátorok -
*, /, +, -, <, > ,<=, >=, =, ==, != !: Logikai nem. ||: Logikai vagy. &&: Logikai és. %: Modulo.
Test utasítás operátorai -
gt: Nagyobb mint. lt: Kisebb mint. ge: Nagyobb egyenlo. le: Kisebb egyenlo. eq: Egyenlo. ne: Nem egyenlo. 324.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Karakterláncok összehasonlítása -
z: Megvizsgálja, hogy üres e a karakterlánc nn: Megvizsgálja egy karakterlánc értékét. =, !=: Két karakterlánc azonos, vagy nem. str: Megvizsgálja, hogy a karakterlánc nem NULL string e.
Vezérlési szerkezetek a shell-ben Már említettük, hogy a shell egy teljes programozási nyelv, ennek megfelelően viszonylag bonyolult vezérlési szerkezeteket, feltételes elágazásokat, ciklusokat és változókat is definiál. A változókról már esett szó a 4. fejezetben, most a vezérlési szerkezetekkel ismerkedünk meg. Elsőként azonban emlékeztetjük az olvasót az exit változóra, arra az egész számra, amelyet a UNIX parancsok lefutásukkor beállítanak. A UNIX manuálokban az egyes programoknál mindig szerepel a lehetséges visszatérési értékek felsorolása. Valójában most fogjuk használni ezt a változót, mivel a parancsok visszatérési értékét használják az alább ismertetendő shell vezérlési szerkezetek is. Maguk a vezérlési szerkezetek, szintaktikájuk és szemantikájuk egyaránt a C nyelv hasonló szerkezeteire emlékeztetnek, ami természetesen nem véletlen. Feltételes elágazás Az alapvető elágazás szerkezet a UNIX shell-ben az if-szerkezet, amelyben, a más programnyelvekben szokott módon, egy feltétel teljesüléséhez van kötve, hogy mi legyen a soronkövetkező végrehajtandó utasítás. Az if-szerkezet a következőképpen néz ki: if feltétel utasítás elif feltétel utasítás else utasítás fi
Az if-ág akkor hajtódik végre, ha az if kulcsszó után megadott feltétel logikai értéke igaz, azaz a feltétel visszatérési értéke nulla. A feltétel több parancsból is állhat (ezeket a már ismert pontosvesszővel, illetve a kerek zárójelekkel, vagy éppen a pipe révén csoportosíthatjuk). Több parancs esetén az utolsó parancs visszatérési kódja számít a feltétel kiértékelésekor. Az else rész el is maradhat, de több elágazási feltételt is tartalmazhat. Vigyázni kell arra, hogy a feltételeket a fentiek szerint tördeljük sorokba, vagy ha egy sorba írjuk őket, akkor pontosvesszővel válasszuk őket el egymástól, mert ebből ismeri fel, hogy az adott helyen kulcsszót kell keresnie, és nem az utolsó utasítás egy argumentumáról van szó.
325.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Többirányú elágazás A case utasítás a többszörös elágazások megvalósításának legkézenfekvőbb eszköze. Formája a következő: case karakterlánc in (minta) érték) utasítás ;; esac
A case szerkezet a következőképpen működik: a shell megkeresi azt az első mintát, amelyik illeszkedik az érték aktuális értékéhez, s végrehajtja azt a parancsot vagy parancssorozatot, amelyik ehhez az illeszkedő mintához tartozik. A minta megadásakor az állománynév kifejtésénél tárgyalt metakarakterek használhatóak. Ha az érték aktuális értéke egyik mintára sem illeszkedik, akkor semelyik parancs sem hajtódik végre. Fontos hangsúlyozni, hogy az elsőnek talált illeszkedő mintához tartozó parancsokat hajtja végre a shell, ezért a speciálistól az egyre általánosabb minták felé haladva célszerű megadni a mintákat. A '|' karakter használatával több mintát is megadhatunk, ha ezek bármelyikére illeszkedik az érték, a parancság végrehajtódik. Ciklusok while / until utasítás do utasítás done
Addíg ismételgeti a ciklusmagban megadott utasításokat, amíg a tesztutasítás igaz / hamis. for változó[in értéklista] do utasítás done
Addig ismételgeti a ciklusmagot, amíg a változó fel nem veszi az értéklista minden elemét. Ha nem adunk meg értéklistát, akkor amíg a változó vel nem veszi a parcssori argumentumok értékét. select string in elemlista do utasítás done
A select utasítás létrehoz egy elemlist által meghatározott menüt, majd végrehajtja az utasítást.
326.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
Példaprogramok Az alábbiakban néhány shellscript vizsgálatán keresztül illusztráljuk a shell parancsnyelvének eddig tanult jellemzőit, s azt, hogy hogyan lehet gyorsan meglepően komplex feladatok ellátására szolgáló keretprogramokat létrehozni. Javasoljuk az olvasónak, hogy egy-egy program megértése után gondolja el, hogy kedvenc programnyelvén mekkora munkával tudna azonos feladatot ellátó programot írni. 1. Kiírja, hogy délelott, vagy délután van. a=`date|cut -c12-13` if [ $a -gt 12 ] then echo $a echo "Kellemes delutant!" else echo $a echo "Jo reggelt!" fi
2. Addíg kérdezi, hogy okos e Zolika amíg a válasz nem. echo "Okos a Zolika? (i/n) " read valt while [ "$valt" != "i" ] do echo "Biztos????" echo "Na meg egyszer! Okos a Zolika? (i/n)" read valt done echo "Na vegre hogy eltalaltad!"
3. Adott számú terminál hangjelzés n=${1-1} while [ $n -gt 0 ]; do echo '\07\c' n=`expr $n - 1` sleep 1 done
A bell program egyet csenget a terminálon, ha argumentum nélkül hívtuk meg, egyébként pedig annyit, amekkora az első argumentuma. A program első sorában a paraméterek behelyettesítésének egy gyakori esetét láthatjuk. A ${var-value} konstrukció a value értéket adja vissza, ha a változó nincs beállítva. Ily módon tehát default paramétermegadást lehet biztosítani a shell változóinak. A konkrét példában az n shell-változó értéke azonos lesz az első pozicionális paraméterrel, ha olyan létezik; ha viszont pozicionális paraméter nem volt megadva, akkor n értéke 1 lesz.
327.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
A következő programsorban egy while ciklus kezdődik: a ciklus végrehajtási feltétele a szögletes zárójelek közé zárt kifejezés; ha ennek logikai értéke igaz, azaz az n shell-változó értéke nagyobb vagy egyenlő mint nulla, akkor végrehajtódik a ciklustörzs. Figyeljük meg, hogy mivel a do kulcsszó nem külön sorban szerepel, kell eléje a végrehajtási feltétel lezárására a pontosvessző szeparátor. (Maga a [ $n -gt 0 ] feltételmegadás egy formai rövidítés, a [ ... ] forma a UNIX test parancsának jelzésére szolgál. A feltételmegadás teljes formájában kiírva tehát while test $n -gt 0 lenne.) A következő sorban az echo parancs kiírja a 07 ASCII kódú karaktert (CTRL-G), ami a terminálon a hangjelzést generálja. A \c biztosítja az echo parancsban azt, hogy a csengőkarakter "kiírása" után ne íródjék ki feleslegesen egy újsor karakter is. A következő sorban az expr parancs kifejezésként feldolgozza az argumentumokat, amelyekkel meghívták, s az eredményként kapott értéket (jelen esetben az n változó értékénél eggyel kisebb számot) kiírja a standard outputra; a `...` metakarakterek segítségével azonban ezt az értéket argumentumként átadhatjuk az n shell-változó új értékének beállítását végző parancsnak. E kissé bonyolult módon sikerült n értékét eggyel csökkenteni. 4. Állománynevek cseréje TMP="exch$$" mv $1 $TMP && mv $2 $1 && mv $TMP $2
Az shell program két állomány nevét cseréli fel. Elsőként egy ideiglenes állománynévre nevezi át az egyik állományt, majd hármas cserét hajtva végre végül a két kiindulási állomány neve felcserélődik. A programban két említésre érdemes vonás van. Az egyik az egyedi nevű állományok létrehozásával kapcsolatos. Számos esetben lehet szüksége arra egy programnak, hogy egyedi nevű állományokat hozzon létre, például ha egyidejűleg több felhasználó is futtatja a programot, s mindegyik futó példány önálló ideiglenes állományokat kell hogy generáljon. E célra igen alkalmas a shell $$ jelölésű shell-változójának használata: ez ugyanis mindig az adott folyamat azonosítóját, a PID értékét tartalmazza. Mivel a UNIX gondoskodik arról, hogy a PID értékek egyediek legyenek, az ennek felhasználásával létrehozott állománynevek is egyediek lesznek. Az alábbi program első sorában ennek kihasználásával hoztuk létre a TMP nevű ideiglenes állományt, pontosabban az állomány nevét. A következő sorban megadott utasításokat a && karakterek választják el; ez a rövidítés azt jelenti, hogy a parancssor következő parancsa csak akkor fut le, ha az előző parancs visszatérési értéke igaz volt (0 exit státusz), azaz ha az előző program sikeresen lefutott. (E megadás végső soron egy else ág nélküli if szerkezettel azonos.) A && jelölés párja a || karakterpár, mely azt jelzi, hogy a soron következő parancs csak akkor fut le, ha az előző logikai értéke hamis volt. 5. Azonos nevu állományok keresése A program végignézi a /bin, /usr/bin és /etc katalógusokat, s kiírja mindazokat az állományokat, amelyek ezen katalógusok valamelyikében szerepelnek, s azonos nevűek a paraméterként megadott állománnyal.
328.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
usage='usage:\tsame_nm files' s1="/bin" s2="/usr/bin" s3="/etc" case $# in 0) echo $usage; exit ;; esac case $1 in '-?') echo $usage; exit ;; esac for i do [ -s "$s1/$i" ] && ls -l $s1/$i [ -s "$s2/$i" ] && ls -l $s2/$i [ -s "$s3/$i" ] && ls -l $s3/$i done
A program első case szerkezetében azt vizsgáljuk, hogy hány paraméterrel lett meghívva same_nm. $# az adott program pozicionális paramétereinek számát adja meg ($0 nem számít bele); ha ez az érték nulla akkor same_nm kiírja help szövegként az előre definiált usage shell-változó tartalmát, és az exit parancs hatására terminálja magát. A következő case szerkezet az első pozicionális paramétert vizsgálja, s ha az -?, akkor szintén a helpszöveget írja ki, majd befejeződik. Nem véletlen a '-?' minta megadásánál a '...' idézőjelpár használata: ha nem védenénk le ezáltal a -? stringet a shell-től, akkor az a ? karaktert metakarakterként értelmezné, s minden - karakterrel kezdődő argumentum hatására ezt az ágat hajtaná végre. Végül a for ciklusban minden pozicionális paraméterre végrehajtódik a három if ág; a rövidítések miatt nehezen értelmezhető első ránézésre, de már láttuk, hogy a [ .. ] karakterek közti rész a test utasításnak felel meg, az utánuk írt && pedig az előző (test) parancs sikeres lefutása esetén hajtódik csak végre: azaz ha a "$s1/$i" nevű állomány létezik és nem nulla a hossza, akkor az ls paranccsal kiírja részletes adatait. 6. Frissen módosított állományok listázása Az program azoknak az állományoknak az adatait listázza ki (az ls opciói használhatóak), amelyeket egy adott időn belül módosítottunk. Default beállítása szerint a kiindulási katalógusban végzi el a vizsgálatot, az aznap módosított állományokat keresve. Az opciók utáni első paraméter, ha szerepel, a katalógus, ahonnan kiindulva keresünk, ezután lehet megadni az időhatárt, a find parancs jelölésmódja szerint.
329.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
usage='Usage:\tupdt [-?logtasdrucifp] [dir (def:$HOME)] (def:0)]\n \t\t+/- means more/less than days' f=/tmp/updt.dat until test $# -eq 0 do case $1 in '-?') echo $usage; exit ;; -*) flags="$flags $1"; shift ;; *) break ;; esac done if test "$flags" then find ${1-$HOME} -mtime ${2-0} -type f -print >$f if test -s $f then ls $flags `cat $f` fi rm -f $f else find ${1-$HOME} -mtime ${2-0} -type f -print fi exit
[[+-]
day
Az until ágban addig marad a program, amíg valamennyi pozicionális paramétert fel nem dolgozta, azaz amíg $# értéke nullára nem csökken. A paraméterfeldolgozást a case ciklus végzi, amely az első pozicionális paramétert vizsgálja, a same_nm esetében látott módon lekezeli a segélykérő -? opciót, az összes többi opciót pedig hozzáírja a flags nevű shell-változóhoz. A shift parancs arra szolgál, hogy a pozicionális változókat eggyel balra léptesse, azaz $1 törlődik, $2-ből $1 lesz, s így tovább. Amikor nem opció a pozicionális paraméter, akkor a ciklus megszakad, a további pozicionális paramétereket változatlanul hagyva. A program további része egy if-else szerkezetbe ágyazódik. Ha nem adtunk meg opciókat (flags nullstring, ez az else ág), akkor a find parancs hajtódik végre, s a talált állományoknak pusztán az elérési neveit írja ki. Ha ellenben definiáltunk opciókat, akkor a find parancs az f ideiglenes állományba irányítja kimenetét. Ha a find talált állományokat, akkor az f ideiglenes állomány hossza nagyobb mint nulla (ezt vizsgálja a test -s parancs), s ekkor az ls parancs argumentumlistaként megkapja a talált állományok neveit. A paraméterátadás azért történt ilyen bonyolult módon, mert ha az ls `find ...` szerkezetet használtuk volna, akkor a program nem működne helyesen. Ha ugyanis a find nem talál a feltételeknek megfelelő állományt, akkor argumentumként egy nullstringet ad át ls-nek; ls viszont ignorálja a nullstringet, s tényleges argumentum hiányában az aktuális katalógust listázza ki.
330.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
7. Írjuk ki az a1, a2 és a3 állományok nevét es tartalmát. for i in a1 a2 a3; do echo Az allomany neve: $i echo Az allomany tartalma: cat $i done
8. Számkiírás case $1 in 0) echo nulla;; 1) echo egy;; 2) echo ketto;; 3) echo harom;; 4) echo negy;; 5) echo ot;; 6) echo hat;; 7) echo het;; 8) echo nyolc;; 9) echo kilenc;; nulla) echo 0;; egy) echo 1;; ketto) echo 2;; harom) echo 3;; negy) echo 4;; ot) echo 5;; hat) echo 6;; het) echo 7;; nyolc) echo 8;; kilenc) echo 9;; esac
9. Az EXIT STATUS $ pwd /home/h123456 $ echo $? 0 $ pwdd #feltetelezem, hogy nincs pwdd nevu futtathato allomany sh: pwdd: command not found $ echo $? 1
Az EXIT STATUS a parancsok végrehajtásának sikerességéről informál. Sok Unix parancs, de nem mindegyik, állítja be ezt az értéket, amit a shellben a ? változó $? alakú lekérdezésével tudunk meg. Általában a sikeresen lefutott parancs 0-ra állítja, ellenkező esetben egy ettől eltérő értékre. Ha egy parancs nem állítja a visszatérési változó értéket, akkor a legutolsó beállítás marad érvényben.
331.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
10. Írjunk programot, amelyik megvizsgálja, hogy létezik-e parancsargumentumként megadott fájl, és ha nem, akkor hozzuk létre.
a
if test ! -s $1 then echo A(z) $1 nevu fajl nem letezik, vagy ures! ls -l >$1 else echo A(z) $1 nevu fajl letezik! fi
11. A program írja ki a parancsargumentumait addig, amíg "end"-et nem talál. if test $# -eq 0 then echo Hianyoznak az argumentumok! exit 1 fi while test $1 != "end" do echo Az argumentum: $1 shift if test $# -eq 0 then echo A parancsargumentumok nem tartalmazzak az end-et. exit 1 fi done echo Megtalaltam az end-et!
12. Írjunk shell scriptet, amelyik kiírja a 2 parancsargumentum összegét, különbségét és szorzatát. if test $# -ne 2 then echo A programnak pontosan 2 argumentuma kell legyen. exit 1 fi SUM=`expr $1 + $2` DIFF=`expr $1 - $2` PROD=`expr $1 \* $2` echo \$1= $1 echo \$2= $2 echo $1 + $2 = $SUM echo $1 - $2 = $DIFF echo $1 \* $2 = $PROD
Az expr logikai vagy aritmetikai kifejezésekként kezeli az argumentumokat és kiértékeli azokat. Az eredményt a standard outputra küldi. Az egyes argumentumokat szóközökkel kell elválasztani, a metakaraktereket semlegesíteni kell. A használható függvények: - +: összeadás - -: kivonás - *: szorzás - /: osztás - %: maradékos osztás
332.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
13. Írjunk shell scriptet, aminek 2 paramétere van. A script számoljon el egyesével az első paramétertől a másodikig és közben írja ki a számokat. usage="szamol1 arg1 arg2" if test $# -ne 2 then echo Tul sok vagy tul keves parameter! echo $usage exit 1 fi if test $1 -gt $2 then echo Az elso parameter kisebb kell legyen, mint a masodik. echo $usage exit 1 fi x=$1 while test $x -le $2 do echo $x x=`expr $x + 1` done
14. Hány Anna nevű user van összesen és ezek közül hányan nincsenek bejelentkezve? x1=`cat /etc/passwd | grep Anna | wc -l` x2=`finger | grep Anna | wc -l` x3=`expr $x1 - $x2` echo x3
15. Írjuk ki, hogy fél perc várakozás után milyen folyamatok futnak a gépen. (sleep 30; ps)&
16. Nézzük meg, hogy egy bizonyos felhasználó dolgozik-e és fut-e a épp valamilyen folyamata. if who | grep $1 >temp; then echo "$1 dolgozik" if ps -ef | grep $1; then echo "a folyamatok" fi else echo "$1 nem dolgozik." fi
17. Írjunk "ébresztoórát" ami minden egész órakor üzenetet küld a képernyore. $ cat >alarm1 until date | grep ':00:' >temp/FONT> sleep 30 done echo Haho!
do
333.
Barhács OktatóKözpont
Linux rendszergazdai modul - 15. fejezet
18. Van-e egy bizonyos évben hétfovel kezdodo hónap? Ha találunk ilyet, írjuk ki betukkel a hónap nevét. k=ures p=elso for i in 1 2 3 4 5 6 7 8 9 10 11 12; do if cal $i $1 | grep ' 6$' >temp then k=nemures ho=abc case $i in 1) ho=januar;; 2) ho=februar;; 3) ho=marcius;; 4) ho=aprilis;; 5) ho=majus;; 6) ho=junius;; 7) ho=julius;; 8) ho=augusztus;; 9) ho=szeptember;; 10) ho=oktober;; 11) ho=november;; 12) ho=december;; esac fi if test $k = 'nemures'; then if test $p = 'elso'; then echo Az $1 evben hetfovel kezdodik p=masod fi echo $ho k=ures fi done if test $p = 'elso'; then echo Az $1 evben nincs fi
334.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
Tartalomjegyzék A UNIX/LINUX TULAJDONSÁGAI......................................................................................................... 2 PÁR SZÓ A UNIX VILÁGRÓL ..................................................................................................................... 2 A UNIX RÖVID TÖRTÉNETE...................................................................................................................... 2 A Linux kialakulása.......................................................................................................................... 3 A lehetőség ................................................................................................................................. 3 Linus Torvalds operációs rendszert ír......................................................................................... 4 Az Internet közössége felkarolja a fejlesztést............................................................................. 4 A UNIX TÍPUSÚ RENDSZEREK BELSŐ FELÉPÍTÉSE ..................................................................................... 5 A Unix magja, a kernel .................................................................................................................... 5 A kernel felépítése ...................................................................................................................... 5 Héjszerkezetű felépítés .............................................................................................................. 6 A parancsértelmező vagy shell ....................................................................................................... 6 Futásidejű dinamikusan csatolt könyvtárak .................................................................................... 7 CSOMAGSTRUKTÚRA ÉS FÜGGŐSÉGEK.................................................................................................... 7 KERNELEK, DISZTRIBÚCIÓK, VERZIÓK ...................................................................................................... 7 Folyamatosan fejlődő szoftver ........................................................................................................ 7 A kernel verziószámáról.................................................................................................................. 8 A disztribúciókról ............................................................................................................................. 8 A FÁJLRENDSZER ................................................................................................................................... 9 Felhasználói nézőpont .................................................................................................................... 9 Fájl típusa ................................................................................................................................. 10 Fájlrendszer kitüntetett pontjai.................................................................................................. 10 Rendszer nézőpont ....................................................................................................................... 11 Biztonsági, tulajdonviszonyi kérdések ...................................................................................... 12 Fájlok és felhasználók kapcsolata, hozzáférés a fájlokhoz ...................................................... 12 Eszközök ....................................................................................................................................... 13 FELHASZNÁLÓK ................................................................................................................................... 13 Felhasználói szintek ...................................................................................................................... 14 Felhasználók csoportosítása......................................................................................................... 14 A FUTÁSI SZINTEK (RUNLEVELS)............................................................................................................ 14 GRAFIKUS FELÜLET: AZ X W INDOW ...................................................................................................... 15 Mi az az X Window?...................................................................................................................... 15 Az X Window működése ............................................................................................................... 15 Az X Window konfigurálása és indítása........................................................................................ 16 A UNIX/LINUX HASZNÁLATA ............................................................................................................. 17 A TERMINÁL KONCEPCIÓ....................................................................................................................... 17 BEJELENTKEZÉS .................................................................................................................................. 18 PARANCSOK FUTTATÁSA ...................................................................................................................... 18 ALAPPARANCSOK ................................................................................................................................. 19 login-logout.................................................................................................................................... 19 who................................................................................................................................................ 19 whoami .......................................................................................................................................... 19 clear............................................................................................................................................... 20 reset .............................................................................................................................................. 20 pwd................................................................................................................................................ 20 man ............................................................................................................................................... 20 date ............................................................................................................................................... 21 uptime............................................................................................................................................ 22 which ............................................................................................................................................. 22 shutdown ....................................................................................................................................... 22
335.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
LEMEZKEZELŐ PARANCSOK .................................................................................................................. 23 fdformat ......................................................................................................................................... 23 mkfs............................................................................................................................................... 23 mount ............................................................................................................................................ 23 df ................................................................................................................................................... 24 KÖNYVTÁRKEZELŐ PARANCSOK ............................................................................................................ 24 ls .................................................................................................................................................... 24 cd................................................................................................................................................... 27 tree ................................................................................................................................................ 27 mkdir.............................................................................................................................................. 27 rmdir .............................................................................................................................................. 28 HELYETTESÍTŐ KARAKTEREK HASZNÁLATA ............................................................................................ 29 ÁLLLOMÁNYKEZELŐ PARANCSOK .......................................................................................................... 30 cat.................................................................................................................................................. 30 more .............................................................................................................................................. 30 less ................................................................................................................................................ 31 touch.............................................................................................................................................. 32 cp................................................................................................................................................... 32 mv.................................................................................................................................................. 33 rm .................................................................................................................................................. 34 ln.................................................................................................................................................... 34 chmod............................................................................................................................................ 35 chown ............................................................................................................................................ 36 chgrp ............................................................................................................................................. 36 A Midnight Commander ................................................................................................................ 37 SHELL HASZNÁLAT ............................................................................................................................... 40 Környezeti változók ....................................................................................................................... 40 Különbségek az egyes shellek között ........................................................................................... 41 Néhány hasznos ismeret a bash-ról.............................................................................................. 41 FOLYAMATKEZELÉS A UNIX/LINUX RENDSZERBEN .................................................................................. 42 A folyamatok szerepe a rendszerben............................................................................................ 42 Előtér- és háttérfolyamatok....................................................................................................... 42 Processzek és felhasználók ..................................................................................................... 43 Folyamatok és prioritások ......................................................................................................... 43 Öregedés .................................................................................................................................. 43 FOLYAMATKEZELŐ PARANCSOK ............................................................................................................ 44 ps................................................................................................................................................... 44 nice................................................................................................................................................ 44 top ................................................................................................................................................. 44 kill .................................................................................................................................................. 45 SZÖVEGSZERKESZTÉS UNIX/LINUX RENDSZERBEN ................................................................................ 46 vi.................................................................................................................................................... 47 mcedit............................................................................................................................................ 50 RENDSZERADMINISZTRÁCIÓS PARANCSOK............................................................................................. 52 useradd, groupadd ........................................................................................................................ 52 usermod, groupmod ...................................................................................................................... 52 userdel, groupdel........................................................................................................................... 53 groups ........................................................................................................................................... 53 passwd .......................................................................................................................................... 53 HÁLÓZATI PARANCSOK ......................................................................................................................... 54 mail................................................................................................................................................ 54 talk ................................................................................................................................................. 54 write............................................................................................................................................... 55
336.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
A TCP/IP PROTOKOLLCSOMAG ........................................................................................................ 56 MI IS AZ A TCP/IP?.............................................................................................................................. 56 A TCP/IP PROTOKOLLOK ÁLTALÁNOS JELLEMZŐI .................................................................................. 59 A TCP/IP címzési mechanizmusa................................................................................................. 61 A TCP/IP címek felépítése........................................................................................................ 61 TCP/IP címosztályok................................................................................................................. 61 Csomagstruktúra ........................................................................................................................... 62 A TCP szint ............................................................................................................................... 62 Az IP szint ................................................................................................................................. 64 Az Ethernet szint....................................................................................................................... 65 Datagrammok fragmentálása és összerakása ......................................................................... 66 Az Ethernet és az ARP ................................................................................................................. 67 Socket-ek, portok és ablakok ........................................................................................................ 68 Nem TCP protokollok: UDP és ICMP............................................................................................ 70 Név- és információszervezés: a tartomány (domain) rendszer .................................................... 71 DNS........................................................................................................................................... 73 Útvonalválasztás a TCP/IP meghatározásában ........................................................................... 85 Alhálózatok, hálózati maszkok, CIDR....................................................................................... 87 RIP ............................................................................................................................................ 90 NAT ........................................................................................................................................... 91 IP Multicast (többesküldés) ........................................................................................................... 92 Internet Group Management Protocol (IGMP).......................................................................... 92 Multicast routing........................................................................................................................ 92 A LEGGYAKORIBB INTERNETES ALKALMAZÁSPROTOKOLLOK ................................................................... 94 HTTP ............................................................................................................................................. 94 Mit is csinál ez a protokoll?....................................................................................................... 94 A protokoll elemei ..................................................................................................................... 95 FTP................................................................................................................................................ 96 Mit is csinál ez a protokoll?....................................................................................................... 96 A protokoll elemei ..................................................................................................................... 96 E-mail ............................................................................................................................................ 97 SMTP ........................................................................................................................................ 97 POP3......................................................................................................................................... 99 A LINUX TELEPÍTÉSE ÉS ALAPKONFIGURÁCIÓJA...................................................................... 100 A TELEPÍTÉS MEGKEZDÉSE ................................................................................................................. 101 A YAST (Yet Another Setup Tool)............................................................................................... 101 A merevlemez előkészítése ........................................................................................................ 103 Szoftver-kiválasztás .................................................................................................................... 103 LILO boot manager telepítése..................................................................................................... 104 Felhasználói információ .............................................................................................................. 105 Beállítások jóváhagyása – a telepítés megkezdése ................................................................... 106 BOOTMANAGER KONFIGURÁCIÓ .......................................................................................................... 107 A LILO (Linux Loader) ................................................................................................................. 107 Mi a LILO? .............................................................................................................................. 107 Hogy indítunk a LILO-val? ...................................................................................................... 107 A LILO alkotórészei................................................................................................................. 108 Hová telepíthető a LILO?........................................................................................................ 108 A LILO beállítása .................................................................................................................... 109 A lilo.conf szerkezete .............................................................................................................. 109 Egyéb LILO beállítási opciók .................................................................................................. 111 A LILO telepítése és eltávolítása ............................................................................................ 112 A GRUB ............................................................................................................................................ 114 Háttérinformációk és felépítés..................................................................................................... 114 A rendszertöltési folyamat és az érintett GRUB komponensek .................................................. 115 A Grub rendszertöltő menü lehetőségei ................................................................................. 115 A Grub beállítása......................................................................................................................... 116 A Yast2 segítségével .............................................................................................................. 116 A menüfájl ............................................................................................................................... 117
337.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
A térkép (map) fájl................................................................................................................... 119 Az /etc/grub.conf fájl ............................................................................................................... 120 A FUTÁSI SZINTEK KONFIGURÁLÁSA..................................................................................................... 120 Az init program ............................................................................................................................ 120 Futási szintek .............................................................................................................................. 121 A futási szintek megváltoztatása ............................................................................................ 122 Inicializáló szkriptek ................................................................................................................ 122 A /etc/rc.config ........................................................................................................................ 124 FÁJLRENDSZER KONFIGURÁCIÓ .......................................................................................................... 125 Fájlrendszer típusok Linux alatt, ................................................................................................. 125 Az /etc/fstab................................................................................................................................. 126 Sérült fájlrendszer megjavítása................................................................................................... 126 e2fsck...................................................................................................................................... 127 A töredezettség (fragmentation) elleni harc ................................................................................ 128 Kvótarendszer Linuxon ............................................................................................................... 129 Mi az a quota? ........................................................................................................................ 129 A Linux quota jelenlegi állapota .............................................................................................. 129 A quota szoftvere .................................................................................................................... 129 A quota beállítása ................................................................................................................... 129 Különféle Quota parancsok .................................................................................................... 132 RENDSZERGAZDAI FELADATOK .................................................................................................... 134 FELHASZNÁLÓ ÉS CSOPORTKEZELÉS................................................................................................... 134 Kezdeti környezet: /etc/skel ........................................................................................................ 135 Felhasználók létrehozása kézzel ................................................................................................ 136 Felhasználók törlése ................................................................................................................... 136 Egy felhasználó időleges kikapcsolása....................................................................................... 137 Useradd, usermod, userdel......................................................................................................... 137 useradd ....................................................................................................................................... 137 usermod ...................................................................................................................................... 139 userdel......................................................................................................................................... 139 groupadd ..................................................................................................................................... 141 groupmod .................................................................................................................................... 141 groupdel ...................................................................................................................................... 141 Felhasználói korlátozások........................................................................................................... 141 Az /etc/login.defs és az /etc/limits........................................................................................... 141 Felhasználói környezet beállítása ............................................................................................... 147 Bejelentkezés.......................................................................................................................... 147 Környezeti változók................................................................................................................. 148 A prompt beállításai ................................................................................................................ 149 HOZZÁFÉRÉSI JOGOSULTSÁGOK ......................................................................................................... 150 Suid és sgid bit ............................................................................................................................ 151 A sticky bit ................................................................................................................................... 152 NYOMTATÁS KONFIGURÁLÁSA ............................................................................................................. 152 Áttekintés: Interfészek, várósorok és göngyölítések (spooling).................................................. 152 A párhuzamos portok.............................................................................................................. 152 Spooling mód és nyomtatási várósor...................................................................................... 153 Nyomtatási várósorok: futtatás és beállítás ............................................................................ 154 További vezérlő eszközök: áttekintés ..................................................................................... 154 Szűrők: a munkamániások ..................................................................................................... 156 A /etc/printcap, a várósor beállítása ....................................................................................... 156 Nyomtató sz űrők ........................................................................................................................ 157 apsfilter ................................................................................................................................... 157 Az apsfilter nyomtatási várósorai............................................................................................ 158 Néhány szó a Ghostscript-ről...................................................................................................... 161
338.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
KERNEL ÉS MODULKONFIGURÁCIÓ.............................................................................................. 164 A DÉMONOK ...................................................................................................................................... 164 KERNELPARAMÉTEREK ....................................................................................................................... 164 Eszközmeghajtók a kernelben .................................................................................................... 164 Magyarázat és értelmezés .......................................................................................................... 165 Kernelparaméterek a boot promptnál ..................................................................................... 165 A SCSI vezérlő........................................................................................................................ 166 Merevlemezek és hálózati kártyák.......................................................................................... 167 Az insmod és a modprobe .......................................................................................................... 168 Modprobe paraméterek .......................................................................................................... 168 KERNELFORDÍTÁS .............................................................................................................................. 169 A kernel konfigurálása................................................................................................................. 169 Opciók ..................................................................................................................................... 170 A kernel fordítása ........................................................................................................................ 172 A kernel installálása .................................................................................................................... 173 Az rdev parancs .......................................................................................................................... 174 rdev ............................................................................................................................................. 174 AZ X WINDOW KONFIGURÁLÁSA ................................................................................................... 175 JELLEMZŐK........................................................................................................................................ 175 ALAPFOGALMAK ................................................................................................................................. 176 Képernyő ..................................................................................................................................... 176 Egér ............................................................................................................................................. 176 Billentyűzet .................................................................................................................................. 176 Ablak ........................................................................................................................................... 177 Erőforrások.................................................................................................................................. 177 Betűkészletek .............................................................................................................................. 177 KONFIGURÁLÁS.................................................................................................................................. 177 Az XF86Config ............................................................................................................................ 177 Screen..................................................................................................................................... 179 Device rész ............................................................................................................................. 180 Képernyő rész (Monitor Section) ............................................................................................ 181 További konfigurációs állományok .............................................................................................. 181 Az xdm ........................................................................................................................................ 182 Az xdm konfigurálása.............................................................................................................. 182 A KDE .............................................................................................................................................. 183 A KDE története .......................................................................................................................... 183 Bevezetés a KDE-be................................................................................................................... 183 HTML munkafelület................................................................................................................. 183 A K menü, a panel és a task bar............................................................................................. 183 Környezetfüggő menük, a jobb és a bal egérgomb használata ............................................. 184 Fogd és Vidd........................................................................................................................... 184 A különböző munkaasztalok ................................................................................................... 184 A munkaasztal használata .......................................................................................................... 185 A fájlstruktúra böngészése Konqueror-ral .............................................................................. 185 A K Menü ................................................................................................................................ 185 A Lemez Navigátor ................................................................................................................. 186 A KPanel menü ....................................................................................................................... 186 Fájlok és mappák létrehozása és kezelése ............................................................................ 186 A munkaasztal testreszabása ..................................................................................................... 186 KDE Beállító központ .............................................................................................................. 186 A Munkakasztal menü............................................................................................................. 187 Az Információk menü .............................................................................................................. 188 A Billentyűk menü ................................................................................................................... 188 Az Ablakok menü .................................................................................................................... 188 CD-ROM vagy lemezmeghajtó felcsatolása ........................................................................... 189 A levelező program, a Kmail................................................................................................... 189
339.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
A GNOME .......................................................................................................................................... 190 A környezet ................................................................................................................................. 190 Fogd és Vidd........................................................................................................................... 191 Indítóikonok............................................................................................................................. 192 HÁLÓZATI BEÁLLÍTÁSOK ................................................................................................................ 193 A LINUXCONF HASZNÁLATA ................................................................................................................. 193 A hálózat ..................................................................................................................................... 194 A gép alapbeállításai............................................................................................................... 194 Névfeloldás (DNS) .................................................................................................................. 195 Útválasztás és átjárók............................................................................................................. 196 Egyéb útvonalak más gépek felé............................................................................................ 196 Útvonalak más lokális hálózatok felé...................................................................................... 196 Más útvonalak hálózatok felé ................................................................................................. 197 Alapértelmezett út ................................................................................................................... 197 Az útválasztó démon............................................................................................................... 197 A gépnév feloldási módszerek sorrendje................................................................................ 198 PPP/SLIP/PLIP ....................................................................................................................... 199 A LEGFONTOSABB HÁLÓZATI KONFIGURÁCIÓS ÁLLOMÁNYOK ÉS PARANCSOK ......................................... 200 Konfigurációs állományok ........................................................................................................... 200 /etc/rc.config............................................................................................................................ 200 /etc/hosts................................................................................................................................. 200 /etc/networks........................................................................................................................... 200 /etc/host.conf ............................................................................................................................... 201 /etc/nsswitch.conf.................................................................................................................... 201 /etc/resolv.conf........................................................................................................................ 202 /etc/HOSTNAME..................................................................................................................... 203 Induláskor lefutó szkriptek ...................................................................................................... 203 Útvonalválasztás Linux alatt ................................................................................................... 203 Az ifconfig és a route parancsok ................................................................................................. 205 Az ifconfig ............................................................................................................................... 205 A route .................................................................................................................................... 206 A LINUX MINT INTERNETES KISZOLGÁLÓ .................................................................................... 209 AZ APACHE WEBSZERVER .................................................................................................................. 209 Konfigurálás ................................................................................................................................ 210 Konfigurációs file-ok .................................................................................................................... 210 conf/httpd.conf ........................................................................................................................ 210 conf/srm.conf .......................................................................................................................... 212 conf/access.conf ..................................................................................................................... 213 conf/mime.types...................................................................................................................... 215 Log file-ok.................................................................................................................................... 215 pid file...................................................................................................................................... 215 Error log .................................................................................................................................. 215 Transfer log............................................................................................................................. 215 Elindítás....................................................................................................................................... 215 VIRTUÁLIS HOSTOK ............................................................................................................................ 216 SQUID, A PROXYSZERVER................................................................................................................... 217 A web gyorsítókról általában ....................................................................................................... 217 A motiváció ............................................................................................................................. 217 Gyorsító típusok...................................................................................................................... 218 Találati arány .......................................................................................................................... 218 Transzparens cache-elés ....................................................................................................... 218 Gyorsítótár implementációk .................................................................................................... 218 A Squid........................................................................................................................................ 218 Az előre csomagolt Squid ....................................................................................................... 219 Linux specifikus jótanácsok: ................................................................................................... 219
340.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
Konfigurálási példák .................................................................................................................... 220 Alapkonfiguráció ..................................................................................................................... 220 Alapkonfiguráció és böngészők automatikus konfigurálása ................................................... 221 Alapkonfiguráció + Transzparens konfigurálás....................................................................... 222 Elérhetőségek korlátozása ..................................................................................................... 222 Squid tuningolás.......................................................................................................................... 226 A diszk alrendszer................................................................................................................... 226 Memória .................................................................................................................................. 227 Naplózás ................................................................................................................................. 227 A PROFTPD FTP SZERVER .................................................................................................................. 227 A LINUX KISZOLGÁLÓ ...................................................................................................................... 229 DNS SZERVER .................................................................................................................................. 229 Mi is az a bind? ........................................................................................................................... 229 Konfigurálás ................................................................................................................................ 229 Egy intranet rendszer példája alapján: ................................................................................... 229 Egy intranet rendszer példája alapján, de az intranet tűzfal mögött van:............................... 235 DHCP SZERVER ................................................................................................................................ 236 Mire jó a DHCP? ......................................................................................................................... 236 Hogyan működik?........................................................................................................................ 237 A szerver beállítása Linux alatt ................................................................................................... 238 AZ NFS............................................................................................................................................. 241 A NIS ............................................................................................................................................... 243 Mi is a NIS? ................................................................................................................................. 243 Hogyan működik a NIS? ......................................................................................................... 243 A NIS konfigurálása .................................................................................................................... 244 A NIS kliens ............................................................................................................................ 244 A NIS kiszolgáló...................................................................................................................... 245 Az rpc.ypxfrd program ............................................................................................................ 247 Az rpc.yppasswdd program .................................................................................................... 247 LEVELEZŐSZERVER KIALAKÍTÁSA LINUXON .............................................................................. 248 SENDMAIL.......................................................................................................................................... 248 A Sendmail program és a külvilág kapcsolata ............................................................................ 249 A Sendmail működése............................................................................................................ 249 Konfiguráció ................................................................................................................................ 250 Konfigurálás m4 makrókkal .................................................................................................... 250 ,,Kézi'' beállítások ................................................................................................................... 251 Példa: Sendmail az intézetben.................................................................................................... 252 Elvárások a levelezőrendszertől ............................................................................................. 252 A levelezőrendszer elrendezése............................................................................................. 252 A levelezőszerver konfigurálása ............................................................................................. 253 Levelek fogadása.................................................................................................................... 253 Címelrejtés: masquerading..................................................................................................... 254 Levelek irányítása ................................................................................................................... 254 Virtuális domain-ek elkülönítése ............................................................................................. 255 Spam-védelem........................................................................................................................ 256 A tartalék levelezőszerver....................................................................................................... 258 Levelezési funkcióval nem rendelkező szerverek .................................................................. 258 A sendmail indítása................................................................................................................. 258 A rendszergazda teendői ............................................................................................................ 258 Átkonfigurálás ......................................................................................................................... 258 Új alias file............................................................................................................................... 259 Adatbázis file-ok...................................................................................................................... 259 A tartalék levelezőszerver élesítése ....................................................................................... 259 Új PC bejegyzése ................................................................................................................... 259 Átirányítás megváltoztatása.................................................................................................... 259 Spam szűrése ......................................................................................................................... 259
341.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
POSTFIX ............................................................................................................................................ 260 Konfigurálás ................................................................................................................................ 261 QMAIL ............................................................................................................................................... 265 Követelmények............................................................................................................................ 265 A MI QMAIL INSTALLÁCIÓNK ................................................................................................................. 266 A qmail saját könyvtárának elkészítése.................................................................................. 266 A szükséges felhasználók és csoportok előkészítése............................................................ 266 Konfigurálás ................................................................................................................................ 267 Az alias-ok beállítása .............................................................................................................. 267 A daemontools telepítése és a vezérlőkönyvtárak elkészítése .............................................. 267 Hozzáférés-szabályozás......................................................................................................... 270 A sendmail letiltása ................................................................................................................. 271 A /var/qmail/rc elkészítése...................................................................................................... 271 A Maildir .................................................................................................................................. 271 A qmail elindítása.................................................................................................................... 272 rblsmtpd .................................................................................................................................. 272 A vezérlő file-ok ...................................................................................................................... 273 dot-qmail ................................................................................................................................. 274 Virtuális domének ................................................................................................................... 274 A SAMBA ............................................................................................................................................ 276 MI IS AZ A SAMBA?............................................................................................................................ 276 Egy példa konfiguráció................................................................................................................ 277 Az smb.conf security opciója .................................................................................................. 281 A titkosított jelszavak .............................................................................................................. 282 WINS....................................................................................................................................... 282 Windows-os hálózat elérése Linuxból......................................................................................... 282 Megosztások elérése Linuxból ............................................................................................... 282 A Windows alatti nyomtató elérése Linux alól ........................................................................ 283 ADATBÁZISSZERVER KIALAKÍTÁSA LINUXON ............................................................................ 285 A POSTGRES ADATBÁZISKEZELŐ ........................................................................................................ 285 A Postgres használata ................................................................................................................ 285 Az adatbázis létrehozása........................................................................................................ 285 Az SQL parancssor................................................................................................................. 286 A parancssor vezérlő utasításai.............................................................................................. 287 A Postgres SQL nyelvjárása................................................................................................... 287 Táblázat törlése ...................................................................................................................... 290 Táblázat feltöltése adatokkal .................................................................................................. 290 Adatok listázása a képernyőre................................................................................................ 291 Szűrések ................................................................................................................................. 292 Táblák egyesítése oszlopok szerint........................................................................................ 293 Sorrendbe rendezés ............................................................................................................... 293 Oszlopfüggvények .................................................................................................................. 294 Csoportosítás.......................................................................................................................... 294 Nézettábla létrehozása és törlése .......................................................................................... 296 Index létrehozása és törlése................................................................................................... 297 Jogok adása felhasználóknak ..................................................................................................... 298 A rendszertáblázatok .............................................................................................................. 299 CSOMAGSZŰRÉS LINUXON ............................................................................................................. 300 IP MASQUERADING ............................................................................................................................. 300 Mi is az IP masquerading?.......................................................................................................... 300 A beállítások................................................................................................................................ 300 Kernel oldali támogatás biztosítása ........................................................................................ 300 A forwarding engedélyezése .................................................................................................. 302 Az alapértelmezett átjáró beállítása a belsõ háló gépein ....................................................... 302 A belsõ hálózat elérhetõsége ................................................................................................. 302
342.
Barhács OktatóKözpont
Linux rendszergazdai modul - Tartalomjegyzék
IPCHAINS ........................................................................................................................................... 303 A Kernel a csomagszűrővel. ....................................................................................................... 304 Az ipchains használata ............................................................................................................... 305 Szabályok manipulálása egy láncon belül: ............................................................................. 306 Műveletek egy szabályon ....................................................................................................... 306 Szűrési meghatározások............................................................................................................. 307 Forrás és cél IP cím meghatározása ...................................................................................... 307 Inverzió meghatározása.......................................................................................................... 308 Protokoll meghatározása ........................................................................................................ 308 UDP és TCP portok meghatározása ...................................................................................... 308 ICMP típusok és kódok meghatározása ................................................................................. 309 Interfész meghatározása ........................................................................................................ 309 TCP SYN csomagok kizárólagos meghatározása.................................................................. 309 Töredékek kezelése................................................................................................................ 310 Mellékhatások szűrése ........................................................................................................... 311 Műveletek a teljes láncon............................................................................................................ 314 Új lánc létrehozása ................................................................................................................. 315 Lánc törlése ............................................................................................................................ 315 Lánc kiürítése.......................................................................................................................... 315 Lánc listázása ......................................................................................................................... 315 Számlálók nullázása. .............................................................................................................. 316 Irányelv megadása.................................................................................................................. 316 Csomag ellenőrzése ............................................................................................................... 317 Többszörös szabályok egyszerre való tesztelése .................................................................. 317 Hasznos példák........................................................................................................................... 318 Az ipchains-save használata....................................................................................................... 319 Az ipchains-restore használata............................................................................................... 320 A szabályok permanens beállítása ......................................................................................... 320 IPTABLES ........................................................................................................................................... 321 SHELL PROGRAMOZÁS ................................................................................................................... 322 BASH SHELL ...................................................................................................................................... 322 Bash shell változók ..................................................................................................................... 322 Változóértékadás .................................................................................................................... 322 Shell muveletek ........................................................................................................................... 323 Shell scriptek ............................................................................................................................... 323 Bash shell utasításai ................................................................................................................... 324 Parancssori argumentumok.................................................................................................... 324 Process változók..................................................................................................................... 324 Kifejezésekben használható aritmetikai és relációs operátorok ............................................. 324 Test utasítás operátorai .......................................................................................................... 324 Karakterláncok összehasonlítása ........................................................................................... 325 Vezérlési szerkezetek a shell-ben............................................................................................... 325 Feltételes elágazás ................................................................................................................. 325 Többirányú elágazás............................................................................................................... 326 Ciklusok .................................................................................................................................. 326 Példaprogramok .......................................................................................................................... 327
343.