Információs rendszerek üzemeltetése – Linux admin – BME TMIT 2014
Oldalszám 0 Bevezetés 0.1 A rendszer elindítása . . . . . . . . . . . . . . . . . . . . . . . .
2 4
1 Bemelegítés 1.1 Linux t˝uzfal – az iptables . . . . . . . . . . . . . . . . . . . . . . 1.2 Felhasználókezelés . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 SSH konfiguráció . . . . . . . . . . . . . . . . . . . . . . . . . .
4 4 10 10
2 Adatok kezelése 2.1 A MySQL beüzemelése . . . . . . . . . . . . . . . . . . . . . . . 2.2 MySQL adminisztráció . . . . . . . . . . . . . . . . . . . . . . .
11 11 11
3 Címtár (opcionális) 3.1 Az LDAP címtár . . . . . . . . 3.2 Bejelentkezés a címtárba . . . . 3.3 Adatok lekérdezése . . . . . . . 3.4 Adatok hozzáadása, módosítása
. . . .
12 12 14 14 16
4 Az Apache 2 webkiszolgáló 4.1 Az Apache 2 telepítése . . . . . . . . . . . . . . . . . . . . . . . 4.2 Az Apache biztonsági beállításai . . . . . . . . . . . . . . . . . . 4.3 A .htaccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17 20 21 22
5 Linux héjprogramozás 5.1 A bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Karakterfolyamok kezelése . . . . . . . . . . . . . . . . . . . . .
24 25 28
Hivatkozások 5.3 Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37 38
1
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
0 BEVEZETÉS
0 | Bevezetés Ez a labormérés jelent˝os interaktivitást kíván meg: tipikusan minden feladatnál a Linux-os man oldalakat, Internetes keres˝ot kell használni. A feladatok után megadott támogató megjegyzés nem a megoldás, csak iránymutató segítség – nem elég ezt begépelni. A labormérés öt témakörön és rengeteg feladaton keresztül próbál képet adni a Linux adminisztrátorok világáról. Így a labor betekintést nyújt a felhasználók körüli informatikai adminisztráció kezelésébe és a t˝uzfalak világába is. Az elvégzend˝o feladatok elvezetnek egészen a sárga köves útig, amely egyenesen a napjaink egyik legnépszer˝ubb webkiszolgálójának, az Apache-nak a legmélyebb bugyraiba vezet. És végezetül a feladatok egy pillanatra megpihennek a adminisztrátori feladatok automatizálásának, a héjprogramok írásának napsütötte partjain is. A segédletben szerepl˝o összes feladat tökéletes megoldása nem kötelez˝o, de minden témakörb˝ol legalább 40%-ot el kell érni a labor sikeres teljesítéséhez. A labor sikeres elvégzésbe csak a ♠ szimbólummal jelölt feladatok számítódnak bele, a többi feladat amolyan ráhangolódás, illetve hasznos segítséget jelent a jelölt feladatok megoldásához. Így, természetesen, a nem jelölt feladatok megoldása nem kötelez˝o, de hasznos lehet. Az opcionálisként jelölt feladatok megoldása sem kötelez˝o, de ezen feladatok beleszámítanak a végs˝o értékelésbe, mégpedig oly módon, hogy pontszámuk hozzáadódik azon témakör pontszámához, amelyb˝ol nem sikerült 40%-ot elérni. Amennyiben egy feladat „ábécézve” van akkor az A, B, C, D részfeladatok közül nem kell mindet megoldani, csak azt, amelynek a kódja az Ön NEPTUN kódjából származtatható. Ehhez csak a NEPTUN kód karaktereinek a ASCII kódját (lásd 1. ábra) kell összegezni, majd venni a néggyel vett maradékát. Amennyiben a maradék i) nulla, akkor Önnek az A jel˝u feladatot, amennyiben ii) egy, akkor a B jel˝u feladatot, amennyiben iii) kett˝o, akkor a C jel˝u feladatot, és végezetül amennyiben iv) három, akkor a D jel˝u feladatot kell megoldani. A feladatok sikeres megoldását egy (bash) héjprogram a labor végén automatikusan ellen˝orzi, ennek elindításához mérésvezet˝oi segédlet szükséges. A program nem csak ellen˝orzi és értékeli a feladatokat, hanem magát a labor elvégzését bizonyító ellen˝orz˝o kóddal ellátott jegyz˝okönyvet is legenerálja (és majd ezt a fájlt kell elküldeni az
[email protected] címre). Sajnos egy „buta” program az emberi szemhez képest kevésbé elnéz˝o, ezért a következ˝o szabályok betartása gyakorlatilag elengedhetetlen a labor sikeres elvégzéséhez: • Mindig használják a feladatokban megadott felhasználói neveket és jelszavakat! A jelszó az esetek dönt˝o többségében az Önök NEPTUN kódja lesz, ezt írják mindig ugyanabban a formátumban (azaz ha a NEPTUN kód „almafa”, akkor az használható „AlMafA”-ként is, de akkor végig csak ebben a formában).
2
0 BEVEZETÉS
1. ábra. ASCII kódok • Amennyiben futtatható héjprogramot, szkriptet kell írni, akkor annak nevét származtassa a feladat sorszámából az alábbi módon: 7.4.A feladat → 7_4.sh, azaz a feladat sorszámában szerepl˝o pontokat egyszer˝uen cserélje le alulvonásokra és illessze a végére az sh végz˝odést. A programokat másolja minden esetben a laboruser felhasználó bin könyvtárába (/home/laboruser/bin). Amennyiben ez a könyvtár nem létezik, akkor hozza létre. Ne feledjen futtatási jogokat adni a fájlnak! • Minden esetben pontosan kövesse a megadott specifikációkat! A segédlet végén igyekeztünk összegy˝ujteni a labor sikeres elvégzéséhez nélkülözhetetlennek vélt és er˝osen ajánlott könyvek, jegyzetek listáját. De ha mégis választanunk kellene, akkor mi a következ˝o könyveket ajánlanánk: 1. Tony Bautts, Terry Dawson, Gregor N. Purdy: Linux hálózati adminisztrátorok kézikönyve, 2. Arnold Robbins and Nelson H. F. Beebe: Classic Shell Scripting, 3. Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley: Unix and Linux System Administration Handbook és 4. Lars Wirzenius, Joanna Oja, Stephen Stafford, Alex Weeks: Linux rendszeradminisztrátorok kézikönyve.
3
0.1 A rendszer elindítása
1 BEMELEGÍTÉS
A könyveken és jegyzeteken túl hiperhivatkozásokkal is kib˝ovítettük az ajánlott irodalmak listáját. Ezek mindegyike egy-egy témakör elmélyítését segítheti el˝o, egy-egy trükköt vagy módszert szemléltetnek, mutatnak be. Ezek közül szeretnénk kiemelni az Ubuntu Linux hivatalos dokumentációját, ahol számos problémára hasznos tanácsot kaphatunk, és amely megoldások könnyen átemelhet˝oek más Debian alapú Linux disztribúciókba is. Végezetül nincs más hátra, mint hogy eredményes labor és sok sikert kívánjunk Önöknek!
A rendszer elindítása A VM elindítása VMWare playerben indítsa el a virtuális gépet! Amennyiben az feldob egy ablakot, melyben a VM eredetére kíváncsi, válassza az „I copied it” opciót! A gazda rendszerbe visszatérni a Ctrl+Alt kombinációval lehet.
Hozzáférési adatok A virtuális gépre két felhasználó áll rendelkezésre: felhasználói név: root jelszó: irulabor felhasználói név: laboruser jelszó: laboruser A virtuális gépre laboruserként jelentkezzen be!
1 | Bemelegítés 1.1. feladat: Nézze meg, hogy a rendszeren mely szolgáltatások várnak hálózati kapcsolatokra (figyelnek adott porton), és azok mire valók! Hasznos parancsok: man netstat, netstat -l
Linux tuzfal ˝ – az iptables A Linux kernel hálózati csomagkezel˝o alrendszerét NetFilternek nevezik, amely az iptables paranccsal konfigurálható. Az iptables a csomagkezel˝o funkciókat (pl. csomagsz˝urés, hálózati címfordítás) táblákba csoportosítja, amelyek mindegyike feldolgozási láncokat (chain) tartalmaz. A láncok illeszkedési szabályokból (mely csomagokra kell alkalmazni) és célokból (mi lesz a illeszked˝o csomag sorsa) állnak. Az iptables az OSI referenciamodel harmadik (hálózati) szintjén m˝uködik [1].
4
1.1 Linux t˝uzfal – az iptables
1 BEMELEGÍTÉS
2. ábra. A csomagok lehetséges haladási útvonalai és a kapcsolódási pontok címfordítás esetében [1].
3. ábra. A csomagok lehetséges haladási útvonalai és a kapcsolódási pontok sz˝uréskor [1]. Az iptables öt kapcsolódási pontot definiál a kernel csomagfeldolgozási útvonalában, ezek neve rendre PREROUTING , INPUT , FORWARD , POSTROUTING és OUTPUT . Láncokat ezekhez a pontokhoz lehet csatlakozatni. Az 2. ábra azt mutatja, milyen útvonalon haladnak keresztül a csomagok a rendszerben hálózati címfordítás során. A 3. ábra azt mutatja, milyen útvonalon haladnak keresztül a csomagok a rendszerben sz˝urés esetében. Végezetül a 4. ábra azt mutatja, milyen útvonalon haladnak keresztül a csomagok a rendszerben módosításkor. A 1. tábla felsorolja a kernelben definiált kapcsolódási pontokat, és az egyes kapcsolódási pontokon elvégezhet˝o feladatokat.
5
1.1 Linux t˝uzfal – az iptables
1 BEMELEGÍTÉS
4. ábra. A csomagoklehetséges haladási útvonalai és a kapcsolódási pontok csomagok módosításához [1].
Kapcsolódási pont FORWARD INPUT OUTPUT POSTROUTING PREROUTING
Lehet˝ové teszi a csomagok feldolgozását amikor azok áthaladnak az átjáró számítógépen miel˝ott azokat egy helyi folyamat megkapná miután azokat egy helyi folyamat létrehozta épp miel˝ott elhagynák a hálózati interfészt épp miután megérkeztek a hálózati interfészen (de miután eldobásra került az összes olyan csomag, amelyet az interfész „promiscuous” módban történ˝o üzemeltetése okán kaptunk, illetve a hibás ellen˝orz˝o kóddal rendelkez˝o csomagok eldobása után)
1. táblázat. A csomagok útvonalában definiált kapcsolódási pontok.
6
1.1 Linux t˝uzfal – az iptables Tábla neve nat
filter
mangle
1 BEMELEGÍTÉS
Leírás csomagok átirányítására használható hálózati címfordítás céljára; tipikusan a forrás- és célcímet használja; beépített láncai az OUTPUT , a POSTROUTING és a PREROUTING a számítógépre bejöv˝o, az onnan kimen˝o, illetve a gépen átfolyó forgalmak sz˝urésére használható; beépített láncai a FORWARD , az INPUT , az OUTPUT csomagok megváltoztatására, módosítására használható; beépített láncai a FORWARD , az INPUT , az OUTPUT , a POSTROUTING és a PREROUTING 2. táblázat. A iptables beépített táblái.
Táblák Az iptables három beépített táblával rendelkezik. Ezek a filter , a mangle és a nat nevet viselik. Mindegyik tábla egy vagy több (inkább több) lánccal van felvértezve, amelyek a 1. táblában látható kapcsolódási pontok valamelyikének felelnek meg, ahogy azt az 2-4. ábra is mutatja. A beépített táblákat a 2. táblázatban mutatjuk be. Az alapértelmezett tábla a filter.
Láncok Alapértelmezésben minden tábla üres láncokkal van feltöltve, amelyek egy-egy kapcsolódási ponthoz vannak rendelve (lásd 5 ábra). Minden lánc rendelkezik egy saját eljárással (policy), ami megmondja, hogy mi lesz azon csomagok sorsa, amelyek elérik a lánc végét anélkül, hogy valamely célhoz (lásd két fejezettel lejjebb) kerülnének. Csak az ACCEPT és a DROP célok használhatóak saját eljárásként. Az alapértelmezett az ACCEPT . A felhasználók által létrehozott láncok saját eljárása RETURN , ami nem változtatható meg.
Szabályok Az iptables szabályai egy vagy több illeszkedési mintából és egy célból állnak. A minta megmondja, hogy mely csomagokra kell alkalmazni a szabályt, míg a cél arról árulkodik, hogy milyen módon kell az illeszked˝o csomagokat módosítani. A rendszer minden szabályhoz fenntart egy byte- és egy csomagszámlálót. A szabály illeszkedési mintája és célja is opcionális. Amennyiben nincs illeszkedési minta megadva, akkor az a szabály minden csomagra érvényes, és amennyiben nincs cél megadva, akkor az illeszked˝o csomaggal semmi sem történik (a csomag feldolgozása teljes egészében olyan, mintha a szabály nem is létezne, leszámítva, hogy a byte- és csomagszámláló frissítésre kerül). Egy ilyen üres szabály a FORWARD lánchoz a következ˝ o két utasítás valamelyikével adható: 1 2
$ iptables -t filter -A FORWARD $ iptables -A FORWARD
7
1.1 Linux t˝uzfal – az iptables
1 BEMELEGÍTÉS
5. ábra. A csomagok haladási útvonala.
8
1.1 Linux t˝uzfal – az iptables
1 BEMELEGÍTÉS
Célok A célok meghatározzák, hogy mi a teend˝o azokkal a csomagokkal, amelyek illeszkednek egy szabályra. Az iptables a következ˝o négy célt definiálja alapértelmezésben: ACCEPT
Továbbengedi a csomagot a feldolgozás következ˝o állomására. Az adott lánc feldolgozását leállítja.
DROP
Teljes egészében befejezi a csomag feldolgozását, azaz semmilyen további szabály, lánc vagy tábla nem kerül ellen˝orzésre. Ha a küld˝o számára valamilyen üzenet küldése lenne a cél, akkor a REJECT (kiegészítésként elérhet˝o) célt kell használni.
QUEUE
Egy, a kernelen kívüli kódrészlethez (felhasználói tét) továbbítja a csomagot.
RETURN
A felhasználói lánc szabályában abbahagyja a lánc feldolgozását és folytatja a hívó lánc feldolgozását. Egy beépített lánc szabályában abbahagyja a lánc feldolgozását és a lánc saját eljárását alkalmazza rá.
Mintapéldák • Az átjáró 80-as (HTTP) portján bejöv˝o forgalom átirányítása egy a bels˝o hálózaton található 192.168.1.3 IP cím˝u webszerver 8080-as portjára: iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:8080
• Kimen˝o HTTP forgalom átírányítása a t˝uzfallal ellátott számítógép 8888-as portján hallgatózó transzparens proxy-nak1 : iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8888
• A bejöv˝o ping kérések véletlenszer˝uen kiválasztott 10%-nak az eldobása: iptables -A INPUT -p icmp --icmp-type ping -m random --average 10 -j DROP
Az iptables parancsról minden alapvet˝o információ megszerezhet˝o az alábbi utasítások segítségével: 1 A transzparens proxy egy olyan megoldás, amelynek segítségével a kimen˝o kapcsolatok egy el˝ore specifikált része elkapható és átirányítható egy olyan számítógéphez, amely majd kiszolgálja azokat. Ez a módszer lehet˝oséget nyújt proxy használatára a hálózatban lev˝o gépek egyesével történ˝o felkonfigurálása nélkül. Az alhálózatból kimen˝o összes forgalom áthalad az átjárón, ezért észrevétlenül egy adott proxyhoz irányíhatóak.
9
1.2 Felhasználókezelés
1 2 3 4
$ $ $ $
1 BEMELEGÍTÉS
iptables -h iptables -m match -h iptables -j TARGET -h man iptables
1.2. feladat: Nézze meg, hogy az adott szolgáltatásokra jelenleg milyen t˝uzfalszabályok vonatkoznak ki- és bemen˝o forgalom esetén! Hasznos parancsok: iptables -L, iptables -t filter -L, iptables -t nat -L, iptables -t mangle -L ♠ 1.3. feladat: A céges policy-k szerint a távoli bejelentkezést biztosító szolgáltatásoknak (ssh) csak a lokális hálózatról kell elérhet˝onek lenniük. Módosítsa a t˝uzfalszabályokat ennek megfelel˝oen! ♠ 1.4. feladat: A céges policy-k szerint a gépnek nem szabad válaszolnia a pingelésre. Módosítsa ennek megfelel˝oen a t˝uzfal szabályait!
Felhasználókezelés ♠ 1.5. feladat: Adjon hozzá a rendszerhez egy új felhasználót, akinek a neve legyen „mekkelek”, jelszava pedig az Ön NEPTUN kódja! Nézze meg, milyen új bejegyzés született az /etc/passwd fájlban! Hasznos parancs: adduser ♠ 1.6. feladat: Tegye lehet˝ové az új felhasználó számára, hogy rendszergazda jogokkal futtathasson minden programot! Hasznos parancs: visudo
SSH konfiguráció ♠ 1.7. feladat: A biztonság érdekében tiltsa le a root felhasználó SSH-n történ˝o bejelentkezésének jogát! Hasznos parancsok: mc, /etc/ssh/sshd_config, /etc/init.d/ssh restart ♠ 1.8. feladat (opcionális): Valósítson meg RSA kulcsokkal m˝uköd˝o autentikációt a fizikai és a virtuális gép között a saját, újonnan létrehozott (mekkelek) felhasználó számára! Ehhez az ssh-keygen program segítségével hozzon létre egy új publikus-privát kulcspárt. A létrehozott kulcspár privát részét másolja át a gazdagépre, majd a puttygen program segítségével konvertálja át a PuTTY számára emészthet˝o formátumba. Végezetül a virtuális gépen a 1
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
10
2 ADATOK KEZELÉSE
parancs kiadásával engedélyezze Mekk Elek RSA bejelentkezését! Tesztelje le az új lehet˝oséget!
2 | Adatok kezelése A MySQL beüzemelése ♠ 2.1. feladat: Telepítse a MySQL szoftvert (mysql-server ) a guest gépre! Az adminisztrátor jelszava az egyszer˝uség kedvéért legyen „root”! Természetesen éles környezetben nehezen kitalálható jelszavakat kell használni. Nézze meg, hogy a szerver melyik verzióját sikerült installálnia! Hasznos parancs: apt-get install 2.2. feladat: Vizsgálja meg a mysql szerver beállításait (/etc/mysql)! Derítse ki, hogy milyen porton figyel a mysql szerver, és hol tárolja az adatbázisokat. Hasznos parancsok: mc, a Ctrl+o kombinációval lehet a futó mc-t „láthatatlanná” és ismét „láthatóvá” tenni 2.3. feladat: A netstat parancs segítségével állapítsa meg, hogy fogad-e kéréseket a mysql szerver, és ezt TCP vagy UDP protokollon teszi-e, továbbá hogy elérhet˝o-e a mysql szolgáltatás a képen kívülr˝ol, tehát a helyi hálózatból, vagy bármilyen IP címr˝ol! Hasznos parancs: netstat 2.4. feladat: Jelentkezzen be a telepítéskor megadott jelszóval rendszergazdaként a mysql parancssorába, és listázza ki a adatbázisokat. Hasznos parancsok: mysql -u root -p, SHOW DATABASES;
MySQL adminisztráció ♠ 2.5. feladat: A /root/students.sql fájlban található exportált adatbázist töltse fel a mysql szerverre. Hasznos mysql parancs: help 2.6. feladat: SQL parancsok segítségével ismerje meg az egyszer˝u mintaadatbázist! Találja ki, mi lehet a célja az adatbázisnak, és melyik táblában mit tárol! Hasznos mysql parancsok: SHOW DATABASES;, DESCRIBE students.students;, SELECT * FROM students.courses;
11
3 CÍMTÁR (OPCIONÁLIS)
♠ 2.7. feladat: Mysql parancsokkal töltsön fel táblánként legalább egy-egy új rekordot az adatbázisba, amelyek megfelelnek a sémáknak, és a táblák összefüggéseinek is. Az új hallgató neve legyen „Mekk Elek” az Ön NEPTUN kódjával. Mekk Elek 1974. április 1-én született. Hasznos mysql parancsok: SELECT, INSERT 2.8. feladat: A felhasználók a mysql nev˝u adatbázis user táblájában vannak, felhasználói név és host alapján. Listázza ki a felhasználókat – a root felhasználón kívül van más bejegyzés is? Ha igen, milyen jogosultságok tartoznak hozzá? Jelent-e ez bármilyen veszélyt? Hasznos parancs: SHOW GRANTS; ♠ 2.9. feladat (opcionális): Adjon az adatbázishoz egy új felhasználót („mekkelek”et az Ön NEPTUN kódjával mint jelszóval), akinek az általunk létrehozott adatbázis fölött teljes joga van akkor, ha localhost-on jelentkezik be, ugyanakkor semmi máshoz ne legyen joga. Az eredményt írassa ki a SHOW GRANTS FOR parancs segítségével!
3 | Címtár (opcionális) Az LDAP címtár Az LDAP (Lightweight Directory Access Protocol) címtár egy speciális adatbázis tulajdonság alapú információkezeléssel és fa hierarchiával (DIT - directory information tree, lásd 6. ábra). A fa minden csúcsában bejegyzések szerepelnek. A bejegyzéseknek típusa (objectClass) van (egyszerre több is lehet), ami megadja, hogy milyen attribútumai lehetnek, és hogy mely attribútum megléte a kötelez˝o [1]. Az LDAP bejegyzéseket a könyvtárban a relatív megkülönböztetett névként (Relative Distinguished Name, RDN) tároljuk, az egyes bejegyzéseket viszont a megkülönböztetett nevükkel (Distinguished Name, DN) érjük el. Ez tartalmazza a fa csúcsától a bejegyzésig vezet˝o utat, így válik a hivatkozás egyértelm˝uvé: cn=Robert Smith,ou=people,dc=tmit,dc=bme,dc=hu.
Mit jelent az objectClass attribútum? Az LDAP könyvtár minden elemének van egy ún. objectClass attribútuma, és ennek az attribútumnak legalább egy értékkel kell rendelkeznie. Természetesen az objectClass attribútum rendelkezhet több értékkel is. Mindegyik objectClass érték sablonként szolgál a bejegyzésnél tárolt adatok számára. Meghatározza, mely attribútumokkal kell, illetve hogy milyen attribútumokkal rendelkezhet opcionálisan a bejegyzés. Nézzünk egy példát: 12
3.1 Az LDAP címtár
3 CÍMTÁR (OPCIONÁLIS)
6. ábra. DIT – Directory Information Tree # Clifford D. Conner, people, tmit.bme.hu dn: cn=Clifford D. Conner,ou=people,dc=tmit,dc=bme,dc=hu objectClass: inetOrgPerson cn: Clifford D. Conner mail:
[email protected] ou: Office sn: smith telephoneNumber: 555-111-2225 uid: rjsmith
Ebben az esetben a bejegyzés az inetOrgPerson objectClass-ba tartozik.
LDIF Az LDAP Interchange Format (LDIF) egy egyszer˝u állomány formátum, amelyben az LDAP címtár tartalmát lehet tárolni, vagy amelyben az LDAP szerver vizualizálja a keresések eredményeit. A legegyszer˝ubb formájában az állomány: • bejegyzések listája, amelyeket üres sorok választanak el egymástól, • attribútumok és értékek összerendelése, • direktívák összessége, amelyek utasítják a parszert, hogy milyen módon dolgozza fel az információt. Az els˝o két tulajdonság éppen az, amely szükséges az LDAP címtár tartalmának a leírásához. Amikor LDIF formátumban lév˝o adatot viszünk be a címtárba, akkor a rendszer minden esetben ellen˝orzi, hogy a benne lév˝o adatok megfelelnek-e az LDAP címtár sémájának. Nézzük meg a címtár gyökérelemét, amelynek a megkülönböztet˝o neve (DN) dc=tmit,dc=bme,dc=hu: # tmit.bme.hu dn: dc=tmit,dc=bme,dc=hu
13
3.2 Bejelentkezés a címtárba
3 CÍMTÁR (OPCIONÁLIS)
objectClass: top objectClass: dcObject objectClass: organization o: IRU dc: tmit
Az LDIF formátum néhány alapvet˝o eleme: • A kommentek az LDIF fájlban # karakterrel kezd˝odnek, aminek a sor elején kell lennie. A komment az aktuális sor végéig tart. • Az attribútumokat és a hozzájuk tartozó értékeket kett˝ospont választja el. Az értékt˝ol a kett˝ospont karaktert egy üres karakter választja el. • A dn attribútum egyértelm˝uen meghatározza a bejegyzés DN-jét.
Bejelentkezés a címtárba A címtárban m˝uveleteket végezni csak a címtár entitásai tudnak, így ahhoz hogy használjuk, be kell jelentkeznünk egy címtárbeli elem nevében. Az LDAP kliens programokkal a következ˝o paraméterekkel tudunk belépni LDAP adminisztrátorként: 1
$ ldapwhoami -D "cn=admin,dc=tmit,dc=bme,dc=hu" -W
Az ldapwhoami parancs kiírja, hogy milyen felhasználóként sikerült bejelentkezni a rendszerbe, ez a bejelentkezést segíti. Az utána következ˝o paraméterek megadják a bejelentkez˝o felhasználó címtárbeli helyét, illetve a bejelentkezés módját állítják. Ezek a paraméterek az ldap-utils programcsomag többi eszközével is m˝uködnek.
Hozzáférési adatok Az LDAP-ban adminisztratív felhasználó: cn=admin,dc=tmit,dc=bme,dc=hu jelszava: rootpass A people ou más tagjainak jelszava: pass
Adatok lekérdezése 3.1. feladat: Listázza ki a teljes tartományt (dc=tmit,dc=bme,dc=hu)! Hasznos parancs: ldapsearch -D "cn=admin,dc=tmit,dc=bme,dc=hu" -W -b "dc=tmit,dc=bme,dc=hu" "objectClass=*"
14
3.3 Adatok lekérdezése
3 CÍMTÁR (OPCIONÁLIS)
3.2.A feladat: Listázza a people ou azon tagjait, akik az irodában dolgoznak (ou: Office). A listázást az LDAP adminisztratív felhasználójaként (cn=admin, dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban újonnan létrehozott 3.txt elnevezés˝ u fájlban! Ez a parancs legyen a fájl els˝o sora! 3.2.B feladat: Listázza a people ou azon tagjait, akik az informatikai csoporthoz tartoznak (ou: IT dept). A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban újonnan létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl els˝o sora! 3.2.C feladat: Listázza a people ou azon tagjait, akiknek a telefonszáma 555111-2226. Mit írt a parancssorba? A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban újonnan létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl els˝o sora! Listázza a people ou azon tagjait, akik inetOrgPerson rendelkeznek. A listázást az LDAP adminisztratív felhasználójaként (cn=admin, dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban újonnan létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl els˝o sora! 3.2.D feladat:
objectClassal
♠ 3.3.A feladat (opcionális): Listázza a people ou tagjait, de csak a megkülönböztet˝o nevét (dn) és a szervezeti egységét (ou) írja ki. A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban az el˝oz˝o feladat során létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl második sora! ♠ 3.3.B feladat (opcionális): Listázza a people ou tagjait, de csak a megkülönböztet˝o nevét (dn) és a mailcímét írja ki. A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban az el˝oz˝o feladat során létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl második sora!
15
3.4 Adatok hozzáadása, módosítása
3 CÍMTÁR (OPCIONÁLIS)
♠ 3.3.C feladat (opcionális): Listázza a doménben található szervezeti egységeket (objectClass: organizationalUnit), de csak a megkülönböztet˝o nevét (dn) és a leírását írja ki (lehet, hogy nincs minden ou-nak leírása). A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban az el˝oz˝o feladat során létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl második sora! ♠ 3.3.D feladat (opcionális): Listázza a people ou tagjait, de csak a megkülönböztet˝o nevét (dn) és a leírását írja ki. A listázást az LDAP adminisztratív felhasználójaként (cn=admin,dc=tmit,dc=bme,dc=hu) hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban az el˝oz˝o feladat során létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl második sora! ♠ 3.4. feladat (opcionális): Listázza ki a teljes tartomány azon tagjait, akik rendelkeznek leírással, de csak a megkülönböztet˝o nevét (dn) és a leírását írassa ki. Korlátozza a kimeneti formátumot 1. verziós LDIF-re, és a kimenet legyen kommentekt˝ol mentes. A listázást az LDAP adminisztratív felhasználójaként hajtsa végre, és a kiadott parancsot helyezze el a /home/laboruser/bin könyvtárban az el˝oz˝o feladatok során létrehozott 3.txt elnevezés˝u fájlban! Ez a parancs legyen a fájl harmadik sora!
Adatok hozzáadása, módosítása Az LDAP bemenete – csakúgy mint a kimenete – LDIF formátumú. Az adatbázishoz hozzáadni és módosítani az ldapadd és ldapmodify parancsok segítségével lehet. A standard inputon is be lehet vinni az adatokat, de a legcélszer˝ubb el˝ore elkészíteni az LDIF fájlt, és a -f paraméterben megadni a fájl nevét. ♠ 3.5. feladat (opcionális): Adjon hozzá felhasználót a people ou-hoz, hasonlóan a már ottlev˝okhöz. Nem kell minden paramétert kitöltenie, csak a fontosabbakat. Adja meg az LDIF fájlt, és a bevitelhez használt parancsot! Az új felhasználó adatai legyenek a következ˝ok: dn: cn=Mekk Elek,ou=people,dc=tmit,dc=bme,dc=hu objectClass: inetOrgPerson cn: Mekk Elek ou: office uid: mekkelek sn: Budapest userPassword: AZ_ON_NEPTUN_KODJA
16
4 AZ APACHE 2 WEBKISZOLGÁLÓ
3.6. feladat: Mint azt már korábban láthattuk az LDAP-ot használó felhasználók egyben az adatbázis elemei is. Az itt megadott jelszavukkal tudnak bejelentkezni. Ha bevitelkor nem adott meg jelszót, most adjon. Az ehhez rendelkezésre álló eszköz a ldappasswd . Ezek után tesztelje a jelszavát az ldapwhoami parancssal! A bejelentkezésnek sikerülnie kell! ♠ 3.7. feladat (opcionális): Az LDAP-ban létre lehet hozni csoportokat, amelyek nem törik meg a fa struktúrát, csak a csoport tagjainak megkülönböztet˝o neveit tárolják (az 6. ábrán nyilak jelölik). Az el˝oz˝o feladatban hozzáadott felhasználót adja hozzá az LDAPAdmins grouphoz! Standard inputról a feladat a következ˝oképp végezhet˝o el: 1 2 3 4 5 6
$ ldapmodify -D
-W password: [enter password] dn: cn=vipb,ou=groups,dc=example,dc=com changetype: modify add: member member: cn=Mekk Elek,ou=...
7 8
^D
4 | Az Apache 2 webkiszolgáló Az Apache a Linux rendszereken – és talán a világon – a legszélesebb körben használt webkiszolgáló (lásd 7. és 8. ábra). Az Apache 2 beállítása egyszer˝u szöveges beállítófájlokban elhelyezett direktívákkal történik. A beállítások a következ˝o fájlokba és könyvtárakba vannak szétosztva apache1,linuxhalo: apache2.conf
conf.d envvars
: Az els˝odleges Apache 2 konfigurációs fájl. Az Apache 2 globális beállításait tartalmazza. : Az Apache 2-re globálisan érvényes beállítófájlokat tartalmaz. : Az Apache 2 környezeti változóit tartalmazza.
httpd.conf
: Történetileg az els˝odleges Apache 2 konfigurációs fájl, amelyet a httpd démonról neveztek el. Ez a fájl felhasználóspecifikus beállításokat tartalmazhat, amelyek globálisan befolyásolják az Apache 2-t.
mods-available
: Ez a könyvtár a modulok betöltésére és beállítására szolgáló konfigurációs fájlokat tartalmaz. Nem minden modulhoz egy-egy beállítófájl tartozik.
mods-enabled
: Szimbolikus linkeket tartalmaz az /etc/apache2/mods-available fájljaira. A modul konfigurációs fájljára mutató szimbolikus link létrehozása után az adott modul bekapcsolásra kerül az Apache 2 következ˝o újraindításakor.
17
4 AZ APACHE 2 WEBKISZOLGÁLÓ
7. ábra. A (aktív) HTTP szerverek piaci részesedése a Netcraft mérései alapján ports.conf
: Az Apache 2 által figyelt TCP portokat tartalmazza. A Listen direktíva megadja azt a portot és opcionálisan IP-címet, amelyen az Apache 2-nek figyelnie kell a kéréseket. Ha az IP-cím nincs megadva, akkor az Apache 2 a géphez rendelt minden IP-címen figyelni fog. A Listen direktíva alapértelmezett értéke a 80.
sites-available
: Ez a könyvtár az Apache 2 virtuális kiszolgálóinak konfigurációs fájljait tartalmazza
sites-enabled
: A mods-enabled mintájára a sites-enabled szimbolikus linkeket tartalmaz az /etc/apache2/sites-available könyvtárra.
Az Apach 2 induláskor beolvassa a MIME-dokumentumtípusokat tartalmazó fájlt is2 , ennek nevét a TypesConfig direktíva adja meg. Ennek alapértelmezett értéke a /etc/mime.types.
Apache modulok Az Apache 2 egy moduláris kiszolgáló. Ez azt jelenti, hogy a kiszolgáló magja csak a legalapvet˝obb szolgáltatásokat tartalmazza. A b˝ovített szolgáltatások az Apache 2-be tölthet˝o modulokban érhet˝ok el. Ha a kiszolgálót dinamikusan betöltött modulok használatára fordítják, akkor a modulok külön is lefordíthatók és engedélyezhet˝oek, ellenkez˝o esetben az Apache 2-t újra kell fordítani a modulok hozzáadásához vagy eltávolításához [1]. 2
Ez a fájl tartalmazza a „fájlvégz˝odés – tartalom típusa” összerendeléseket.
18
4 AZ APACHE 2 WEBKISZOLGÁLÓ
8. ábra. A vezet˝o piaci szerepl˝ok HTTP szervereinek piaci részesedése típus szerint a Netcraft adatai alapján A telepített modulokat a /etc/apache2/mods-available könyvtár tartalmazza. Új modulok (esetünkben az MySQL hitelesítés modul) a rendszer csomagkezel˝ojével telepíthet˝oek: 1
$ sudo apt-get install libapache2-mod-auth-mysql
Modulok engedélyezése az a2enmod segédprogram segítségével lehetséges: 1 2
$ sudo a2enmod auth_mysql $ sudo /etc/init.d/apache2 restart
Hasonlóképpen az a2dismod segítségével letilthatók az egyes modulok: 1 2
$ sudo a2dismod auth_mysql $ sudo /etc/init.d/apache2 restart
Virtuális kiszolgálók Az Apache 2 egyik leghatékonyabb szolgáltatása, hogy egyetlen gépen több webkiszolgálót is képes futtatni [1]. Ehhez a VirtualHost szolgáltatást lehet igénybe venni. Alapértelemben az Apache 2-ben egyetlen virtuális kiszolgáló van beállítva. Az alapértelmezett virtuális kiszolgáló adatait a /etc/apache2/sites-available/default fájl tartalmazza. Új virtuális kiszolgáló létrehozásához ezt a fájlt célszer˝u mintaként felhasználni. 1 2
$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/irulabor
19
4.1 Az Apache 2 telepítése
4 AZ APACHE 2 WEBKISZOLGÁLÓ
A fájlban található beállítások csak az adott virtuális kiszolgálóra lesznek érvényesek. Ha egy direktíva nincs megadva a virtuális kiszolgálóra, akkor a globális, rendszerszint˝u (alapértelmezett) beállítás kerül felhasználásra. A DocumentRoot direktíva megadja, hogy az Apache 2 hol keresse a webhelyet felépít˝o fájlokat. A ServerName (elhagyható) direktíva megadja, hogy a webhely mely FQDN-re válaszoljon. Az alapértelmezett virtuális kiszolgálóhoz nincs megadva a ServerName direktíva, így minden kérésre válaszol, amely nem illeszkedik egy másik virtuális kiszolgálón beállított ServerName direktívára. A következ˝o beállítás hatására például a webhely minden .irulabor.vmware vég˝u tartománykérésre válaszolni fog. 1 2
ServerName irulabor.vmware ServerAlias *.irulabor.vmware
Az /etc/apache2/sites-available könyvtárat nem dolgozza fel az Apache 2. Az /etc/apache2/sites-enabled alatti szimbolikus linkek mutatnak az elérhet˝o oldalakra. Új virtuális hosztot az a2ensite segédprogram használatával lehet engedélyezni: 1 2
$ sudo a2ensite irulabor $ sudo /etc/init.d/apache2 restart
Hasonlóképpen az a2dissite segédprogrammal tiltható le egy webhely: 1 2
$ sudo a2dissite irulabor $ sudo /etc/init.d/apache2 restart
Az Apache 2 telepítése ♠ 4.1. feladat: resztül! 1 2
Telepítse az apache2 csomagot a beépített csomagkezel˝on ke-
$ apt-cache search apache2 $ apt-get install apache2
4.2. feladat: Ellen˝orizze, hogy a webkiszolgáló beállítása lehet˝ové teszi-e a 80as porton történ˝o „hallgatózást”. Melyik fájl tartalmazza ezt a beállítást? Milyen paranccsal tudja ezt ellen˝orizni böngész˝o nélkül?
20
4.2 Az Apache biztonsági beállításai
4 AZ APACHE 2 WEBKISZOLGÁLÓ
♠ 4.3. feladat: Az Apache 2 dokumentációja és az alap sablon alapján állítson be egy virtuális kiszolgálót, mely az irulabor.vmware domén névre tölt˝odik be. A kiszolgáló által visszaküldött html oldalak kódja megtalálható és letölthet˝o a https://github.com/ng201/iru címen. Ne feledje el aktiválni az elkészült konfigurációt! Tipp: Az /etc/hosts fájlban készítsen el egy bejegyzést, hogy a virtuális gép ismerje a irulabor.vmware nevet.
Az Apache biztonsági beállításai „Uff, Nagyf˝onök! Béla volnék”, avagy az „apacs autentikáció” A legegyszer˝ubb, fájl alapú autentikáció engedélyezéséhez a következ˝o sorokkal kell kiegészíteni a virtuális kiszolgáló beállítását: 1 2 3 4
AuthType Basic AuthName "Vedett oldal" AuthUserFile /etc/apache2/conf.d/.htpasswd Require valid-user
ahol AuthType az autentikáció típusát, AuthName a hely egy opcionális nevét, a felhasználók neveit és jelszavait tartalmazó fájl elérési útvonalát pedig a AuthUserFile direktíva adja meg. A Require sorban pedig azt adtuk meg, hogy csak a fájlban szerepl˝o felhasználók jelentkezhetnek be. Lássunk egy életb˝ol ellesett példát: 1 2 3 4 5 6 7 8 9 10
Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all AuthType Basic AuthName "Vedett oldal fajl alapu autentikacioval" AuthUserFile /etc/apache2/conf.d/.htpasswd Require valid-user
A htpasswd fájlt (/etc/apache2/conf.d/.htpasswd a fenti mintapéldában) a htpasswd program segítségével lehet létrehozni és módosítani. Ezt a programot célszer˝u használni akkor is, amikor egy jelszavat szeretnénk lecserélni. Egy új bejegyzés a következ˝oképp helyezhet˝o el a fájlban: 1 2 3
$ htpasswd /etc/apache2/conf.d/.htpasswd ujfelhasznalo New password: Re-type new password:
A fenti utasítás hatására a következ˝o bejegyzés kerül a htpasswd fájlba: ujfelhasznalo:Po9FhxMKQJcRY
Végezetül felhasználó törlése a következ˝o sor bemásolásával lehetséges: 21
4.3 A .htaccess
1
4 AZ APACHE 2 WEBKISZOLGÁLÓ
$ htpasswd -D .htpasswd ujfelhasznalo
♠ 4.4. feladat: A fizikai gépen (tehát nem a virtuális linuxon!) töltse be a böngész˝oben a http://irulabor.vmware/vedett címet. Mint láthatja, a vedett mappában található fájlok jelenleg elérhet˝oek a fizikai gépr˝ol is. A feladat az, hogy a vedett mappa tartalma csak a virtuális gépr˝ol legyen elérhet˝o a webszerverbe épített IP korlátozás segítségével. ♠ 4.5. feladat: A feladat az, hogy a védett mappa tartalma csak felhasználónév és jelszó segítségével legyen elérhet˝o a webszerverbe épített korlátozás segítségével. A felhasználókat és a hozzájuk tartozó jelszavakat egy külön fájl tartalmazza (/etc/apache2/conf.d/.htpasswd ). A felhasználók között, természetesen, legyen ott „mekkelek”, akinek legyen a jelszava az Ön NEPTUN kódja! ♠ 4.6. feladat: A feladat az, hogy a nagyonvedett mappa tartalma csak felhasználónév és jelszó segítségével legyen elérhet˝o a webszerverbe épített korlátozás segítségével. A felhasználók a rendszer beépített felhasználói. Kíséreljen meg belépni a fenti címen. Tipp: mod_authnz_external, pwauth ♠ 4.7. feladat (opcionális): A feladat az, hogy a hipervedett mappa tartalma csak felhasználónév és jelszó segítségével legyen elérhet˝o a webszerverbe épített korlátozás segítségével. A felhasználókat és a hozzájuk tartozó jelszavakat egy LDAP címtár tartalmazza, amely a virtuális gépen fut (azaz a 127.0.0.1-es IP címen érhet˝o el). Csak a people ou tagjai számára kívánunk hozzáférést biztosítani, ennek megfelel˝oen konfigurálja fel az Apache-ot. Tipp: Az alapértelmezett Apache 2 konfigurációban a szükséges modul nincs engedélyezve. A feladat megoldása el˝ott engedélyezze a modult!
A .htaccess A .htaccess (hypertext access) fájl egy könyvtár szint˝u konfigurációs fájl, amely a webszerver decentralizált menedzsmentjét teszi lehet˝ové. A webes tartalmak között kerül elhelyezésre, és az adott könyvtár meglátogatásakor lehet˝ové teszi a szerver némely beállításának felülbírálását. Engedélyezéséhez a virtuális kiszolgáló számára be kell kapcsolni az AllowOverride funkciót. A .htaccess tartalmának módosításával a következ˝o feladatok oldhatók meg: • egyéni hibalapok, • jelszavas védelem, • SSI engedélyezése .htaccess-en keresztül, 22
4.3 A .htaccess
4 AZ APACHE 2 WEBKISZOLGÁLÓ
• látogatók tiltása IP alapján, • alapértelmezett fájl megváltoztatása (pl. index.html-r˝ol indulolap.php), • átirányítások, • .htaccess tartalom megtekintésének tiltása, • MIME típusok hozzáadása, • fájlok direkt linkelésének (más honlapokra) tiltása, • könyvtárlistázás tiltása, • stb. Lássunk két egyszer˝u példát! Minden szerveren van egy olyan beállítás, mely azt határozza meg, hogy egy könyvtár nevét beírva mely fájlok jelenít˝odjenek meg a böngész˝oben. Ez általában az index.html vagy index.htm, index.php szokott lenni, de tetszés szerint módosítható. Ehhez mindössze a .htaccess fájlt kell módosítani: 1
DirectoryIndex fajlneve.html
Gyakran el˝ofordul, hogy a honlap (vagy egy része) módosul, új helyre költözik. Az átirányítást többféleképpen is meg lehet oldani. Az egyik lehet˝oség a .htaccess: 1
Redirect /regikonyvtar/ http://www.honlapodcime.hu/ujkonyvtar/
4.8. feladat: A weboldal tartalmaz egy nyilvanos elnevezés˝u mappát is, benne egy .htaccess fájllal. Mire alkalmas ez a fájl? ♠ 4.9. feladat: Az alapértelmezett webkiszolgáló konfigurációban ennek a fájlnak a használata tiltva van. Milyen konfigurációs direktívával tudjuk mégis engedélyezni, és ezt hol kell megadni? A kérdés a nyilvanos mappára vonatkozik, csak ott akarjuk engedélyezni a .htaccess használatát. Tipp: AllowOverride ♠ 4.10. feladat: A nyilvanos mappára szeretné bekapcsolni a webszerver automatikus listázó funkcióját. Mit és milyen formátumban kell ehhez beírni a .htaccess fájlba? Tipp: +Indexes
23
5 LINUX HÉJPROGRAMOZÁS
5 | Linux héjprogramozás A Linux héjprogram (shell script) nem más mint (héj)parancsok sorozata, amelyeket az újrafelhasználás jegyében egy fájlba gy˝ujtünk. A héjprogramok el˝onye a klasszikus programozási nyelvekkel szemben az, hogy sokkal magasabb, elvontabb szintem lehet bennük dolgozni, és megkönnyítik a fájlokkal és könyvtárakkal való manipulációt. Sajnos a futási id˝oben történ˝o interpreter-használat miatt a sebességük elmaradhat a klasszikus nyelvekéhez képest, de a gyorsabb fejlesztési ciklus oltárán ez gyakran feláldozható [3]. Kezdjük egy egyszer˝u programmal. Nézzük meg, hogy hány felhasználó van aktuálisan bejelentkezve egy többfelhasználós Linux szerverre. Ebben a feladatban a who parancs lehet a segítségre: 1 2 3 4 5 6
$ who frakk pts/2 Dec 31 16:39 (magyarvizsla.pelda.hu) lukrecia pts/3 Dec 27 11:07 (cicavizio.pelda.hu) szerenke dtlocal Dec 27 17:55 (macska.pelda.hu) karolybacsi pts/5 Dec 27 17:55 (:32) irmaneni pts/14 Jan 2 06:42
Egy nagy többfelhasználós rendszerben a lista hosszúra nyúlhat, így kiváló lehet˝oséget nyújt a feladatok automatizálására. A bejelentkezett felhasználók megszámolásához módosítsunk egy picit a programon, használjuk fel a wc programot, amely megszámolja a bemenetén a sorokat, szavakat és karaktereket. Az esetünkben a program -l kapcsolóval történ˝o meghívása a nyer˝o: 1 2
$ who | wc -l 5
A következ˝o lépés a az el˝oz˝o utasítás páros egy paranccsá tétele. Ehhez az el˝oz˝o programot egy fájlba kell elhelyezni, majd a fájlt futtathatóvá kell tenni: 1 2 3 4 5 6
$ cat > nusers who | wc -l ^D $ chmod +x nusers $ ./nusers 5
A #! – az els˝o sor Amikor az el˝oz˝o programot futtatjuk, akkor a Linux rendszermag egy új folyamatot indít, ezen folyamaton belül próbálja meg futtatni a programot. A rendszermag hagyományos (lefordított) programok esetében tudja, hogyan lehet ezt megtenni, de a héjprogramok esetében ez nincs így. Ilyenkor a hívó oldal feltételezi, hogy a program egy héjprogram, és elindítja a /bin/sh értelmez˝ot, hogy futtassa le az héjprogramot (a mechanizmust a 9. ábra szemlélteti). 24
5.1 A bash
5 LINUX HÉJPROGRAMOZÁS
9. ábra. Héjprogramok futtatása [3] Ez a mechanizmus jól m˝uködik, amíg csak egy shell van telepítve a rendszerben. Ellenkez˝o esetben a héjprogram els˝o sora nyújt(hat) segítséget: ha az els˝o sora a #! jelekkel kezd˝odik, amelyeket szorosan követ az értelmez˝o neve, akkor azzal az értelmez˝ovel futtatja le a héjprogramot: 1 2
#!/bin/bash #
3 4
who | wc -l
A bash A bash egy Unix/Linux rendszerhéj/shell. A futtatható fájl neve bash egy játékos mozaikszó, mely a Bourne again shell, illetve a born again shell kifejezéseket rövidíti.
Változók In medias res. 1 2 3
$ envaltozom=Frakk_a_macskak_reme $ echo $envaltozom Frakk_a_macskak_reme
Ahogy az el˝oz˝o példából is látszik, változónak értéket úgy adunk, hogy leírjuk a nevét, amit közvetlenül az egyenl˝oségjel, majd pedig az értéke követ. Ha az értékben üres karakterek is vannak, akkor aposztrófot kell használni az érték elején és végén: 1 2 3 4
kutya=Frakk macska1=Szerenke macska2=Lulkrecia # ^^ ertekadas tobb valtozonak egy sorban bacsi="Karoly bacsi" # ^^ ureskarakterek eseten aposztrofot kell hasznalni
Változók értékeinek a konkatenációja is gyerekjáték: 1
allatok="$kutya, $macska1, $macska2"
További példákat változók értékadására az alábbi héjprogramban láthatunk: 25
5.1 A bash
1 2 3
5 LINUX HÉJPROGRAMOZÁS
#!/bin/bash a=375 hello=$a
4 5 6
echo $hello # 375 # hivatkozas a valtozora
7 8 9
echo ${hello} # 375 # mint elobb
10 11 12 13 14 15
# idezojelek... echo "$hello" # 375 echo "${hello}" # 375 echo ’$hello’ # $hello # a valtozo behelyetttesiteset letiltotta az aposztof
16 17 18 19
DATETIME=‘date +"%Y. %m. %d., %T"‘ # ^^^ a parancs futasi eredmenye a valtozoba kerul echo "Az aktualis ido: " $DATETIME
Egyszeru˝ kiíratás: az echo Ahogy az el˝obb láttuk, az echo parancs feladata változó értékének, illetve szövegek, karakterfüzérek kiíratása a képerny˝ore. Az echo parancs mindenféle kapcsoló használata nélkül egyszer˝uen kiírja az argumentumait a képerny˝ore, majd pedig egy új sort kezd: 1 2 3 4
$ echo Hol volt, hol nem volt, volt egyszer egy szep kis kertes haz. Hol volt, hol nem volt, volt egyszer egy szep kis kertes haz. $ echo Abban lakott ket kover macska. Abban lakott ket kover macska.
Ha az echo els˝o argumentuma -n, akkor a sorvégi újsor nem „írja” ki (az alulvonás a kurzor pozícióját jelöli): 1 2
$ echo -n "Adja meg a nevet: " Adja meg a nevet: _
Az -e kapcsoló segítségével lehet az echot rábírni a szöktetett karakterek értelmezésére: 1 2 3 4 5 6
$ echo "\n\n\n\n" \n\n\n\n $echo -t "Frakk\nSzerenke\nLukrecia" Frakk Szerenke Lukrecia
Parancssori argumentumok
26
5.1 A bash
1 2 3 4
5 LINUX HÉJPROGRAMOZÁS
#!/bin/bash # Hivja meg a scriptet legalabb 10 parameterrel, peldaul # ./scriptname 1 2 3 4 5 6 7 8 9 10 MINPARAMS=10
5 6 7
echo "A script neve \"$0\"." # eleresi utvonalla, az aktualis konyvtar eseteben ez a ./
8 9 10
echo A script neve \"‘basename $0‘\". # kiszuri az eleresi utvonalat
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
if [ -n "$1" ] # valtozo ertekenek a tesztelese then echo "Az #1. parameter erteke $1" # szoktetni kell a #-t fi if [ -n "$2" ] then echo "A #2. parameter erteke $2" fi if [ -n "$3" ] then echo "A #3. parameter erteke $3" fi # ... if [ -n "${10}" ] # A 9-nel nagyobb sorszamu parametereket # {zarojelekbe} kell tenni. then echo "A #10. parameter erteke ${10}" fi echo "-----------------------------------" echo "A parancssori parameterek rendre: "$*"" if [ $# -lt "$MINPARAMS" ] then echo "A scriptet legalabb $MINPARAMS parancssori" echo "argumentummal kell meghivni!" fi
37 38
exit 0
Ciklusok, elágazások Nézzük meg, milyen módon tudnánk kiíratni a Naprendszerben található bolygók neveit: 1 2 3 4 5 6 7 8
#!/bin/bash # Bolygok listazasa. for planet in Merkur Venusz Fold Mars Jupiter Szaturnusz Uranusz Neptunusz Pluto do echo $planet # soronkent egy-egy bolygo done echo; echo "Fene! A Pluto mar nem bolygo!"
27
5.2 Karakterfolyamok kezelése
9
5 LINUX HÉJPROGRAMOZÁS
exit 0
Még mindig bolygók, de ezúttal kíváncsiak vagyunk azok átlagos keringési távolságára is: 1 2 3 4 5 6 7
#!/bin/bash # Bolygok II. # Bolyok tavolsaga a Naptol. for planet in "Merkur 58" "Venusz 108" "Fold 150" "Mars 228" do set -- $planet # parszolja a "planet" valtozot # es beallitja a pozicionalis parametereket
8 9 10 11
echo "$1 atlagosan $2 000 000 km-re kering a Naptol" done exit 0
A rendszer felhasználóinak a kiíratása a következ˝o héjprogrammal valósítható meg: 1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/bash PASSWORD_FILE=/etc/passwd n=1 # User number for name in $(awk ’BEGIN{FS=":"}{print $1}’ < "$PASSWORD_FILE" ) # Field separator = : ^^^^^^ # Print first field ^^^^^^^^ # Get input from password file /etc/passwd ^^^^^^^^^^^^^^^^^ do echo "USER #$n = $name" let "n += 1" done exit $?
És végezetül álljon itt egy héjprogram, amelyben a feltételes elágazásra láthatunk egy példát: 1 2 3 4 5 6 7 8 9 10
#!/bin/bash # Testing ranges of characters. echo; echo "Hit a key, then hit return." read Keypress case "$Keypress" in [[:lower:]] ) echo "Lowercase letter";; [[:upper:]] ) echo "Uppercase letter";; [0-9] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac
Karakterfolyamok kezelése Reguláris kifejezések: BRE és ERE A reguláris kifejezések olyan struktúrák, amelyek lehet˝ové teszik olyan karakterfüzérek, szövegrészek keresését, amelyek megfelelnek egy keresési feltételnek (pl. „mássalhangzóval kezd˝odik”, stb). 28
5.2 Karakterfolyamok kezelése Karakter
\ . *
BRE / ERE mindkett˝o mindkett˝o mindkett˝o
ˆ
mindkett˝o
$
mindkett˝o
[...]
mindkett˝o
\{n,m\}
BRE
\( \)
BRE
\n
BRE
{n,m} +
ERE ERE
?
ERE
|
ERE
( )
ERE
5 LINUX HÉJPROGRAMOZÁS
Jelentése általában a karakter speciális jelentését kapcsolja ki („szökteti”) pontosan egy (de az lehet bármilyen) karakterre illeszkedik nulla vagy több olyan karakterre illeszkedik, ami az o˝ t megel˝oz˝o mintával leírható (például a .* bárhány bármilyen karakterre illeszkedik sor eleji illeszkedés, azaz az o˝ t követ˝o reguláris kifejezésnek a sor vagy a karakterfüzér elején kell lennie sor végi illeszkedés, azaz az o˝ t megel˝oz˝o reguláris kifejezésnek a sor vagy a karakterfüzér végén kell lennie bármelyik a zárójelekbe zárt karakterre illeszkedik, ahol az esetleges „-” karakterrel intervallumot lehet jelölni legalább n, de maximum m olyan kifejezésre illeszkedik, amely az o˝ t megel˝oz˝o reguláris kifejezésre illeszkedik megjegyzi a zárójelek közé zárt kifejezésre illeszked˝o karakterfüzért, amelyekre kés˝obb a \1 – \9 kifejezésekkel lehet hivatkozni visszaadja az n-edik (n = 1, . . . , 9) zárójelbe zárt mintára illeszked˝o karakterfüzért éppen úgy viselkedik, mint az BRE \{n,m\} egy vagy több olyan karakterre illeszkedik, ami az o˝ t megel˝oz˝o mintával leírható nulla vagy egy olyan karakterre illeszkedik, ami az o˝ t megel˝oz˝o mintával leírható az el˝otte vagy utána található reguláris kifejezésre illeszkedik (egyszer˝u „vagy” funkció) a zárójelekbe zárt reguláris kifejezésre illeszkedik
3. táblázat. Reguláris kifejezések [3] A Linux és Unix rendszerek programjainak nagy része kihasználja a reguláris kifejezések erejét (lásd 4. ábra). Így például • a grep és családja (grep, egrep, agrep), amely lehet˝ové teszi egy adott mintára illeszked˝o sorok kiválogatását egy szövegb˝ol, • a sed, amely lehet˝ové teszi a bemeneti folyam megváltoztatását, • a karakterfüzéreket feldolgozó nyelvek, mint például az awk, a Perl, a Ruby, a Tcl, • a fájlkezel˝ok, mint például a more, page és a pg és a less, • a fájlszerkeszt˝ok, mint például az ed, a vi, az emacs, a vim, stb. A reguláris kifejezéseknek két típusa van használatban [3], a POSIX BRE (Basic Regular Expression)és a ERE (Extended Regular Expression), amelyek a soksok különbségük mellett abban az egyben megegyeznek, hogy hagyományos karakterekb˝ol és speciális (jelentéssel bíró) karakterekb˝ol építkeznek. A két típus karaktereit, szerkezeteit a 3. táblázat mutatja be. Lássunk pár egyszer˝u példát reguláris kifejezésekre: tolsztoj ˆtolsztoj
a „tolsztoj” karakterfüzérre illeszkedik bárhol a sorban, a sor eleji „tolsztoj” füzérre illeszkedik, 29
5.2 Karakterfolyamok kezelése típus BRE ERE
grep
sed
ed
5 LINUX HÉJPROGRAMOZÁS ex/vi
! ! ! !
more
!
egrep
!
awk
lex
! !
4. táblázat. Linux programok és az általuk használt reguláris kifejezések típusa [3] tolsztoj$ ˆtolsztoj$
[Tt]olsztoj
a sor végi „tolsztoj” füzérre illeszkedik, azokra a sorokra illeszkedik, amelyek pontosa megegyeznek a „tolsztoj” füzérrel, a „Tolsztoj” és a „tolsztoj” kifejezésre is illeszkedik,
tols.toj
a „tols”, majd egy tetsz˝oleges karakter, majd „toj” kifejezésre illeszkedik bárhol a sorban,
tol.*toj
olyan sorokra illeszkedik, amelyekben a „tol” füzért bárhány (akár 0) karaktereket nulla tetsz˝oleges karakter, majd pedig a „toj” füzért követ (pl. toltoj, tolsztoj, tolKIAFENEtoj, stb.).
Fontos kiemelnünk a BRE-ek „visszaemlékez˝o képességét”, azaz azt a tulajdonságát, hogy egy korábbi illeszked˝o mintára illeszked˝o karakterfüzérre lehet kés˝obb hivatkozni. Ezt a funkcionalitást két lépésben lehet elérni. Els˝oként egy alkifejezést zárójelek, \( és \), közé kell zárni. Ezt követ˝oen a \1 - \9 kifejezésekkel lehet hivatkozni a zárójelekbe zárt reguláris kifejezésekre illeszked˝o karakterfüzérekre. Például a \(["’]\).*\1 reguláris kifejezés minden idéz˝ojelek közé zárt szóra illeszkedik (pl. ’kilincskerék’ vagy "szendvics"), s˝ot, a kifejezés elején és a végén szigorúan megköveteli ugyanazon idéz˝ojel (’ vagy ") használatát.
A grep A grep (a név egy ed parancs, a g/re/p – globálisan illeszd és írd ki, rövidítése) egy parancssori program, amely fájlban vagy karakterfolyamban tesz lehet˝ové karakterfüzérek (sztringek) keresését reguláris kifejezések alapján [4, ?]. A grep legegyszer˝ubben az alábbi módon hívható meg: 1
$ grep ’STRING’ filename
Egyszer˝u keresés : A ps -ax | grep gnome
parancs hatására a kimeneten azok a futó folyamatok jelennek meg, amelyek nevében szerepel a gnome kifejezés.
30
5.2 Karakterfolyamok kezelése
5 LINUX HÉJPROGRAMOZÁS
Blob : Gyakran megesik, hogy egy adott mintát a könyvtár összes összes fájlban keresünk. Ezt a következ˝oképp tehetjük meg: grep ’ez egy teszt’ *.pl
A parancs kiadásának folyományaként a grep végigbogarássza az aktuális könyvtárban található összes .pl végz˝odés˝u fájlt az „ez egy teszt” minta után kutatva. A válasz azon fájlok nevét tartalmazza, amelyekben fellelhet˝o a keresett kifejezés. Találatok helye : A grepet a -n kapcsolóval meghívva nemcsak a mintára illeszked˝o sorokat adja, hanem azok sorszámát is: grep -n gnome processzek.txt
Találatok száma : Azt, hogy hányszor találta meg a keresett kifejezést a grep a megadott fájlban/karakterfolyamban a -c kapcsoló segítségével tudhatjuk meg: grep -c /usr process.txt
Nagy- és kisbet˝u : A grep megkülönbözteti a nagy- és kisbet˝uket. Ez a tulajdonság az -i kapcsolóval kikapcsolható ps -ax | grep GnOmE process.txt ps -ax | grep -i GnOmE process.txt
Negálás : Végezetül ha arra lennénk kíváncsiak, hogy mely sorok nem illeszkednek az adott kifejezésre, akkor a -v kapcsoló használata a javallot: grep -v /usr process.txt
A sed A sed (stream editor) tulajdonképpen egy programozható szövegszerkeszt˝o, ami a szabványos bemenetére érkez˝o szöveget képes átalakítani [5]. M˝uködésének lényege, hogy a feldolgozandó szöveget soronként egy átmeneti tárba, az úgynevezett mintatérbe olvassa be, szabályos kifejezések alapján megkeres benne bizonyos részeket, majd elvégzi rajtuk az egybet˝us parancsok formájában megadott m˝uveleteket (lásd 10. ábra ). A sed m˝uveletei a következ˝ok: p s i y
kiíratás, helyettesítés, beszúrás, karakterek cseréje.
d a c
törlés, hozzáf˝uzés, a mintatér cseréje,
A sedet leggyakrabban egy másik programtól érkez˝o kimenet feldolgozására használjuk: 1
... | sed ’sed utasitasok’ | ...
A sed programok egy sora a következ˝uképpen néz ki: , parancs
31
5.2 Karakterfolyamok kezelése
5 LINUX HÉJPROGRAMOZÁS
10. ábra. A sed m˝uködési elve Itt és egy-egy szám vagy reguláris kifejezés lehet. Ha számot adunk meg, az a bemenet adott sorszámú sorának feldolgozását jelenti, ha reguláris kifejezést (ezt két / – perjel – közé kell zárni), akkor a program minden olyan sorra lefut, amelyre a kifejezés illeszkedik. Ennek megfelel˝oen a 25 egybet˝ us_parancs utasítás csak a bemenet 25. sorát fogja érinteni, míg a /[0-9]/ egybet˝ us_parancs programsor minden olyan szövegsort érinteni fog, amelyben legalább egy számjegy van. Egyszer˝u példák: 1. a fájl els˝o tíz sorának a törlése: sed -e ’1,10d’ /etc/services
2. a //-rel kezd˝od˝o, megjegyzéseket tartalmazó sorok törlése egy C++ forrásfájlból: cat kilincskerek.cpp | sed ’/\/\//d’
3. a bemenetben a Linux kifejezés lecserélése Linux-Unix-ra: echo "szeretem a Linuxot" | sed ’s/Linux/Linux-Unix/’
4. a Linux kiszolgáló IP címének a meghatározás: ifconfig eth0 | grep ’inet addr:’
|
sed ’s/ˆ.*inet addr:\([0-9\.]*\).*$/\1/’
32
5.2 Karakterfolyamok kezelése
5 LINUX HÉJPROGRAMOZÁS
5. utolsó három karakter törlése a fájl összes sorának a végér˝ol: sed ’s/...$//’ bemenet.txt
És egy egyszer˝u oszlopcsere a’la sed: 1 2 3 4 5 6
$ cat test1 first:second one:two $ sed ’s/\(.*\):\(.*\)/\2:\1/’ test1 second:first two:one
Az awk Az awk egy általános célú programozási nyelv, amelyet szöveges állományok feldolgozására terveztek. Elnevezése a megalkotói – Alfred Aho, Peter Weinberger és Brian Kernighan – családnevének kezd˝oib˝ol született [5, 3]. Az awk-ot a következ˝oképp lehet meghívni a parancssorból: 1 2
$ awk [ -F fs ] [ -v var=value ... ] ’program’ [ -- ] [ var=value ... ] [ file(s) ]
vagy pedig a következ˝o formában: 1 2
$ awk [ -F fs ] [ -v var=value ... ] -f programfile [ -- ] [ var=value ... ] [ file(s) ]
Rövid programokat tipikusan a parancssorban szokás megadni, míg hosszabb kódokat külön fájlban lehet megadni a -f kapcsoló segítségével. Ráadásul ezt az opciót többször egymás után is meg lehet adni, ilyenkor a végrehajtandó program a megadott programok konkatenációja lesz. Ha nincs fájlnév megadva, akkor az awk a programok a standard bemenetr˝ol olvassa. A −− kapcsoló különleges, és azt jelzi, hogy nincs több parancssori paraméter megadva az awk számára. Minden ezt követ˝o opció a program számára lesz elérhet˝o. Az awk a bemenetet mint rekordok összességét látja, amelyek mindegyike mez˝okre osztja. Alapesetben a rekordok sorok, a mez˝ok pedig egy vagy több nem üres karakterb˝ol álló karakterfüzérek (stringek). Habár ezeket a beállításokat az awk programozó bármikor tetszés szerint megváltoztathatja [3]. Egy tipikus awk program a végrehajtása során a bemeneti adatokat egy másféle kimenetté formálja át. A programok általában mintából és a mintához tartozó parancsokból állnak: 1 2
/1. minta / { parancs(ok) } /2. minta / { parancs(ok) }
Az awk soronként olvassa a bemenetet. Minden beolvasott sort összehasonlít a mintákkal, és ha illeszkedést talál, a parancsokat végrehajtja. A mintákat a reguláris kifejezések szabályai szerint értelmezi. A awk különleges parancsformái a következ˝ok: 33
5.2 Karakterfolyamok kezelése
5 LINUX HÉJPROGRAMOZÁS
BEGIN parancs(ok) adatbeolvasás el˝ott ezeket a parancsokat végrehajtja, END parancs(ok) adatbeolvasás és a többi parancs végrehajtása után ezeket a parancsokat végrehajtja, /minta/ ha nincs külön parancs megadva, a mintának megfelel˝o sort kinyomtatja, akció ha nincs minta megadva, a parancsokat végrehajtja minden sorra egymás után. A „Helló, világ!” program awk-ban a következ˝oképpen implementálható: 1
BEGIN { print "Hello, vilag!" }
Az awk speciális beépített változói a FS
mez˝o szeparátor (reguláris kifejezés) (alapértelmezett érték: " "),
NF
mez˝ok száma a beolvasott sorban,
NR
olvasott rekordok száma,
OFS
output mez˝o szeparátor (alapértelmezett érték: " "),
ORS
output rekord szeparátor (alapértelmezett érték: "\n"),
FILENAME
aktuális input fájl neve,
ARGC
paraméterek száma,
ARGV
paraméterek értéke,
FNR OFMT RS
olvasott rekordok száma az aktuális fájlban, output számformátum, input rekord szeparátor (alapértelmezett érték: "\n").
Az alábbi awk program megszámolja, majd kiírja a bemeneti fájlban lév˝o sorok, szavak és karakterek számát úgy, mint a wc nev˝u program: 1 2 3 4 5
{ w += NF c += length + 1 } END { print NR, w, c }
A következ˝o awk program a szavak gyakoriságáról készít statisztikát asszociatív tömb felhasználásával:
34
5.2 Karakterfolyamok kezelése
1
5 LINUX HÉJPROGRAMOZÁS
BEGIN { RS="[^a-zA-Z]+"}
2 3
{ words[tolower($0)]++ }
4 5 6 7
END { for (i in words) print i, words[i] }
A alábbi awk program kiírja a „bemenet.txt” fájl azon sorait, amelyek „Rent”-tel kezd˝odnek: 1
$ awk ’/Rent/{print}’ file
A print utasítás elhagyható, mert (ahogy azt már korábban említettük) ez az awk alapértelmezett viselkedése: 1
$ awk ’/Rent/’ file
A bemeneti fájlban található tábla n-edik oszlopában (az oszlopokat " " választja el) lev˝o számok összege „awkul” a következ˝oképp hangzik: 1
$ awk -v COLUMN=n ’{ sum += $COLUMN } END { print sum }’ file
Egy apró kis változtatással megoldható, hogy az összeg helyett az n-edik oszlop számainak az átlaga kerüljön a kimenetre. Íme: 1 2
$ awk -v COLUMN=n \textbackslash\textbackslash ’{ sum += $COLUMN } END { print sum / NR }’ file
Végezetül a következ˝o programocska a „lista.txt” fájlban megszámolja, hányszor lelhet˝o fel a „foo” minta: 1 2 3 4
$ > > >
awk ’ BEGIN { print "Analysis of \"foo\"" } /foo/ { ++n } END { print "\"foo\" appears " n " times." }’ lista.txt
♠ 5.1.A feladat: Írassa ki a számítógép processzorának a típusnevét! Az elkészített bash héjprogram (/home/laboruser/bin/5_1.sh) csak a típusnevet írja ki a standard kimenetre, semmi mást! ♠ 5.1.B feladat: Írassa ki a számítógép processzorának vendor id-jét! Az elkészített bash héjprogram (/home/laboruser/bin/5_1.sh) csak a vendor id-t írja ki a standard kimenetre, semmi mást! ♠ 5.1.C feladat: Írassa ki a számítógép processzorának frekvenciáját! Az elkészített bash héjprogram (/home/laboruser/bin/5_1.sh) csak a processzor névleges frekvenciáját (mértékegység nélkül) írja ki a standard kimenetre, semmi mást!
35
5.2 Karakterfolyamok kezelése
5 LINUX HÉJPROGRAMOZÁS
♠ 5.1.D feladat: Írassa ki a számítógép processzorának cache méretét! Az elkészített bash héjprogram (/home/laboruser/bin/5_1.sh) csak a processzor cache méretét írja ki a standard kimenetre (pl. 3569 KB), semmi mást! ♠ 5.2. feladat (opcionális): Írassa ki a rendszerben található fájlrendszereket és a velük kapcsolatos foglaltsági adatokat a következ˝o formátumban: 1 2 3 4
fajlrendszer#1 osszes#1 foglalt#1 ures#1 fajlrendszer#2 188M 0 188M ... fajlrendszer#3 12G 1.7G 10G
Az adatok legyenek „emberi” formátumban megjelenítve! A héjprogramot nevezze el 5_2.sh-nak és másolja a /home/laboruser/bin könyvtárába! Tipp: df ♠ 5.3. feladat: Írjon egy bash héjprogramot (/home/laboruser/bin/5_3.sh), amely futtatáskor soronként kiírja 1. a futtató felhasználó nevét, 2. az aktuális dátumot (éééé. hh. nn. formátumban), 3. a bejelentkezett felhasználókat (mindegyiket külön sorba). ♠ 5.4. feladat (opcionális): Írjon egy bash scriptet (/home/laboruser/bin/5_4.sh), amely visszaszámol 15 másodpercr˝ol és meg is jeleníti, hogy még hány másodperc van hátra (azaz másodpercenként kiírja a soron következ˝o számot 0 felé haladva, beleértve a 15-t és a 0-t is). Tipp: sleep, for ♠ 5.5.A feladat: Írjon egy bash scriptet (/home/laboruser/bin/5_5.sh), amely a standard bemeneten kapott öt oszlopból álló fájlban • felcseréli a harmadik és a negyedik oszlopok tartalmát, és • megfelezi (valós osztással) az els˝o oszlopban található számot, majd az eredményt kilistázza a képerny˝ore. ♠ 5.5.B feladat: Írjon egy bash scriptet (/home/laboruser/bin/5_5.sh), amely kilistázza a standard bemeneten kapott öt oszlopból álló adatfolyam azon sorait, amelyek páros számmal kezd˝odnek, és teszi mindezt úgy, hogy közben felcseréli a második és az ötödik oszlopok tartalmát.
36
HIVATKOZÁSOK
HIVATKOZÁSOK
♠ 5.5.C feladat: Írjon egy bash scriptet 5_5.sh néven, amely a standard bemeneten kapott öt oszlopból álló adatfolyamban • összef˝uzi a negyedik és az ötödik oszlopok tartalmát, és • megkétszerezi az els˝o oszlopban található valós számot, majd az eredményül kapott négy oszlopos adathalmazt kilistázza a képerny˝ore. ♠ 5.5.D feladat: Írjon egy bash scriptet (/home/laboruser/bin/5_5.sh), amely a standard bemeneten kapott öt oszlopból álló adatfolyamban • a negyedik oszlopban található karakterfüzérben megfordítja a karakterek sorrendjét, és • megkétszerezi az els˝o oszlopban található valós számot, majd az eredményül kapott adatfolyamot kilistázza a standard kimenetre. ♠ 5.6. feladat (opcionális): Írjon egy bash scriptet 5_6.sh néven, amely paraméterként megkapva egy felhasználó nevét kiírja a home directory-jának az elérési útvonalát. A program visszatérési értéke ebben az esetben legyen 0. Amennyiben a felhasználó nem létezik, írjon ki hibaüzenetet és 1 visszatérési értékkel lépjen ki. A script a felhasználó nevét parancssori argumentumként kapja meg!
Hivatkozások [1] Tony Bautts, Terry Dawson, Gregor N. Purdy, Linux hálózati adminisztrátorok kézikönyve, Kossuth Kiadó, 2005., ISBN: 9630947498 [2] Andrew Ford, Apache 2 Pocket Reference: For Apache Programmers & Administrators, O’Reilly Media, 1 edition, 2008., ISBN-10: 059651889 [3] Arnold Robbins, Nelson H.F. Beebe, Classic Shell Scripting, O’Reilly Media, 1st edition, 2005., ISBN-10: 0596005954 [4] John Bambenek, Agnieszka Klus, Grep Pocket Reference, O’Reilly Media, 1 edition, 2009., ISBN-10: 0596153600 [5] Arnold Robbin, sed and awk Pocket Reference, O’Reilly Media, 2nd Edition, 2002., ISBN-10: 0596003528 [6] Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Unix and Linux System Administration Handbook Prentice Hall, 2010., ISBN-10: 0131480057 [7] Ubuntu súgó, http://sugo.ubuntu.hu/
37
5.3 Appendix
HIVATKOZÁSOK
[8] Ubuntu kiszolgálók kézikönyve, http://sugo.ubuntu.hu/10.10/html/serverguide/hu/serverguide.pdf
[9] AddUsersHowto, https://help.ubuntu.com/community/AddUsersHowto
[10] IptablesHowTo, https://help.ubuntu.com/community/IptablesHowTo
[11] LDAP, http://unixlinux.tmit.bme.hu/LDAP
[12] Ubunut httpd, https://help.ubuntu.com/10.04/serverguide/httpd.html
Appendix Linux héjak és beépített parancsok Néhány közkedvelt Linux héj: bash ksh pdksh sh zsh
a GNU Bourne-Again Shellje a Korn shell, az eredeti vagy egy klónja a Public Domain Korn héj az eredeti Bourne shell a Z shell
Fontosabb beépített parancsok: . cd eval exit read test unset
beolvassa és végrehajtja az aktuális fájlt megváltoztatja az aktuális könyvtárat végrehajtja a szövegként megadott héjprogramot kilép a héjprogramból beolvas egy értéket az inputról kiértékeli a paraméterként megadott kifejezést „törli” a héj egy változóját vagy függvényét
A mindennapi életben hasznosnak bizonyult utasítások: basename dirname id date who stty
kiírja az útvonal utolsó komponensét opcionálisan a szuffix elhagyásával kiírja az útvonalat az utolsó elemét leszámítva kiírja a felhasználó azonosítóját és nevét kiírja az aktuális dátumot és id˝ot a paraméterekben specifikált formátumban a bejelentkezett felahsználók kilistázása az aktuális terminál beállításainak a kezelése
38
5.3 Appendix
HIVATKOZÁSOK
Szövegkezelés awk cat cmp dd echo egrep expand fgrep grep less more sed sort spell tee uniq wc
szöveges állományok feldolgozására reguláris kifejezések segítségével fájlkonkatenáció egyszer˝u program fájlok összehasonlítására blokkszint˝u adatmozgatás argumentum kiíratása a standard kimenetre kib˝ovített grep, amely az ERE típusú reguláris kifejezéseket használja tabulátorok szóköz karakterekre cseréje gyors grep g/re/p :) hosszú fájlok lapozása („Less is more.”) az eredeti BSD Unix lapozó program karakterfolyamok módosítása szöveges fájlok rendezése helyesírás-ellen˝orz˝o a sztenderd bemenetét a sztenderd kimenetre és a megadott fájlba másolja duplikált sorokat eltávolítása rendezett bemenetb˝ol sorok, szavak és a karakterek megszámolása a bemenetben
Fájlkezelés chgrp chmod chown cp df diff du gzip, gunzip head locate ls md5sum mkdir pwd rm rmdir sha15sum tail tar touch umask
fájlok és könyvtárak csoportjának a megváltoztatása fájlok és könyvtárak hozzáférési jogának a megváltoztatása fájlok és könyvtárak tulajdonosának a megváltoztatása fájlok és könyvtárak másolása üres helyek mérete a háttértárolón fájlok összehasonlítása a diszkek foglaltsági adatainak a megjelenítése tömörít˝o program és kitömörít˝o programok fájlok els˝o n sorának a listázása fájl keresése a neve alapján fájlok listázása ellen˝orz˝o összeg számolása MD5 algoritmussal új könyvtár készítése aktuális könyvtár kiíratása fájlok és könyvtárak törlése üres könyvtárak törlése ellen˝orz˝o összeg számolása SHA1 algoritmussal fájlok utolsó n sorának a kiíratása szalagarchiváló fájlok hozzáférési idejének a módosítása alapértelmezett hozzáférés beállítása fájlok számára
Folyamatkezelés fuser kill nice ps sleep top
adott fájlt vagy szoketet használó folyamatok megkeresése jelzés küldés egy vagy több folyamatnak (tipikusan „kill” küldése, hogy fejezze be a futását) folyamatok prioritásának a megváltoztatása az elindításuk el˝ott információ a futó folyamatokról a végrehajtás felfüggesztése a megadott id˝ore a leginkább CPU-igényes folyamatok listázása
39
5.3 Appendix
HIVATKOZÁSOK
Egyébb programok man scp ssh uptime
utasítás, függvény, rendszerhívás, stb. manuáljának a listázása, a manuálból a q bet˝u-vel lehet kilépni biztonságos távoli fájlmásolás „secure shell” megadja a legutóbbi bekapcsolás óta eltelt id˝ot, illetve a rendszer terheltségi adatait
40