Biztonságos Web-szerver kialakítása Debian GNU/Linux 2.2 rendszeren v1.0.2 Zákány Gergely narancs1@externet.hu Minden jog fenntartva a szerző számára (c) 2000 Zákány Gergely. Engedélyezett ennek a dokumentumnak a lemásolása, terjesztése és / vagy módosítása az FSF/GNU Free Documentation License (Szabad Dokumentációs Licensze) 1.1-es vagy újabb verziója alatt. (Ezt a licenszet itt is olvashatjuk: http://www.gnu.org/copyleft/fdl.html) Nincs eltérő szekció (invariant section). Nincs első és hatsó borító szöveg sem. A licensz a "GNU Free Documentation License" című függelékben olvasható. Tartalomjegyzék TARTALOMJEGYZÉK 2 ÁBRAJEGYZÉK 5 ELŐSZÓ 6 KÖSZÖNETNYILVÁNÍTÁS 7 I. BEVEZETÉS 8 Bevezetés üzleti szempontból 8 Bevezetés gyakorlati szempontból 11 II. ALAPFOGALMAK 15 1. A GNU PROJEKT, A GPL LICENSZ 16 2. A LINUX KERNEL 18 Néhány technikai jellegű információ 19 Nemzetközi változat 20 3. A DEBIAN PROJEKT 21 Mire jó egy terjesztés? 21 4. AZ APACHE PROJEKT, AZ APACHE MODULJAI 24 5. A WEB-SZERVER HELYE A HÁLÓZATBAN (INTERNET/INTRANET) 28 6. A WEB-SZEMÉLYZET FELÉPÍTÉSE 32 7. WEB-PROXY FOGALMA ÉS HELYE A HÁLÓZATBAN 33 8. BIZTONSÁGI ALAPOK (HARDVER, SZOFTVER) 33 8.1 Általános irányelvek 34 8.2 A Linux kernel biztonságát növelő projektek 38 8.3 A Web-alkalmazások biztonsága 40 9. SSH - TÁVOLI MENEDZSMENT 41 10. PHP3 ALAPOK (DINAMIKUS WEBLAP-KÉSZÍTÉS) 42 11. MYSQL ALAPOK (ADATBÁZIS SZERVER) 46 III. TERVEZÉS 49 1. A FELADAT FELMÉRÉSE - SKÁLÁZHATÓSÁG, ALTERNATÍVÁK, HARDVER. 49 2. KÖLTSÉGEK BECSLÉSE MINTAPÉLDA ALAPJÁN. 50 3. BIZTONSÁG 52 3.1 Milyen programok lehetnek / nem lehetnek egy Web-szerveren? 52 3.2 A partíciók megtervezése általánosan és a mintapéldához 54 3.3 A biztonsági mentés (backup) lehetőségei, módszerei és javasolt paraméterei 57 3.4 Szoftveres UPS (szünetmentes tápegység) felügyelet soros porton keresztül 60 3.5 A szükséges felhasználók/csoportok és a lemezkvóta megtervezése 62 IV. MEGVALÓSÍTÁS 65 1. GYORSTALPALÁS 65 1.1 A szoftver beszerezése: CD-set, vagy FTP tükör. 65 1.2 A telepítés menete 67 1.2.1 Indítás CD-ről vagy floppy-ról 67 1.2.2 Szükséges alapbeállítások, partícionálás 69 1.2.3 A hálózat beállítása 71 1.2.4 Alaprendszer telepítése, újraindítás a merevlemezről 73 1.2.5 A jelszórendszer beállítása. („MD5”, „Shadow password”) 74 1.2.6 Az „apt” program beállítása 74 1.2.7 A „dselect” program 76 A csomagok kiválasztása 78 1.2.8 A feltelepített programok konfigurálása 80 2. FINOMÍTÁS 83 2.1 Első lépések 83 2.2 Az Inetd.conf finomhangolása – a nem biztonságos szolgáltatások letiltása 87 2.3 A levelező démon beállítása 88 A titkosítás beállítása 90 2.3 Másik gép használata a fordításokhoz, miért? 93 2.4 Személyre szabott kernel konfigurálása és fordítása kézzel és a „kernel-package” csomaggal. A „lilo” beállításai. 93 2.3 Az Apache finomhangolása, esetleges újrafordítása hardver és feladatorientáltan 101 Az Apache fordítása 109 2.4 Az SSH konfigurációjának finomhangolása 110 2.6 Szoftveres figyelő („watchdog”) beállítása 112 2.7 E-mail titkosító kulcspárok létrehozása a „gpg” programmal 113 2.8 A rendszernapló (log) és kezelése 115 2.8.1 A „syslog” démon kiválasztása 116 2.8.2 A naplófájlok rotálásának beállítása 116 2.8.3 A Web-szerver naplófájljai 118 2.8.4 A napló automatikus ellenőrzése 118 2.9 A Web-szerver statisztikái 119 2.10 Az „upsd” beállítása 121 2.11 A biztonsági mentés időzítése 121 2.12 A szükséges felhasználók/csoportok létrehozása és a lemezkvóták beállítása 121 2.13 A „/etc/fstab” és az „init script”-ek beállítása 122 2.14 A „tripwire” program beállítása és használata 125 V. EGY GYAKORLATI PÉLDA BEMUTATÁSA 128 VI. A JÖVŐ 130 1. AZ ÚJ KERNEL ÉS A KHTTPD 130 2. AZ ÚJ DEBIAN 133 3. AZ ÚJ APACHE 133 4. PHP4 133 VII. ALTERNATÍVÁT NYÚJTÓ PROGRAMOK A DEBIAN-BAN 135 1. ALTERNATÍVÁK A HTTPD-RE 135 1.1 Roxen 135 1.2 Zope – Z Object Publishing Enviroment 136 1.3 Kisebb szerverek 136 2. ALTERNATÍVÁK A DINAMIKUS HTML-EK GENERÁLÁSÁRA 137 3. ALTERNATÍVÁK SQL SZERVERRE 137 4. ALTERNATÍVÁK A TÁVOLI BEJELENTKEZÉSRE 138 5. ALTERNATÍVÁK AZ EGYÉB PROGRAMOKRA 139 VIII. ÖSSZEGZÉS 140 IRODALOMJEGYZÉK 141 FÜGGELÉK 142 1. A GPL V2 LICENSZ MAGYAR NYELVŰ FORDÍTÁSA 142 2. A BSD LICENSZ 146 3. A DEBIAN „SOCIAL CONTRACT” (TÁRSADALMI SZERZŐDÉS) / DFSG 147 4. DEBIAN INFORMÁCIÓK 149 5. RÖVIDÍTÉSEK, SZAKSZAVAK JEGYZÉKE 149 6. AJÁNLOTT RFC-K 150 7. A LIDS RENDSZER BEÁLLÍTÁSA 151 8. A „GNU FREE DOCUMENTATION LICENSE” 153 MELLÉKLET 158 Ábrajegyzék 1. kép - A Web szerver helye a hálózatban 28 2. kép - Üdvözlőkép 68 3. kép - Speciális indítási paraméterek 68 4. kép - Indítási metódusok 69 5. kép - Merevlemez partícionálás 70 6. kép - A cfdisk program 71 7. kép - Modulok kiválasztása és betöltése a modconf programmal 72 8. kép - Hálózati modulok tallózása 73 9. kép - Az APT program beállítása 75 10. kép - dselect - Főmenü 77 11. kép - dselect - Súgó 78 12. kép - dselect - Csomaglista 79 13. kép - a “snort” program beállítása 82 14. kép - Postfix – igazolás készítése a CA.pl programmal 92 15. kép - make menuconfig 96 16. kép - make xconfig 96 17. kép - rules fájl szerkesztése 110 18. kép - Webalizer statisztika 120 1. táblázat - Az Apache moduljai 27 2. táblázat - Az engedélyezett szolgálatások listája 29 3. táblázat - PHP3 csomagok a Debian-ban 44 4. táblázat - MySQL csomagok a Debian-ban 48 5. táblázat - Partíció-terv 54 6. táblázat - Felhasználók listája 1. 63 7. táblázat - Felhasználók listája 2. 63 8. táblázat - Felhasználók listája 3. 63 9. táblázat - A kernel részei 94 10. táblázat - Autentikációs modulok 107 11. táblázat - PostgreSQL csomagok a Debian-ban 138 12. táblázat - Alternatív csomagok távoli bejelentkezésre a Debian-ban 139 13. táblázat - Shell-ek a Debian-ban 139 Előszó E diplomamunka remélhetőleg nem csupán számomra lesz hasznos, mint életem egy mérföldköve, hanem a magyar számítógép használók / rendszergazdák is hasznos segédeszközként forgathatják majd, amíg (és milyen gyorsan) el nem avul a benne lévő információ. Amióta figyelemmel kísérem a Linux kernelre épülő operációs rendszerek fejlődését, mind az informatika (hardver), mind maga a Linux és a köréje épülő programok óriási fejlődésen mentek keresztül. Persze, ha mindezen fejlődést Richard M. Stallmann szemszögéből vizsgálnám – az ő több évtizedes szakmai tapasztalatai szerint – akkor még hangsúlyosabban érezhetővé válna számomra, hogy exponenciális fejlődés van folyamatban mind a két szektorban . A Linux úgyszólván a semmiből jött. Egy finn egyetemista programozónak nem tetszett az otthoni PC-jén lévő operációs rendszer és elkezdett írni egy rendszermagot saját szórakozására. Később a különböző szabad szoftvereket kezdték el párosítani ezzel a kernellel (mely szintén szabad szoftver). Sikerrel. Ma már széles körben elterjedtek (és egyre jobban elterjednek) ezek a rendszerek, világcégek támogatják fejlődését, miközben kezd jó üzletté válni használata, forgalmazása és kereskedelmi szoftverek e platformra ültetése. Hogy hasznos-e, szükséges-e vagy sem az emberiség szempontjából ez a rohanó fejlődés, azt ilyen távlatokból helyesen még nem szemlélhetjük. Vajon hova vezet ez az őrült tempó és a „Bigger, Better, Faster, More” (nagyobb, jobb, gyorsabb, több) szemlélete, hosszabb távon nem káros-e a társadalomra, az emberiségre? A hatalom azok kezébe kerül, akik lehető leghamarabb birtokolják az információt. A hadviselés is már a kiber-háborúban, az ellenség informatikai eszközeinek megbénításában gondolkozik. Nem tagadható, a XXI. század az információs társadalom kora, s „aki kimarad, lemarad”. Egy biztos: egyre nehezebb befogadni és feldolgozni az egyre nagyobb mennyiségű információt. Ezért remélem, hogy a magyar nyelvű olvasók számára ez a mű hasznos, friss és a gyakorlatban felhasználható információkat nyújthat. Köszönetnyilvánítás Köszönettel tartozom a következő embereknek: ? Szüleimnek, amiért lehetővé tették, hogy tanulhassak. ? Konzulensemnek, Borbély Istvánnak az önzetlen segítségért. ? Lektoraimnak: Bíró Dávidnak, Nagy Attilának, Sári Gábornak és a többieknek. ? A szolnoki Linux-klub tagjainak, főképp: Böszörményi Zoltánnak, Herczeg Ferencnek, Kerekes Gyulának, Sári Gábornak és Takács Sándornak és a szakmai segítségért. ? A magyar Debian fejlesztőknek, kiemelten: Madarász Gergelynek, Szalay Attilának. ? A Security-l levelező lista tagjainak, kiemelten: Magosányi Árpádnak, Mátó Péternek. ? Scheidler Balázsnak a syslog-ng programért. ? Az egész magyar Linux-os közösségnek, az LME -nek, az MLF -nek, a levelezőlistáknak. A Linux-os konferenciák és összejövetelek szervezőinek. ? Tanáraimnak. Továbbá köszönet illeti magukat a programozókat, akik a Debian GNU/Linux 2.2 rendszerben lévő összes programot szabadidejükben fejlesztették, tesztelték, hogy számunkra, a felhasználóknak elérhetővé váljanak. I. Bevezetés Ez a munka, lévén gyakorlati jellegű, nem igazán az üzleti világban és pénzügyekben jártas menedzserekhez szól, de nem is a kezdő számítógép-felhasználókhoz. A dolgozat feltételezi, hogy az olvasó rendelkezik a megfelelő számítástechnikai / informatikai / hálózati alapismeretekkel. Megfelelő információ-háttér hiány esetében javaslom az irodalomjegyzékben lévő megfelelő anyagok átolvasását és a megjelölt Internet-címek felkeresését. Bár maga a munka szakmai szempontból viszonylag szűk rétegnek szól, úgy gondoltam, hogy legyen ezen dolgozatnak két bevezetése. Az egyik szóljon az üzleti, a másik pedig a gyakorlati / technikai beállítottságú embereknek. Az első a döntéshozóknak, a második a megvalósítóknak. A teljes dolgozat inkább a második csoportnak segít, (bár az első csoport tagjai is elolvashatják, ha akad rá idejük) akik ezekkel a felvázolt problémákkal nap mint nap találkoznak és a problémák megoldása az ő hatás- / feladatkörükbe tartozik. Az első csoport tagjainak a második csoport tagjaival való sikeres együttműködés eléréséhez ajánlom olvasásra a II. Alapfogalmak, III. Tervezés, és a V. Egy gyakorlati példa bemutatása című fejezeteket. Mivel a döntéshozónak ott kell lennie a tervezési fázis bizonyos részeinél, szükséges, hogy ismerje az alapfogalmakat és az alapvető problémákat, hogy birtokában legyen az információknak, hogy józanul, részlehajlás és előítéletek nélkül tudjon dönteni. A másik általam kiemelt fejezetben példákat sorolok fel többek között arról is, hogy milyen minimális (értsd: olcsó, meglévő, elérhető) hardverkörnyezetben fut és működőképes a leírt rendszer. Habár a konkrét példa egy kisebb cég feladatmegoldásának példáját feszegeti, ez a rendszer mind oktatási, mind költségvetési intézményekben használható hasonló, (vagy teljesen más) célokra is. Csupán azért használom a kiscég-példát, mert pl. a főiskolákon és az Internet-szolgáltatóknál már széleskörűen használják, nem egy helyen szerver célokra kizárólagosan is. Bevezetés üzleti szempontból Napjaink egyre gyorsuló és élesedő üzleti versenye megkívánja a közepes és kisvállalatok, társaságok megjelenését az Interneten, az elektronikus üzletben. Ennek alapvető feltétele, hogy az adott cég naprakész információkat tegyen közzé magáról és termékeiről, szolgáltatásairól egy minden érdeklődő által elérhető helyen. Megoldás lehet az Internet, amely dinamikus fejlődésével és viszonylag állandó elérhetőségével és rendelkezésre-állásával fellendítheti és felgyorsíthatja a kapcsolatfelvételt a cégek között, a cég-fogyasztó kommunikációt, az esetleges elektronikus úton való értékesítést. Tehát az adott cégnek egy Web-lapot (vagy inkább komplex Web-helyet) kell készíteni (vagy inkább készíttetnie egy erre szakosodott céggel) és azt elérhetővé tenni az Interneten. Ez megoldható úgy is, hogy a cég mások szolgáltatásait igénybe véve „kibérel” egy adott méretű helyet egy már működő, Internetre kapcsolt számítógépen. Ez esetben fizetnie kell a szolgáltatás havidíját, amely a Web-hely méretétől és a generált hálózati forgalomtól egyaránt függ. Nem szeretnék konkrét számokban és szolgáltató cégek ajánlataiban tallózni, hiszen ezek olyan dinamikusan változnak a piaci versenyben, hogy mire e munka elkészül, már rég érvényét veszti az információ. Mindenesetre ez a szolgáltatás számunkra hosszabb távon elég költséges lehet. Kifejezetten rossz megoldás is lehet ez a piaci verseny miatti változások gyorsasága miatt: lehet, hogy az adott szolgáltató tönkremegy, átalakul vagy felvásárolják. Ezek tehát mind kockázati tényezők. Ekkor váltanunk kell, és valószínű, hogy az új cégnél nem úgy fog működni a drágán elkészítetett Web-helyünk, ahogy régen, stb. Egy köztes megoldást is számba vehetünk. A példabeli cégünk vesz egy kiszolgáló számítógépet, melyet az Internetre köttet a szolgáltató számítógépközpontjában. Ekkor viszont nincs teljes kontrollunk a hardverhez és a mentésekhez. Ez a rendszer biztonságát és hitelességét nagyban veszélyeztetheti. A harmadik megoldás esetében a szervergép a cégünk telephelyén van. Ekkor az Internet-kapcsolat díja lesz a fix havi költség, melyet forgalom és / vagy idő után számláz a szolgáltató. Több nagyobb neves hardver / szoftver gyártó cég is kínál lehetőségeket, komplett termékeket erre a problémára / szituációra. Ezek természetesen szintén igen költségesek és nagy kezdeti befektetést igényelnek. Mivel a mi kis cégünknek úgyis csak nyűg ez az Internetes mizéria, ráadásul a munkatársak sem értenek az egészhez megfelelő színvonalon, ezért – ha már van – akkor a cég rendszergazdáját kérik meg egy gazdaságosabb megoldás keresésére. (Hiszen lehet, hogy a hozzá nem értés miatt az egész befektetés csak kidobott pénz lenne.) Sajnos a döntéshozók sokszor azt hiszik, hogy az informatikában is úgy működik a rendszer, mint másutt: minél többet fizet az ember, annál jobb terméket kap cserébe. Amennyiben nincs rendszergazdája és számítógépes hálózata a cégnek, akkor vagy alkalmaz (pl. megbízásos szerződéssel) egy rendszergazdát, vagy inkább az első verziót választja és az egész problémát ráhagyja a szolgáltatóra. A másik fő probléma a tartalom naprakészen tartása. Ez ma már elképzelhetetlen „statikus” Web-lapokkal. Ha pl. a cég az árlistáját is közzé szeretné tenni a potenciális vásárlóknak, amely hetente változik, bizony sokba kerülne minden héten átíratni az oldalt. Mindezt ma már rábízhatjuk a kiszolgálón lévő programokra, melyek egy adatbázisban tárolják az adatokat és abból készítik el a Web-lap adott részeit. A cég munkatársainak semmi mást nem kell tenni, csupán ezeket az adatokat frissíteni, a program a többit elvégzi helyettük. Tehát a cégünknek a harmadik esetben vennie kell egy kiszolgáló gépet, egy Internetes előfizetést, szerver operációs rendszert, Web-szerver programot, amely képes dinamikus Web-lapok generálására adatbázisból, továbbá egy adatbázis-szerver programot és alkalmazni (legalább) egy rendszergazdát. Ha körülnézünk a kereskedelmi hardver / szoftver piacon és a kész megoldások árait megnézzük, kiderül egyhamar, hogy a mi kis cégünk nem bír el egy ilyen hosszú távon megtérülő, nagy beruházást. Ekkor jön a házi barkácsolás és a részenkénti megvásárlás, de ez se mindig költségkímélő, hiszen, még ha össze is szereltetünk pár százezerért egy kiszolgálónak szánt gépet, ha még lenne is pénz az Internet-előfizetésre, már biztos, hogy a szoftvereket nem tudjuk megvenni (jogszerűen használni). Ekkor jön a képbe a szabad szoftver. Mi? – merülhet fel a kérdés a kedves olvasóban. Szabad, bárki által ingyenesen használható, terjeszthető, másolható, nyitott forráskódú és bizonyos feltételek között módosítható szoftver. Tehát a tervezett fejlesztés szoftver oldalának költsége cégünknél 0 Ft. Erre van szükségünk. Ez a könyv azt mutatja be, hogyan lehet egy ilyen kiszolgálót adott hardver és hálózati körülmények esetén szabad szoftverekkel installálni, beállítani, saját igényeinkre szabni, működtetni, karbantartani – mindezeket a biztonság erős kihangsúlyozásával. Vagyis a döntéshozó (felhasználó) a rendszergazdával együtt az egész rendszer hardver (és hálózat), szoftver (felhasználási struktúrával) tervezési folyamatát közösen megbeszélve egy költségkímélő, jól és biztonságosan működő rendszert hozhat létre. Ez mindenképp előnyére válik a cégnek az elektronikus kereskedelembe (és az információs hálózatba) való bekapcsolódáskor. Üzleti szempontból a kitűzött célunk tehát egy olyan Internetes hálószem (Web- kiszolgáló / Web-hely) létrehozása, amely: - Folyamatosan, jól és biztonságosan működik (nem törhetik fel kívülállók, és nem érhetik el / változtathatják meg fontos üzleti adatainkat) - Teljességgel megfelel dinamikusan változó igényeinknek - Teljes értékű és költségkímélő - Nem igényel a felhasználók részéről beavatkozást a rendszergazdai feladatokba - Fejleszthető, korszerű szoftverekkel van ellátva, melyek támogatása / fejlesztése nem fog megszűnni - Gyorsan megvalósítható és könnyen karbantartható - Már bizonyított, stabil rendszer, mely széleskörűen használt - Önmagát felügyeli és értesíti a rendszergazdát hiba esetén - Található hozzá rendszergazda, vagy a rendszergazda a rendszert hamar megtanulhatja - A TCO (Total Cost of Ownership, a termék teljes birtoklási ideje alatti költség) nem haladja meg egy kereskedelmi termék TCO-ját. Hogy ezek a feltételek igazak-e teljességében, az természetesen vitatható, hiszen egy folyamatosan fejlesztés alatt lévő, megújuló rendszerről van szó. Mivel világszerte fejlesztik, főleg angol nyelvű a rendszer, bár vannak már honosított részei. Természetesen a felhasználó (a Web-hely látogatója) számára ezek a dolgok láthatatlanok maradnak. Ha megfelelően biztonságos és „önműködő” rendszert építünk ki, akkor a TCO is lecsökkenhet: „a gép forog, az alkotó pihen” (Madách), nem kell a rendszerhez hozzányúlni, ezért tényleges költség nincsen, csupán áramot kapjon a gép. Bevezetés gyakorlati szempontból Akik egy kicsit is járatosak az informatikában - és akiknek ez a munka jobbára szól – biztosan hallottak már a Linux-ról. Nekik nem nagyon kell elmagyaráznom, hogy ez mit fed, de azért sokakban keverednek a fogalmak. A Linux maga „csak” egy rendszermag (kernel), melyre egy főként GNU programokat használó operációs rendszer épül. Mivel a Linux POSIX kompatibilis (vagyis egy szabványos UN*X klón) ezért sok kereskedelmi UN*X-on (ezek hálózati operációs rendszerek) futó kereskedelmi szoftver újrafordítás után futtatható (portolható) reá. Napjainkban a Linux/GNU (továbbiakban Linux) páros már bizonyított: 1998-ról 1999-re 212%-os növekedést értek el a kereskedelmi Linux disztribúciók (terjesztések) eladásában. Ebben az adatban persze nincs benne a nagyobbik rész, hiszen ezeknek a rendszereknek egy része ingyenesen letölthető az Internetről, továbbá vannak nem kereskedelmi, Linux kernelre alapuló disztribúciók, pl. a Debian GNU/Linux, melyet a Debian projekt keretében fejlesztenek több mint ötszázan (csak a disztribúciót, a különböző szoftvereket több ezren.) világszerte szabadidejükben, ingyen és önkéntesen. Kérdés az, hogy ezek az „otthon barkácsolt” szoftverek: - Megfelelőek, stabilak, biztonságosak-e? - Mennyire korszerűek, naprakészek, újszerűek? - Mennyire vannak kitéve a vírusoknak? - Mennyire könnyen feltörhetők ezek a rendszerek? - Mennyire szabványosak, következetes-e a tervezésük? - Mennyire kompatibilisek más szoftverekkel? Bár sokan nem hiszik el, a Linux rendszerek nagy része (megfelelő rendszergazda mellett) sokkal biztonságosabb egyes kommerciális szoftvermegoldásoknál (többek között azért, mert a rendszergazdának teljes körű hatalma lehet a szoftver felett a forráskódon keresztül). A Debian disztribúció pedig régóta arról ismert, hogy az egyik legbiztonságosabb Linux terjesztés, kifejezetten az Internetre szánva. Ha egy cég az Internettől elzárt belső hálózatára vásárolna (pl. adatbázis-szervernek) egy gépet, akkor lehet, hogy jobb lenne egy kereskedelmi Linux terjesztést választania, mert a nagy üzleti adatbázis rendszerek érthető okokból ezeket jobban támogatják. A mi esetünkben azonban másra van szüksége kisvállalatunknak. Az Internet veszélyei miatt számunkra első a biztonság. A Debian-nak mindig van egy stabil („stable”), lezárt változata, amelyet az éles rendszerekbe szánnak. Ebbe csak akkor jelennek meg programfrissítések, ha valami biztonsági hiba derül ki, de ekkor nagyon gyorsan. A Linux terjesztések közül általában a Debian-ban jelennek meg először a hibajavítások. Amint elegendő javítás összegyűlt, a stabil változatot újra kiadják. Pl. a „Slink” változat 6 kiadást ért meg. Az első az „r0”, az utolsó az „r5” volt. A másik változatot fejlesztőknek szánják („unstable”), melyek általában nem állják meg a helyüket éles munkában, bár vannak olyan türelmetlen rendszergazdák, akik mindig a legújabb programokat szeretik használni – helytelenül. Ebben a változatban szinte naponta frissülnek a programcsomagok és itt általában a különböző programok fejlesztői változatai találhatóak. Ez lehetőséget ad a széleskörű tesztelésre és a gyorsabb hibajavításokra. Amint egy idő elteltével már eléggé stabillá válik a rendszer, akkor „kódfagyasztás” állapot ("frozen") következik be. Ekkor 1-2 hónapig „figyelik” a rendszert, és ha minden felmerült programhibát kiküszöböltek, akkor a változat „stabillá” válik, és CD-ROM-on is terjeszthető lesz. Ezután új fejlesztői változatba kezdenek a programozók. Mindegyik változat elérhető az Interneten FTP és több más protokoll segítségével az ftp://ftp.debian.org-ról, vagy a hivatalos (és az egyéb nem hivatalos) magyar ftp-tükörről: ftp://ftp.hu.debian.org. A programok futtatható és forráskód formában is letölthetőek. A Debian-t rendszergazdák és rendszerprogramozók fejlesztik – főleg rendszergazdák számára. Viszonylag nem olyan könnyen és gyorsan telepíthető, megtanulható azok számára, akik még nem ismerik a UN*X-os szemléletet. (E munka többek között ezért is íródott, hogy a kezdeti lépésekhez adjon segítséget.) Viszont cserébe teljesen személyre szabható és darabokra szedhető a rendszer. A Linux / UN*X rendszerek általában teljesen immúnisak a vírusokkal szemben. Ez következik a rendszer többfelhasználós mivoltából és az alapoktól való viszonylag biztonságos tervezésből. Természetesen Linux alá is lehet kártevő programokat írni, de ezek inkább a programférgek és a trójai falovak kategóriájába tartoznak. Az ilyen rendszerek elleni támadások nagy része inkább DoS (Denial of Service = szolgáltatás megbénítása) jellegű. Sok szabad szoftver épp azért készült el az RFC (Request for Comments, Internet szabványokat leíró dokumentumok sorozata) leírások alapján, mert néhány üzleti jellegű szoftvercég ezeken (vagy ezek saját önkényesen módosított változatán) alapulva írta meg a szoftvereit. (Vagy esetleg később „de facto” szabványokká váltak bizonyos protokollok. Kitűnő példa erre a SaMBa, mely a NetBIOS/SMB hálózati protokoll UN*X-os szabad forráskódú implementációja, mely az adott RFC-k alapján készült). A szabad szoftverek (értsd: szabad forráskódú) legnagyobb részét éppen nem önkényesen, hanem minden szabványt és leírást, már működő programokat figyelembe véve kezdték el megtervezni és lekódolni, hogy minél több más rendszerrel kompatibilis és használható legyen. Ezáltal egy Linux rendszer elég heterogén hálózati környezetben is kellően használható. Rendszergazdai szempontból a kitűzött célunk tehát a következő: - Megismerkedni a szükséges alapfogalmakkal, metódusokkal - A döntéshozókkal együttműködve a felhasználási igény szerint megtervezni a rendszert - Kiválasztani, megvásárolni és összeszerelni a hardvert, kiválasztani a megfelelő Internet-szolgáltatót, sávszélességet, előfizetni - Beszerezni, telepíteni és konfigurálni a szoftvert - Saját hardverhez és felhasználási igényhez optimalizálni a beállításokat - A távoli karbantartás lehetőségének biztosítása - A rendszer biztonságossá tétele a betörésekkel szemben - A rendszer maximális rendelkezésre állásának biztosítása hardver és szoftver eszközökkel (biztonsági mentés, szünetmentes tápegység) - A rendszer állapotának intelligens monitorozása, igénybevételi statisztikák készíttetése szoftverekkel A gyakorlatiasabb fejezetekben feltételezem, hogy az olvasó a rendszergazdai szerepkört tölti be és ebből a szemszögből vizsgálom a problémákat. A dolgozat első részében kisebb-nagyobb részletességgel kitérek az alapvető szabad- szoftver fogalmakra, többek között a GNU és más projektekre, azok filozófiájára, célkitűzéseire. Továbbá néhány hasznos és alapvető hálózat / Web specifikus struktúrára is, mint a fizikai elrendezés és a karbantartó személyzet felépítése. A második fejezet a Tervezési fázissal foglalkozik: mit kell és mit érdemes létrehozni, mire van / lesz igény, mi a felhasználás területe, annak mérete, stb. Bemutatok egy mintapéldát, mely alapján a későbbi fejezetekben a megvalósítás történni fog. Továbbá foglalkozok a biztonság tervezésével is, hiszen ebben a szakaszban sok, később kiütköző probléma kiküszöbölhető. Megfelelően kidolgozott tervezési fázis után a megvalósításhoz és a teszteléshez sokkal kisebb idő kell, mint az in medias res típusú megvalósításoknál. A megvalósítással foglalkozó fejezetben először a szoftver installálásának menetén vezetem végig az olvasót, majd az utólagos és lehetséges finomhangolásokról lesz szó. Tudni kell, hogy az installálás után a rendszer már teljességében működőképes, a finomhangolásra csupán a teljesítmény és a biztonság fokozásának érdekében van/lehet szükség. A következő fejezetben a rendszer egy gyakorlatban már alkalmazott példáját vázolom röviden. A fent tárgyalt rendszerkomponensek jövőjét is górcső alá veszem egy rövidebb fejezet erejéig, vajon a mostani és tervezett fejlesztések mit ígérnek számunkra. Végül a Debian GNU/Linux rendszerben található egyéb, az adott célra alternatívát nyújtó szoftverek rövid bemutatását célzom meg. II. Alapfogalmak Ahhoz, hogy munkához tudjunk látni, szükségünk van néhány UN*X-os és Linux-os és operációs rendszerekhez kapcsolódó alapfogalomra. Ehhez ad segítséget Kósa Attila írása is. Mivel ez a kérdés is igen terjedelmes kifejtést követelne, ezért elhagyom és inkább a téma fővonalára összpontosítok, feltételezve, hogy az olvasó már rendelkezik ezekkel az alapfogalmakkal. Kezdőknek ajánlom a [14] [15] [30] könyveket, és a sysadmin-guide csomagot , mely az LDP részeként írt Kezdő Rendszeradminisztrátorok Kézikönyve. A TCP/IP működésével kapcsolatban olvassuk el Scheidler Balázs írását. Ajánlom továbbá a függelékben szereplő szómagyarázatok áttekintését. Fontos kiemelnem, hogy legtöbb hiba és félreértés abból ered, hogy a kezdő rendszergazda más, nem UN*X alapú rendszerekhez szokva nem tudja, hogy itt a sorrend a következő: 1. Olvasd el a dokumentációt (/usr/doc könyvtár alatt lévő fájlok, manuál oldalak) 2. Ha még ezután sem érted, akkor olvasd el a FAQ-kat 3. Ha ez se segít, látogasd meg az adott program Web-helyét és kutass új dokumentációkért. 4. Ha már végképp nem értesz valamit, akkor kérdezz meg profikat a helyi Linux-os, és / vagy az adott programhoz tartozó saját levelezőlistákon. 5. Csak miután a témát már megértetted, akkor kezdj neki a program beállításának / éles használatának. A legtöbb hiba abból ered, hogy az emberek feltelepítik a programokat és aztán azt hiszik, hogy eddigi nem UN*X-os tapasztalataik alapján tudni is fogják kezelni. Ezután pánikba esnek, hiszen valami nem úgy megy, ahogy kellene, a rendszer pedig már élesbe van állítva. Ekkor gyorsan írnak egy haragos hangvételű levelet egy listára, hogy ez meg az nem megy. Persze általában – a dokumentáció ismeretében – a megoldás triviális. (Ezért sokszor válaszképp, csak annyit kap, hogy „RTFM” .) Summa summarum, a szerver operációs rendszereket szakembereknek készítették és nem átlagos felhasználóknak. A kezdő legyen türelmes. Pár napon belül úgyis rájön mennyi mindent nem tud még a rendszeréről. 1. A GNU projekt, a GPL licensz A GNU projekt (és a Free Software Foundation) szabad szoftvereket fejlesztő programozókat fog össze. Ezek az emberek általában nem főállásban, csupán „hobbiból” írják meg ezeket a programokat. Azért teszik ezt, mert megunták, hogy a kereskedelmi programokat készítő cégektől függjenek. A GNU a szabadság ideáját közvetíti az emberek felé. Bár sokan kritizálták őket, „[…] ezek a programozók saját programjaikat továbbra is szabadon közreadták, várták mások módosító javaslatait, esetleg programrészeit, ezek közül a jobbakat beépítették az új verziókba, és így tökéletesítették programjukat. Ez többnyire jobb minőségű szoftverekhez vezetett, mint a nagy cégek korlátozott programozói gárdáinak termékei, amelyek erősen üzleti megfontolások szerint készülnek. A sok különálló elszánt programozót szerette volna Richard M. Stallman összefogni az 1980-as évek első felében azzal, hogy megalapította a »Free Software Foundation«-t (FSF, Szabad Szoftver Alapítvány), és elindította a »GNU project«-et. Előbbinek elsődleges célja, hogy alapítványként adományokat fogadhat el, amelyekből gépparkot tarthat fenn és fizethet a programozóknak, utóbbi magát a programozási munkát hivatott koordinálni. A GNU project alapvető célja, hogy egy teljesen szabadterjesztésű programokból álló, UNIX-szerű rendszert hozzon össze.” A GNU projekt célja tehát egy szabad forráskódú és ingyenes UN*X klón kifejlesztése. Mindez az Internet széleskörű elterjedésével lehetővé vált, ui. nem kell már se a székház, se a számítógépek, mert mindenki otthonról, a világ minden tájáról dolgozhat és segítheti a GNU projektet. Sok ember bár hivatalosan nem tagja a szervezetnek, de GNU/GPL licensz alatt adja ki a programjait, ezzel is támogatva a szabad szoftver közösséget. Hogy mi is az a UN*X? - kérdezheti az olvasó, hiszen egyre azt emlegetjük, hogy a Linux az egy UN*X klón. Nos, ez általában véve kereskedelmi hálózati operációs rendszert jelent és nagyon sok fajtája van. Mivel magának a UN*X-nak is igen terjedelmes történelme van, ezért ennek részletezését mellőzöm. Ezen a címen találhat az olvasó egy jó magyar nyelvű összefoglalót. A lényeg az, hogy annak idején a UN*X-ból nőtt ki az Internet. A UN*X-klónok a kezdetektől (és az Internet kezdetétől) fogva hálózati operációs rendszerek, tehát kifejezetten erre a célra és nem egyedülálló személyi számítógépekre lettek kifejlesztve. Ennélfogva, ezek többfelhasználós, multitaszkos rendszerek. Bár a legősibb változatoknál még szóba sem került a biztonság - hiszen nem is volt még kiber-bűnőzés, a mai változatok nagy részét már a tervezés során a biztonságra hangolják. Maga a GNU filozófiájának kifejtése is meghaladja e munka kereteit. Viszont ezen a címen magyarul olvashatjuk Richard M. Stallman gondolatait és érveit, a GNU kiáltványt. A függelékben olvasható a GNU GPL v2 licensz magyar nyelvű változata. További információkat szerezhetünk a http://www.gnu.org, http://www.fsf.org címeken. Az is felmerülhet az olvasóban, hogy ezek az otthon barkácsolt szoftverek mennyire megbízhatóak. Erre a kérdésre Linus Torvalds így válaszolt: ,,[...] valamikor régen megjelent egy tanulságos beszámoló egy számítógépes terhelési próbáról, amely abból állt, hogy véletlenszerű, rossz adatokat tápláltak rendszerekbe, és figyelték, mi történik velük, hány száll el közülük. Kiderült, hogy az ingyenes segédprogramok sokkal ellenállóbbak, mint a fejlesztők termékei. Hogy miért? Mert sokkal több ember dolgozott rajtuk: sokkal többen odafigyeltek arra, hogy ellenállóbbak legyenek.''[32] A másik ellenérv az szokott lenni, hogy ami ingyen van, ahhoz nincs támogatás, nincs semmire garancia, nincs akkor segítség se. Egy GNU/Linux szoftvereket tanuló felhasználó megnyilatkozása: „Találtam magyar nyelvű levelezési listákat, ahol számomra teljesen meglepő módon, időt és fáradságot nem kímélve, segítenek a kezdő felhasználóknak. Nagyon szokatlan volt először ez a segítőkészség, és még azóta is számtalanszor tapasztalom azt a remek érzést, hogy milyen jó segítséget kapni és adni. És mindezt anélkül, hogy tudnának rólad bármit is. Szinte hihetetlen! Ez az önzetlen segítőkészség áthatja az egész Linux mozgalmat.” Gyakori ellenérv még a dokumentáció milyensége. Minden szoftverhez részletes dokumentáció tartozik, néhány programhoz a Web-helyüket (vagy egy részét) is mellékelik. Sok dokumentáció fellelhető SGML, HTML, PDF, PS, DVI, TXT, stb. formátumokban is, melyek közül sok (pl. PDF, PS) nagyon szépen, jó minőségben kinyomtatható és máris kész a papíralapú leírás. Természetesen vannak magyar fordítások is, de ezek inkább az ún. "manual page"-ek fordításai és a HOGYAN (HOWTO) fájlok esetében igaz. A magyar fordítás értelemszerűen mindig elmaradhat az angol változattól. Ezért mindig az angol változat az érvényes. A fordítók a Web-helyek fordításának is nekiláttak, pl. www.debian.hu cím alatt a www.debian.org fordítását találhatjuk. Összegezve, véleményem szerint a jövő a szabad szoftvereké, s közöttük legjobban is a GPL licenszű programoké. Igaz sok tekintetben még nem versenyezhetnek a kereskedelmi programokkal, (pl. kezdő-felhasználók támogatása). Sokan olyan dolgokat várnak el ezektől a programozóktól, ami nem az ő feladatuk. Ezeket a programokat nem komplett számítástechnikai analfabétáknak írják, de a nagymamára ugyan ki bízna szervertelepítést. Otthoni felhasználásra még nem olyan széles körben használható, mint egyes kereskedelmi termékek (abban az esetben, pl., ha kezdőkről van szó). 2. A Linux kernel A Linux egy szabadon terjeszthető (GPL) UN*X-klón rendszermag. A következő processzorokon / architektúrákon fut jelenleg (valamilyen módon és nem minden altípuson): ARM, AS/400, AP+, Apollo, DEC Alpha, MIPS, CE, ELKS (8086, 80286), mk86, MC68000 (PalmPilot), NeXT, PowerPC, SH*, PA-RISC, SGI, SUN *sparc, VAX, x86, stb. A Linux-ot a kézi zsebgépektől a nagy szekrénynyi (Mainframe) gépekig szinte mindenre átültették, persze mi itt kis hazánkban anyagi és piaci okokból nem férünk hozzá sok ilyen hardverhez, így ez csupán érdekesség lehet számunkra. A Linux igazából csak egy rendszermag, mely megfelel a POSIX szabvány előírásainak. Sokan összekeverik a Linux-ot a reá épülő komplett terjesztésekkel, mint amilyen pl. a Debian is. A többi szoftver, mely a kernel segítségével futtatható akár lehet kereskedelmi licenszelésű is. Azt, hogy milyen részei vannak egy operációs rendszernek, hogy mi a rendszermag feladata, egy – ebbe a témában alaposan elmélyedő szakkönyv elolvasásával tudható meg. Ilyen pl. a [4]. Végeredményben, a könyvben én is sokszor fogok a terjesztésekre „Linux” jelzővel hivatkozni, egyszerűsítésképpen. A Linux-ot Linus Torvalds kezdte el fejleszteni 1990-ben, egy operációs rendszerről szóló egyetemi évfolyamdolgozatával. Népszerűségét a GPL licensz biztosítja. „Magát a Linux operációs rendszert a GNU General Public Licence védi, ugyanaz a szerzői jogi copyright, amit a Free Software Foundation fejlesztett ki és alkalmaz. Ez az engedély bárkinek lehetővé teszi, hogy terjessze vagy módosítsa a szoftvert (díjmentesen, haszon nélkül), amíg a módosításai és bővítései szintén szabadon terjeszthetők. A »szabad szoftver« kifejezés a teljes szabadságra, nemcsak a jogdíjmentességre vonatkozik.” [1. p. 7. ] „A Linux legfontosabb aspektusa, hogy maguk a felhasználók fejlesztik és bővítik a maguk igényeik szerint” [1. p. 5, Matt Welsh ] A Debian GNU/Linux 2.2 (Potato) kiadása a Linux 2.2.x-es kernelsorozatával van ellátva. A Linux kernel verziószáma a következőképpen néz ki: az első szám a Version, a második a Patchlevel, a harmadik a Sublevel és a negyedik az Extraversion (ha van). Ha a második szám páros, akkor ez egy stabil kernel, ha páratlan, akkor fejlesztői kernellel állunk szemben. Éles rendszerben csak stabil kernelt szabad használni, jelenleg a 2.2.x-est. Ez most a Potato-ban 2.2.16 . A fejlesztői (2.3.x) változat gyorsan változik, és sokszor okoz kavarodásokat, esetleg rendszerösszeomlást is. Mire ez a mű az olvasó kezébe kerül, lehet, hogy már a 2.4-es sorozat vélhetőleg stabil lesz és a Debian Woody nevű fejlesztői változata tartalmazni fogja. A 2.4.0-testX változatok még nem számítanak stabilnak. Néhány technikai jellegű információ „A Linux soha nem volt 16 bites, az első perctől fogva 32 bitesnek tervezte szülőapja - Linus Torvalds. (Szülőanyjaként az Internetet szokták emlegetni.) Valódi többfeladatos működésű, egyidejűleg több felhasználót kiszolgálni képes operációs rendszer. […] A Linux (az egyéb PC-s Unix-okhoz hasonlóan) nem használja a BIOS-t, mert a BIOS rutinjai úgy vannak megírva, hogy csak azután adják vissza a vezérlést, miután az I/O művelet befejeződött. A fájlrendszer maximális mérete 2 TB, a maximális fájlméret 2 GB (a hivatalos kernelek még nem tudnak ennél nagyobb fájlt kezelni, de már készült patch, ami 16 TB-os fájlméretet is tud kezelni). 16 processzort támogat Intel platformon. A Linux nem csak Intel platformon képes futni, van más architektúrára írott változata is (SPARC, 64 bites SPARC, Alpha, PowerPC, MIPS, stb.). Természetesen más architektúrán is támogatja több processzor használatát, és ki is használja az általuk nyújtott teljesítményt. A rendszer minimális hardverigénye: 80386SX 16-os processzor, 1 MB RAM és floppymeghajtó - merevlemez nélkül! Természetesen ilyen konfiguráción éppen csak működik a rendszer. Létezik Linux 3Com PalmPilot-ra is. A nagy méretekre is egy példa: SGI 36 processzorral, 5 GB RAM-mal, és egy másik Sparc alapú Fujitsu AP 1000 nevű számítógép 128 processzorral. Látható, hogy nagyon széles a skála, amin a Linux elfut, és nagyszerű teljesítményt produkál. Nincsen semmilyen korlátozás a felhasználók számát tekintve, tehát maximum a hardver határolhatja be a kiszolgált felhasználók számát. A hálózati protokollok közül támogatja például az IPv6-ot. A feladatütemezője prioritásos ütemezést használ, így különböző prioritásokat rendelhetünk a futtatandó programjainkhoz. A kernelmodulok dinamikusan betölthetők és kivehetők a memóriából […] A 2000. év problémája Linux alatt nem jelent gondot. Ugyanis, mint a legtöbb UNIX, a Linux is 1970. január 1-je óta számolja az időt másodpercekben. Ezt az értéket egy 4 bájtos, előjeles számban tárolja, ami csak 2038-ban fog túlcsordulni . A 64 bites Merced processzorra való áttérésről azt nyilatkozta Linus Torvalds, utalva az Intel nyitására a Linux felé, hogy »[...] ma már nem hiszem, hogy a Merced komoly kérdés volna. «[32]” Igazság szerint a Linux kernelről már könyveket írtak és ráadásul a fejlődésével egyre többet tud – egyre több információ szerezhető meg róla. A mélyebb érdeklődésűek figyelmébe ajánlom a linux/Documentation könyvtárat, mely a forráskódban található és a legfrissebb információkat tartalmazza a kernel különböző részeiről. Számunkra a kernel inkább csak addig érdekes, amíg beállítjuk, lefordítjuk és futtatjuk. Utána már akkor jó, ha „észre se vesszük”, hogy létezik. Elérhetőség: A Linux kernel forráskódja a Linkek-ben szereplő helyekről tölthető le. Pl.: ftp://ftp.hu.kernel.org/pub/linux/kernel/v2.2/linux-2.2.17.tar.gz Ez egy igen nagy méretű (kb. 15 MB) fájl. Lefordításához többek között szükség van a binutils, (tar, gzip), egcs/gcc csomagokra. Hogy ne kelljen minden újabb kernelverzió kiadásakor letölteni ekkora méretű fájlt, ezért elég csak a frissítést letöltenünk. Pl.: ftp://ftp.hu.kernel.org/pub/linux/kernel/v2.2/patch-2.2.18.gz A linux kernel részeit és lefordítását bővebben később tárgyalom. Nemzetközi változat Az USA-ban még érvényben lévő exportszabályozások miatt a titkosító algoritmusokat tartalmazó kódok egy külön európai gépen találhatóak. Ha szükség van, pl. fájl- rendszer szintű titkosításra, akkor töltsük le a kernelverziónkhoz megfelelő foltot („patch”-et ). A törvényi szabályozások azonban 2000-ben megváltoztak, így nemsokára már a titkosítás is belekerül a kernel nagy csomagjába. Linkek: http://kernelnotes.org linux kernel információk, a hivatalos kernel honlap http://edge.kernelnotes.org a fejlesztői kernel honlapja http://netfilter.kernelnotes.org a csomagszűrő modulok honlapja ftp://ftp.hu.kernel.org a linux kernel hivatalos hazai ftp tükre ftp://ftp.kerneli.org a linux kernel nemzetközi változatának ftp szervere 3. A Debian projekt A Debian projekt célja egy olyan szabad szoftverekre épülő teljesen ingyenes terjesztés (vagy inkább kernelfüggetlen operációs rendszer) kifejlesztése, amely nem kereskedelmi célú és független irányító testülettel rendelkezik. Ez a rendszer nem tartalmaz semmilyen kizárólagosan kereskedelmi szoftvert. Jelenleg egy stabil (Debian GNU/Linux) és két fejlesztői változata (Debian GNU/Hurd, Debian GNU/FreeBSD ) van a kernelek szempontjából. Mit jelent ez a szó? „Mivel sokan kérdezték: a »Debian«-t »debián«-nak kell ejteni. A név a Debian alkotójának, Ian Murdocknak és feleségének, Debrának a nevéből származik.” „Mi az a Debian? A Debian szabad vagy nyílt forráskódú számítógépes operációs rendszer. Az operációs rendszer alapvető programok összessége, amelyek a számítógép működéséhez szükségesek. Az operációs rendszer magja a kernel. A kernel a számítógép sarkalatos programja, amely az alapfeladatokat végzi, és más programokat indít. A Debian kernelfüggetlen. Jelenleg a Linux- kernelt használja, de készülőben van a Debian más kernelekhez is, például Hurd-ra.” A Debian GNU/Linux a következő rendszereken fut: Intel x86 („i386”), Alpha („alpha”), ARM („arm”), Motorola 68k („m68k”), MIPS, PA-RISC, Motorola/IBM PowerPC („powerpc”), Sun SPARC („sparc”), Sun UltraSPARC („sparc64”), Mire jó egy terjesztés? Az alapprobléma az, hogy a szabad szoftverek főleg forráskód formában hozzáférhetőek az Interneten. Ahhoz, hogy összeállítsuk a rendszerünket, le kellene fordítani az összes programot és felinstallálni a célgépre. Ez rengeteg munkát igényelne. Ezért találták ki a terjesztéseket. Ezek olyan lefordított és előrecsomagolt programokkal rendelkeznek, melyek már előre be vannak konfigurálva egy adott működőképes és általános felhasználói profilra. Ezeket a beállításokat természetesen meg kell változtatnunk a saját igényeink szerint. Fontos továbbá az is, hogy a terjesztések rendelkeznek ún. installáló / telepítő programokkal, indítólemezekkel, stb. Ezek nélkül körülményes lenne a rendszer telepítése. Tehát a terjesztés (disztribúció) az egy keret a szabad szoftverek tömegéhez, mely egy egységbe kovácsolja azokat, miután azok egysége már nyugodtan nevezhető operációs rendszernek. Minden terjesztésnek kell, hogy legyen egy ún. csomagkezelő programja, mely az előre lefordított bináris programokat tömörített formában tartalmazó csomagokat menedzseli. A Debian és leszármazottainak csomagkezelője a dpkg, a Redhat és leszármazottainak programját pedig rpm-nek nevezik. A Debian-ban is telepíthetünk .rpm formátumú csomagokat, de ajánlatos az alien nevű programmal átkonvertálni .deb formátumra. (A Debian csomagok .deb, a Redhat-osok .rpm kiterjesztésűek) Véleményem szerint a Debian csomagkezelője sokkal fejlettebb és jobban kidolgozott rendszer, mint bármelyik másik. Néhány fontos dolog a csomagkezelőről: „A dpkg a Debian GNU/Linux csomagjainak installálására, eltávolítására, építésére és menedzselésére alkalmas csomagkezelő. Kérhetünk információkat a csomagokról. Egy csomagnak több státusza lehet: - installed - feltelepített és konfigurált csomag, - half-installed - a csomag telepítése el lett kezdve, de valami miatt nincs tökéletesen feltelepítve, - not-installed - a csomag nincs feltelepítve a rendszerre, - unpacked - a csomag fel van telepítve, de nincs konfigurálva, - half-configured - a csomag fel van telepítve, de nincs teljesen konfigurálva, - config-files - a csomag már nincs a rendszeren, csak a konfigurációs fájljai vannak meg. Egy csomag kiválasztásának három státusza lehet: - install - kiválasztva telepítésre, - deinstall - kiválasztva törlésre, - purge - minden része kiválasztva törlésre, még a konfigurációs fájlok is. (Ugyanis a ,,deinstall'' nem távolítja el a csomaghoz tartozó konfigurációs fájlokat.) Egy csomagnak két jelzője lehet: - hold - nem változtat a csomagkezelő az így megjelölt csomag állapotán, - reinst-required - a csomag meg van sérülve, de nincs eltávolítva, ezért szükséges újratelepíteni.” További fontos információk: „Hol találok Debian-os infókat, csomaglistát, ilyesmiket? A Debian website a http://www.debian.org címen található, de érdemes a legfelső sorban látható tükrözések közül a legközelebbit választani (ez az Internet kapcsolatodtól függ). A csomagok között a http://www.debian.org/packages.html címen lehet keresgélni, akár a csomag nevét a felső ablakban (a teljes nevet meg kell adni!) vagy a csomag leírásában lehet az alsóban keresni. Az aktuális hibalista csomagokra, sürgősségre vagy más szempontok szerint lebontva a http://www.debian.org/Bugs/ címen érhető el. Az angol nyelvű Debian FAQ a http://www.debian.org/cgi-bin/fom címen érhető el. A Debian-os levelezőlistákban a http://www.debian.org/Lists-Archives/ címen lehet keresgélni . A teljes disztribúció az alábbi helyeken érhető el: […] ftp://ftp.kfki.hu/pub/linux/debian/ , illetve ha valami probléma van akkor természetesen az ftp.debian.org címen. ” A Debian GNU/Linux különböző kiadásait verziószámokkal és kódnevekkel jelölik. Itt a magyar Debian FAQ-ból idézek: „Mik ezek a furcsa nevek: bo? hamm? ...? Ezek a kódnevei a különböző Debian verzióknak, amíg dolgoznak rajtuk. Kiadáskor mindegyik kap egy verziószámot, de a kódnevek általában az igazi rajongók között tovább élnek (a könyvtárnevekről nem is beszélve). A jelenlegi verziók a következők: buzz v1.1 rex v1.2 bo v1.3 hamm v2.0 slink v2.1 potato v2.2 woody v2.3 és sid ez az új architektúrák (sparc, arm, ...) gyűjtőhelye Bruce Perens, a Debian ex-vezéralakja a Pixarnál (http://www.pixar.com/) dolgozik, akik a Toy Story című számítógéppel készült animációs filmet készítették. A jelenlegi kódnevek a Toy Story szereplői...” A Debian csomagkezelője kiegészül az apt nevű programmal, mely a folyamatos frissítést és a csomagok letöltését teszi lehetővé pl. az interneten lévő ftp helyekről. Egy Debian tükör a következőképpen néz ki: a /debian könyvtár alatt találhatóak a Debian-nal kapcsolatos anyagok. Az ez alatt lévő dists könyvtár tartalmazza a Debian terjesztés különböző változatait. Pl. a potato alkönyvtár alatt a Potato változat csomagjai vannak. Itt három részre szakad licensz szerint: main (minden amit a DFSG szerint szabadnak minősül), a contrib („olyan ingyenes csomagok, amik függhetnek nem ingyenes csomagoktól” ) és a non-free („valami miatt nem ingyenes alkalmazások, általában egyéni felhasználók számára ezek is ingyenesek”). Platform szerint megosztva vannak a bináris, és egy külön könyvtárban a forrás csomagok. Pl. binary-i386 alatt vannak az Intel processzorokra szánt változatok. Ezek alatt alszekciók találhatóak. Pl. a mail könyvtárban a levelezéssel kapcsolatos programcsomagok vannak elhelyezve. Tehát: ftp.hu.debian.org/debian/dists/potato/main/binary-i386/mail Ezzel nekünk általában nem kell törődnünk különösebben, az apt program megtalálja egy Packages.gz nevű fájllista szerint, hogy milyen csomagok találhatóak az adott ftp tükrön. Ebből eldöntheti, hogy van-e csomagfrissítés a mi gépünkön lévő állapothoz képest. Ez a lista pontosan tartalmazza a programcsomagok relatív elhelyezkedését. Nagyon fontos a Debian terjesztésben a dselect program. Ez egy menüs csomagtelepítő és karbantartó szoftver. Először megkérdezi azt, hogy milyen forrásból kívánjuk a csomaglistát és a csomagokat megszerezni. Ez lehet ftp, kompakt lemez, NFS és a kedvelt apt program is. Én mindenképp az apt használatát javaslom. Persze ha van kompakt lemezünk és az kellően friss, akkor azt is alkalmazhatjuk. (Általában a kompakt lemezeket telepítéskor használjuk, frissítésnél pedig az ftp tükröt, bár lehet telepíteni közvetlenül az ftp-ről is.) Ha ez megtörtént, akkor megszerzi a csomaglistát. Ennek birtokában már nekikezdhetünk válogatni. Bizony, ha kezdő Linux-os felhasználók vagyunk, akkor fájhat most a fejünk, ugyanis majd 4500 programcsomag közül kell kiválasztanunk a számunkra szükségeseket. Ez akár órákig is eltarthat, ha minden csomag rövid leírását át akarjuk tanulmányozni. 4. Az Apache projekt, az Apache moduljai Az Apache projekt (http://www.apache.org) célja egy olyan Web-szerver program létrehozása és karbantartása, fejlesztése, amely megfelel a gyorsan változó Internetnek, elég biztonságos és üzleti célra is megfelelő és szabadon használható. Az Apache-ot, mivel a régi NCSA httpd szerveréből készült, BSD licensz alatt terjesztik . A projektet rendszergazdák kezdték el amikor Rob McCool, az NCSA szerverének írója kilépett az NCSA-tól, és a szoftver nem fejlődött tovább. Az Apache projekt koordinálását az Apache Group végzi. Néhány vezető és több száz fejlesztő van e mögött a szoftver mögött. Jelenleg a stabil változata 1.3.12, a fejlesztői pedig a 2.0a számot viseli. A Potato-ban jelenleg az 1.3.9-es verzió van és valószínűleg ez is marad meg, mivel ez már egy bevált, tesztelt verzió. A Woody változatban valamelyik újabb verzió lesz. Hacsak nincs valami különösebb okunk rá (pl. hibajavítás, teljesítménygondok) ne fordítsunk újabbat. Az Apache Web-szerver szinte minden UN*X platformra lefordítható, futtatható, de egyéb kommerciális platformokon is működik . Az SSL bővítést Ben Laurie készítette az OpenSSL programkönyvtár segítségével. Érdemes végigtanulmányozni a /usr/doc/apache-common és a /usr/doc/apache-ssl könyvtárakban lévő dokumentációkat és szerzői jogi információkat, példafájlokat. Néhány alapvető fogalom: Virtualhost: Ugyanazon a gépen több virtuális Web-szerver is futhat. Pl. a www.borgyar.hu és a www.szormegyar.hu ugyanazon a szerveren van, de kintről két különböző helynek látszik. Nagyon egyszerű egy gépen akár több száz virtuális szervert futtatni. Csupán a konfigurációs állományokat kell megfelelően behangolni. Minden egyes szerver teljesen különböző formában is beállítható, azok egymástól elég különbözően is viselkedhetnek. A virtuális Web-szerverek lehetnek külön-külön IP címen (IPVirtualHosting), vagy egy azonos IP címen is (NameVirtualHosting) egy azonos gépen. Tehát elég akár csak 1 db statikus IP címet vásárolnunk és több domént bejegyeztetni. Ha minden doménnek külön IP címet veszünk, nagy forgalom esetén később szétválaszthatjuk külön gépre is a helyeket. SSL: Secure Socket Layer, vagyis Biztonságos Csatorna Réteg. Ennek a segítségével a kliens böngészője és a Web-szerver között titkosított formában fog folyni az adatcsere, ha mindkettő képes erre és úgy van beállítva. Ez nagyon hasznos érzékeny adatok cseréjekor, hiszen egyébként minden vonal nagyon könnyen lehallgatható. Főleg személyes és hitelkártya adatok cseréjekor szokták alkalmazni. Én javaslom ennek minél szélesebb körű alkalmazását a személyiségi jogok védelmében, hiszen az ember könnyen kiismerhető arról, hogy milyen tartalmakat látogat. A titkosításnak a böngésző szempontjából 56-bites és 128-bites kóderősségű változata van. (Az USA exportszabályozásai miatt). A szerver oldalon szükség van egy úgynevezett igazolásra (Certificate) is, mellyel a szerver igazolja magát a kliens felé, hogy ő kicsoda-micsoda. Egy ilyen igazolást készíthetünk magunknak is, de ezt a böngésző gyanúsan fogja fogadni. Az igazolást általában egy kereskedelmi cégtől lehet vásárolni, mely egy adott időre szól. Ez a cég igazolja, hogy az igazolásunk valós adatokat tükröz és nem egy cracker banda DNS spoof-olt ál-szerverére lépett be a felhasználó. Persze ezek a „Signer” cégek főként külföldiek és viszonylag sokba is kerül egy ilyen igazolás, ezért, ha szükséges, készíthetünk magunknak egyet. (Részletesen később.) user authentication: vagyis a felhasználó azonosítása. Ha vannak olyan oldalak, ahová csak bizonyos felhasználók léphetnek be, akkor oda általában valamilyen autentikáció szükséges. Ilyen lehet pl. egy név / jelszó bekérés, de ettől sokkal komplexebb formák is vannak. Azonosítás történhet LDAP protokoll vagy adatbázis segítségével is. Modulok: Nagyon hasznos funkció, hogy csak azokat a részeket kérjük betölteni a szerverprogram indulásakor (a konfigurációs fájl szerint), melyek számunkra szükségesek. Így rengeteg erőforrást takaríthatunk meg. Mivel a rendszer szabványos API -val rendelkezik, külső beszállítóktól is szerezhetünk be speciális modulokat (akár kereskedelmi termékeket is), melyeket a rendszerbe beilleszthetünk. “A kernelhez hasonlóan, az Apache is képes megfelelően elkészített külső file-t beültetni, mely a saját kódjába épül a memóriában. Az itteni modulok annyiban eltérnek a kernelben használatosaktól, hogy csak induláskor tölthetőek be, futás közben nem. “ [19. p. 87] Ekkor persze a gépet nem kell újraindítani, csupán a Web-szerver programot. Általában elég összetett kérdés, hogy melyik modul hol van, mi a funkciója, és hogyan illeszthető bele a rendszerbe. Mindenesetre a főág moduljai megtalálhatóak a http://modules.apache.org –on. Pl. a mod_rewrite modul az oldalak kódjában lévő URL-ek átírásával foglalkozik. Ez bár elsőre viszonylag bonyolult dolognak tűnik, megfelelő dokumentációval rendelkezik. Ez a probléma főleg a webgazda (lásd később) feladatába tartozik. A lényeg az, hogy ha megváltoztatjuk a Web hely „fizikai” felépítését, az oldalakban szereplő hivatkozásokat is mind meg kellene változtatni, ami igen nagy munka lehet. Ezért találták ki ezt a kitűnő segédeszközt. A modulok listáját és funkcióját mutatja az 1. táblázat - Az Apache moduljai mod_access Gép (IP) alapú hozzáférés-szabályozás mod_actions Fájltípus / metódus alapú script indítás mod_alias Álnevek és átirányítások mod_asis Az „.asis” fájl kezelő mod_auth Felhasználó azonosítás szöveg fájlokkal mod_auth_anon ftp stílusú névtelen felhasználó azonosítás mod_auth_db felhasználó azonosítás a Berkeley-féle DB (adatbázis) fájlokkal mod_auth_dbm felhasználó azonosítás DBM (adatbázis) fájlokkal mod_auth_digest MD5 felhasználó azonosítás mod_autoindex Automatikus könyvtár listázás mod_cern_meta HTTP fejléc metafájlok támogatása mod_cgi CGI script-ek meghívása mod_digest MD5 felhasználó azonosítás mod_dir Alapszintű könyvtárkezelés mod_env Környezeti változók átadása CGI script-eknek mod_example API demonstráció mod_expires Fejlécek erőforrásokhoz (meddig érvényes egy oldal) mod_headers Tetszőleges HTTP fejlécek beépítése mod_imap Kép-térkép fájlkezelő mod_include Szerveroldalon előállított objektumok mod_info Szerver beállítási információk mod_log_agent A „User Agent”-ek naplózása (a felhasználó milyen böngészőt használ) mod_log_config Testre szabható naplózó mod_log_referer „referer” naplózó (honnan lett a kliens erre az oldalra irányítva) mod_mime Objektumtípus megállapítása fájlkiterjesztésből mod_mime_magic Objektumtípus megállapítása tartalomból mod_mmap_static Fájlok térképének elkészítése a memóriába a gyorsabb kiszolgálás érdekében mod_negotiation Tartalom „tárgyalás” mod_proxy HTTP gyorsítótár mod_rewrite Profi URL-ből fájlnévre konvertáló mod_setenvif Környezeti változók beállítása kliens információk alapján mod_so Futás közbeni modul-betöltés támogatása (fejlesztés alatt!) mod_speling Automatikus hibajavítás félregépelt URL-ekben mod_status a szerver állapotának megjelenítése Web-lapként (autentikáció szükséges) mod_userdir A felhasználók könyvtárait kezeli (listázás, letöltés) mod_unique_id egységes kérés azonosító generálása minden lekéréshez mod_usertrack Felhasználó-követés sütik (cookies) segítségével mod_vhost_alias dinamikusan konfigurálható virtuális szerver-támogatás 1. táblázat - Az Apache moduljai Ha újra szeretnénk fordítani az Apache-ot (pl. hogy a rendszerünkhöz optimalizáljuk), ajánlom, hogy a Debian előrecsomagolt forrását használjuk, mert ekkor egyből, a Debian segédeszközeivel .deb csomagba fordíthatjuk azt. Ez nagyban megkönnyíti a későbbi használatot. Hogy miért pont az Apache-ot választottam? Azért, mert: - a világ Internetes Web-szervereinek 60%-án ez fut - széles körben elterjedt, ismert, bevált, tesztelt - ezt ismerik azok, akiktől segítséget kérhetünk (pl. levelező listák) - nagy teljesítményű, rengeteg funkcióval és lehetőséggel rendelkezik - ezután is támogatott, fejlesztett lesz még sokáig - ingyenes, szabadon felhasználható, nyitott forráskódú - elég biztonságos, ha jól be van állítva - nagyon sok platformon fut, ezért egységesen használható - nagymértékben személyre szabható - nagy, neves gyártók által is támogatott 5. A Web-szerver helye a hálózatban (Internet/intranet) A publikus Web-szerverünket az un. demilitarizált, semleges zónában kell elhelyeznünk. Ezt az 1. kép - A Web szerver helye a hálózatban mutatja. 1. kép - A Web szerver helye a hálózatban „Egy tipikus profit szférába tartozó hálózat védekezésénél szigorúan konfigurált tűzfal rendszereket alkalmaznak, amelyek vagy gondosan kontrollálják-monitorozzák a kifelé irányuló hálózati forgalmat, vagy gyakran teljesen megakadályozzák azt. Az Internet felé nyújtott publikus szolgáltatásaikat olyan rendszerekről nyújtják, amelyek egy tűzfal mögött, de még a második tűzfallal védett belső hálózatukon kívül helyezkednek el (semleges zóna). Ha lehetővé tesznek interaktív belépést, akkor azt csak bizonyos hálózatokról és/vagy csak szigorú ellenőrzés után engedik meg.” A lényeg az, hogy az Internet felé nyújtott publikus szolgáltatásokat sose keverjük össze a csak belső használatra kialakított szolgáltatásokkal, azok ne legyenek közös gépen és alhálózaton. Fontos beállítani a Web-szerveren is a csomagszűrést (pl. ipchains ), hogy ez ne legyen egy ugródeszka a belső hálózat felé. Az Internet és a Web-szerver közötti szűrőn (lehet ez egy Linux-os tűzfal is PC-n.) tiltsunk le először minden forgalmat, amely befele irányul, majd engedélyezzük a következőket a Web-szerver felé (--destination IP címmel megadva!): port szolgáltatás irány miért? 80 443 22 25 http (Web) https (Web) ssh smtp (mail) kintről befelé ezt szolgáltatjuk ezt szolgáltatjuk távoli menedzsment kapjunk leveleket 2. táblázat - Az engedélyezett szolgálatások listája A Web-szerverünkön más szolgáltatást az Internet felé nem kívánunk nyújtani. Az SMTP-re is csak azért van szükségünk, hogy a rendszergazda megkapja a rendszernaplókat és esetleg a rendszergazdák egymás között levelezhessenek. Figyelnünk kell azonban arra is, hogy így a Web-szerverről nem fogunk tudni elérni semmit (pl. nem tudunk ftp-zni, ssh-zni), mivel a kapcsolódási portok (is) le vannak tiltva. Ezért hozzá kell még adnunk néhány olyan szabályt is, amely ezt lehetővé teszi. Meg kell akadályoznunk továbbá azt, hogy olyan csomagok átjussanak a szűrőn, mely külső helyről érkező csomag fejlécében, a forrás (source) IP cím a mi belső hálózati szegmensünk valamely címét tartalmazza. Vagyis belső címről érkező csomagnak tünteti fel magát, de olyan interfészről érkezik, amely biztosan a külső hálózathoz tartozik. Ha Linux-os tűzfalunk van így kell eljárni: (Az ipchains program részletes bemutatására nem térek ki. Ennek használatát olvassuk el a dokumentációból. A HOWTO 7. fejezetében részletesen tárgyalva van egy – a mi példánkhoz hasonló – hálózat tűzfalának beállítása. Az ipchains-el kapcsolatban ajánlom továbbá ezt a két cikket [22], [23]. ) Először is, állítsuk be az alapviselkedést tiltóra: ipchains –P input DENY # minden olyan csomag amely nem felel meg egyetlen ipchains –P output DENY # további szabálynak sem, ne legyen átengedve ipchains –P forward DENY # se be, se ki, se továbbítva Minden olyan csomagot, amely a loopback interfésznek fenntartott címről jön, de más interfészről, tiltsunk le, mert ez IP átejtés (spoofing). Több hálózati kártya esetén tegyük meg ezeket az egyes interfészekkel is, vagyis pl. az Internethez tartozó interfészen ne jöhessen be olyan csomag, melynek forráscíme a belső hálózatunkhoz tartozik. ipchains -A input -j DENY -l -s 127.0.0.0/8 -i ! lo # a $MYNET/MASK helyett mindenki írja be a saját alhálózatát és annak maszkját. ipchains -A input -j DENY -l -s $MYNET/MASK -i ! eth0 # stb. Itt megengedjük, hogy az Internetről látható legyen a Web-szerverünk: # az $INETIF helyett mindenki írja be azt a hálózati interfészt, mely az Internetre # kapcsolódik ipchains -A input -p all –i $INETIF -j ACCEPT -d „a mi Web-szerverünk IP címe” 80 Ha egy adott IP címről vagy tartományról nem akarjuk fogadni a kéréseket, akkor azokat tiltsuk le. (Pl. innen betörési kísérletek voltak már.) ipchains -A input -p all -j DENY -s „akármi” -d „a mi Web-szerverünk IP címe” 80 Minden egyéb próbálkozást tiltsunk le, hogy senki se futtathasson a belső hálón Web- szervert úgy, hogy azt kívülről látni lehessen. ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d $MYNET/MASK 80 Ugyanezt tegyük meg a 443-as porton is. ipchains -A input -p all –i $INETIF -j ACCEPT -d „mi Web-szerverünk IP címe” 443 ipchains -A input -p all -j DENY -s „akármi” -d „a mi Web-szerverünk IP címe” 443 ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d $MYNET/MASK 443 Hasonlóképpen járhatunk el a 22-es és a 25-ös portok esetén is. Ha van másik levelező, vagy menedzselni való szerverünk, akkor adjunk meg megengedő szabályokat azokra is. Újra felhívom a figyelmet arra, hogy ekkor csak a Web-szerver 22, 25, 80, 443-as portjai érhetőek el, ezért egyrészt nem lehet a Web-szerverről kapcsolódni más gépekre és a DMZ-ben lévő más gépekre se, ezért azokat az IP-ket és portokat külön engedélyezni kell. Ha azt akarjuk, hogy vissza is kapjunk adatokat, ha belülről kérünk kifelé, tegyük ezt: ipchains –A input –p tcp –j REJECT –y –i $INETIF –d „saját alháló v. gépcím” ipchains –A input –p tcp –j ACCEPT –i $INETIF –d „saját alháló v. gépcím” Ekkor a kívülről jövő külön nem felsorolt kapcsolatkérések el lesznek utasítva egy „célállomás nem elérhető” válasszal. Amint látszik, ez csak a TCP protokollt igénylő szolgáltatások esetében igaz. Az UDP-s szolgáltatásoknál nincs engedély. Meg kell engednünk viszont az Internet és a belső szegmensek között az 53,123-as UDP portokat, mert ezek nélkül az egyes szolgáltatások nem működhetnek helyesen. ipchains –A input –p udp –j ACCEPT –i $INETIF –d „saját alháló v. gépcím” 53 ipchains –A input –p udp –j ACCEPT –i $INETIF –d „saját alháló v. gépcím” 123 Az itt felsorolt szabályok csak töredékei az összes tűzfalon beállítandó szabályoknak. Célszerűbb a különböző zónáknak saját szabályláncot létrehozni. Erről bővebben a dokumentációban. Figyelnünk kell továbbá az ICMP forgalmat is. Javasolt az „echo-reply, echo-request, time-exceeded, destination-unreachable, source-quench” típusú csomagok átengedése az összes többinek pedig a tiltása a tűzfalon. ipchains -A input -p icmp -i $INETIF -j ACCEPT -d $MYNET/MASK --icmp-type echo-reply ipchains -A input -p icmp -i $INETIF -j ACCEPT -d $MYNET/MASK --icmp-type echo-request ipchains -A input -p icmp -i $INETIF -j ACCEPT -d $MYNET/MASK --icmp-type time- exceeded ipchains -A input -p icmp -i $INETIF -j ACCEPT -d $MYNET/MASK --icmp-type destination- unreachable ipchains -A input -p icmp -i $INETIF -j ACCEPT -d $MYNET/MASK --icmp-type source- quench Fontos továbbá az is, hogy a DMZ és a belső hálózat közötti tűzfalon csak azokat a portokat engedélyezzük átmenni, amelyek a cég munkájához szükségesek lehetnek. „Csak azokat a szolgáltatásokat engedélyezzük, amelyről tudjuk, hogy használni akarjuk, és azt is, hogy milyen módon. A tűzfal és a belső gépek számára engedélyezett TCP/IP szolgáltatások mások lehetnek, de a belső gépeken is csak az okvetlenül szükséges dolgokat engedélyezzük. Kényelmi szolgáltatásokat semmiképpen. A belső gépek számára a tűzfalon át proxy szerverek segítségével biztosítunk kijutást. Belső hálónk forgalmát védjük az Internet felől jövő fenyegetésektől, legyen legalább egy szűrőnk.”[12. p. 198.] Tehát a belső hálóról az Internet felé induló kéréseket is szűrjük meg. Átengedhetjük a Web (80, 8080, 443), az ftp (20,21), mail (smtp, imap, esetleg pop3), stb. munkát ténylegesen segítő portokat. Ha szükség van rá, akkor engedélyezzük az ntp (123/tcp/udp) protokollt, mely az idő beállításához használható. Ezt csak egy vagy két IP címről engedélyezzük, mert ez is támadási felület lehet, hiszen a naplófájlok emiatt össze-vissza írhatják az időpontokat. Az összes többi portot tiltsuk le a tűzfalon. (Az irc (6666,6667,6668), napster, és a különböző hálózati játékok portjait mindenképp tiltsuk le. Tiltsuk le továbbá a nem biztonságos szolgáltatások portjait, mint pl. a telnet (23).) Azokat a tartalmakat, melyeket átengedünk, csak a tűzfalon engedjük ki, proxy (vagy transzparens proxy) segítségével. Enélkül az egész tűzfal semmit sem ér. A Web gyorsítására használjunk Web-caching-proxy-t (pl. Squid). Mindenképp olvassuk el a Firewall-Howto-t. Ajánlom továbbá a következő szakkönyveket: [16], [17], [18]. Két hasznos cikk a TCP működéséről és a hálózati biztonságról Paul Russel-től (az ipchains program írójától) [24], [25]. Elolvashatjuk ezenfelül a Firewall Checklist-et is. 6. A Web-személyzet felépítése A mai világban már annyira specializálódtak a feladatok, hogy egy ember nem képes átlátni egy ilyen komplex rendszert. Ezért van szükség a feladatok szétosztására. Gyakorlatilag három rendszergazdára lenne szükség: Egy általános hardver/szoftver, egy adatbázis és egy Web-szerver rendszergazdára. (Sok esetben már a hardver és a szoftver gazdája is különválhat nagyobb mennyiségű gép esetén.) A Web-személyzet ideális esetben a következő pozíciókból áll: 1. Rendszergazda: összeszereli és hálózatba köti a számítógépet, telepíti és karbantartja a szoftvereket, Az Ő feladata a biztonságos üzemeltetés és a biztonsági másolatok készítése is. Ő csak a Web-szerver és az adatbázis-szerver rendszergazdáknak ad belépési jogot a gépre. A „közönséges” felhasználóknak ideális esetben ezek a személyek adnak feladatuk szerinti hozzáférési jogot. 2. Adatbázis-rendszergazda: ő felügyeli az adatbázis szerver programot, ő hozza létre az adatbázis-felhasználókat (akik feltölthetik, módosíthatják az adatbázis tartalmát), ad nekik jogosultságokat az adatbázis elérését illetően. Hiba esetén a rendszergazdával együtt kell dolgoznia a helyreállítás érdekében. 3. Web-tervező: kialakítja a Web-hely arculatát, struktúráját, továbbá összefogja a fejlesztő-stáb munkáját. Ő a fő koordinátor, a többi taggal ő tartja a kapcsolatot. 4. Grafikus: a Web-tervező által kigondolt arculathoz grafikai terveket, munkákat és a konkrét fényképeket, képobjektumokat készíti el. 5. Web-programozó: az előbbi személyek által megtervezett dinamikus oldalakat programozza le valamilyen (pl. PHP3) script nyelven és azt a Web-tervező rendelkezésére bocsátja. 6. „Titkárnő”: ő viszi fel (gépeli be) a statikus szövegeket, melyeket a Web-tervező rendelkezésére bocsát. Felesleges egy képzett embert ilyesmire „kényszeríteni”. Továbbá ő lehet az, aki feltölti az adatbázist friss adatokkal, pl. termék és árlista. Neki, lehet, hogy egyáltalán nem kell felhasználói számlát létrehoznunk (Esetleg e- mail-t). 7. Webmester/webgazda (ált. a Web-szerver program rendszergazdája): elhelyezi és karbantartja a Web-lapokat, az ő feladata a website belső fájlstruktúrájának megtervezése, az e-mail-ek fogadása és megválaszolása (erre a témára vonatkozóan) esetleg továbbítása a megfelelő személyeknek. Amint láthatjuk ezt nem sok kisvállalat engedheti meg magának. Ha már van egy rendszergazdánk (ekkor ő veszi át az összes rendszergazdai szerepkört), meg egy titkárnőnk, akkor a többit egy külsős cégre bízhatjuk. Ekkor meg kell bíznunk a külsős cég alkalmazottaiban, mert azok a kész és a frissített anyagokat mindig fel kell hogy töltsék szerverünkre, tehát ide valamilyen hozzáférésük kell, hogy legyen. Ez persze nagymértékben csökkenti szerverünk védettségét a külső behatolás ellen, hiszen nem tudhatjuk, mennyire vigyáznak az ottani kollegák jelszavaikra. A másik lehetőség, hogy a friss anyagokat elküldik a rendszergazdának és az személyesen tartja karban a dolgokat. A mi rendszergazdánk végzi a dolgát, és a titkárnőnk pedig frissítheti az adatbázist (pl. az árlistát) akár egy lekérdezős dinamikus Web-oldalon keresztül is. 7. Web-proxy fogalma és helye a hálózatban A Web-caching-proxy egy olyan gyorsítótár-szerver, amely a Web-szerverekről lekért objektumokat tárolja. Ha egy új kérés érkezik, azt először a proxy kapja meg. Ha már megvan a tárolójában az adott objektum, és még érvényes annak a tartalma, akkor azt küldi el a kérőnek, és nem továbbítja a kérést a Web-szervernek. Főleg akkor hasznos, ha a belső hálózatunkat engedjük ki kliensként az Internetre. Ezt mindenképp egy jól beállított proxy-n keresztül érdemes megtenni, hogy a kisebb sávszélességű vonal terhelését csökkentsük. A Linux rendszereken a squid nevű GPL-es Web-proxy szoftver a legelterjedtebb. A mi esetünkben a Web-proxy más jelentést kap. Ha nagyon nagy forgalmat bonyolít a szerverünk akkor a Web-szerver és az Internet kijárat közé beékelhetünk egy Web- proxy-t. Ez főleg a statikus tartalom esetében nagy terhet vesz le a szerverünk vállairól. Ekkor persze a külvilág a szervert nem láthatja, csak a proxy-t, vagyis transzparens- proxy-zást kell beállítanunk. A kliens azt hiszi a Web-szerverrel beszélget, közben csupán a proxy-val kommunikál. Az Apache is rendelkezik egy beépített proxy modullal. Ez persze nem olyan hatékony, mint egy külön gép squid-et futtatva, de bizonyos esetekben és terhelési szinteken (talán) hasznos lehet. 8. Biztonsági alapok (hardver, szoftver) A biztonság nagyon fontos, összetett és vitatható kérdés. Napjainkban egyre jobban előtérbe kerülnek a biztonsági problémák. A lényeg: nincs abszolút biztonság. Legfőbb ellenségünk maga a felhasználó (és a rendszergazda) lustasága. Ő az aki nem vigyáz kellően a jelszavára, ő az aki egy cetlire írja azt és ráragasztja a monitorjára, mert mindig elfelejti, stb. Egy hírhedt amerikai cracker elfogása után később elmesélte, hogy pofonegyszerű volt bejutnia a kormányzati rendszerekbe. Rendszergazdának adta ki magát és felhívott közalkalmazottakat, titkárnőket mindenféle ürüggyel, hogy azok adják ki jelszavaikat. Így nem is kellett szó szerint feltörnie a rendszereket, mert a kiskapu nyitva állt, onnan már szinte gyerekjáték volt a hiányos és átgondolatlanul megszervezett biztonsági kapukon átjutnia, hogy megszerezze a szükséges információkat. 8.1 Általános irányelvek Az első pont tehát olyan rendszert tervezni, ahol a felhasználók a lehető legkevesebb kárt tehetik, vagyis a lehető legkevesebb, csakis az adott munkakörükhöz szükséges jogokkal szabad rendelkezniük. A külső támadás lehetséges okai: - A cégünk imázsának, jóhírének lerombolása - Üzleti információk megszerzése, kémkedés a konkurenciának - Unaloműző rosszindulatú károkozás - Ugródeszka keresése más gépek feltöréséhez A külső támadások fajtái: - Portscan: az összes lehetséges portot végig próbálgatva ezzel mérik fel a gépen futó szolgáltatásokat és, hogy azokat milyen programok nyújtják. Ezután el lehet dönteni, hogy a rendszer melyik része ellen kezdjenek támadást. - Sniffing: Ha valakinek a belső (pl. Ethernet) hálózaton gépe van (vagy feltesz egy gépet) rendszergazdai jogosultságokkal (az egy-felhasználós rendszerek ilyenek), akkor ún. promiscuous módba kapcsolhatja a hálózati kártyáját. Ekkor minden csomagot, amely kikerül arra a fizikai hálózatra, a kártya elfogad magának is. Egy hallgatózó programmal felszerelkezve az illető megszerezhet bármilyen kódolatlan információt, amely „átfolyik” a kártyán. - DoS: Itt a cél a szolgáltatás(ok) teljes lelassítása, megakasztása. Megfelelő (pl. TCP) kvótákkal szinte minden szolgáltatást meg lehet védeni ez ellen valamilyen mértékben. - DDoS (Distributed Denial of Service): Az előbbi támadásnak egy olyan fajtája, amikor sok „ártatlan” számítógépre valamely módon egy támadóprogramot telepítenek a tulajdonos engedélye nélkül, melyekről később egy időpontban indul „szétosztott” támadás a célgép ellen. - Spoofing: DNS vagy IP cím átfedése. Pl. ha egy kliens lekérdez egy Web-oldalt, akkor egy ál név-szervertől nem a valódi Web-szerver címét kapja vissza, hanem előbb a károkozó gépét. Innen persze átirányítódhat a kérés az eredeti szerverre, de közben akár hitelkártyaszámokat is lejegyezhet a cracker programja. Az IP átejtés esetében valaki úgy manipulálja a hálózatot, hogy a célgép IP címét ő veszi fel, és annak nevében kommunikál. A belső támadások fajtái: - Buffer overflow: egyes programok programozási hibáját kihasználva veremtúlcsordulást okoznak, majd egy rootshell-t kérnek le az IP (Instruction Pointer) segítségével. Ekkor rendszergazdai jogosultságokat szerezhetnek, ha a megtámadott program (pl. sendmail) rendszergazdai jogkörökkel futott. Ez ellen a programok biztonsági frissítésével lehet védekezni, és ha lehet alkalmazzunk „chroot jail ”-t és felhasználóként futtassuk a démont. - known temp file attack: „E támadási módszer lényege: a behatoló megfigyeli, hogy a hibás program milyen néven hívja meg a .tmp file-jait, és abban a könyvtárban, ahol azokat eltárolja létrehoz egy ugyanolyan nevű szimbolikus linket, mint az egyik .tmp file. Ez arra a file-ra mutat, amit át akar írni.”[2] - Exploit-ok: olyan előre gyártott programocskák, melyek minden különösebb szakértelem nélkül rendszergazdai jogköröket adhatnak az újdonsült cracker-nek. Ezek az Internetről le is tölthetőek. http://rootshell.org Ilyen például a rootkit programcsomag, amely Linux alá is létezik. Ez trójai programokat tartalmaz, melyekkel kicserélve az eredetieket állandó kiskapu biztosítható a betörő számára. Tehát a következő fontos elveket kell betartanunk: - Fizikai védelem: a szervergép egy külön lévő elzárt, és jól zárható szobában üzemeljen, mely helyiségben (esetleg) légkondicionáló berendezés is van (~21 Celsius fok). A szobához csak az illetékeseknek legyen kulcsa. Takarító nem járhat a szobában, mert véletlenül kihúzhatja a vezetéket, stb. Továbbá fontos szempont a tűzvédelmi berendezés (pl. porral oltó), ráccsal védett ablakok, lehetőleg emeleti helyiség, stb. A mentés lemezeket egy másik helyiségben, esetleg épületben őrizni tűzkár miatt, jól elzárva, hogy illetéktelen személyek ne férjenek hozzá, stb. A helyiségben tilos a dohányzás, kávézás, stb. - A gép BIOS-át úgy állítsuk be, hogy jelszóval legyen védve, csak a merevlemezről lehessen indítani, a felesleges hardvereket (floppy, soros, párhuzamos portok) tiltsuk le, ha nem használjuk őket. - Hivatalos biztonsági szabályzat befoglalása a cég működési szabályzatába. A szabályok hatókörének és az egyes pozíciókon lévő alkalmazottak felelősségének megállapítása, stb. - Hálózati tervezés: a hálózatot már a tervezéskor úgy kell kialakítani, hogy véletlenül se keveredjenek egy fizikai vagy logikai alhálózatra az egymással nem kapcsolatos szegmensek, kliensek. - Minimum elv: csak azon programok / szolgáltatások fussanak és legyenek rajta a gépeken, amelyek ténylegesen és indokoltan használva lesznek. - Mindent tilos, kivéve, amit szabad elv: a tűzfalon és más biztonsági szabályzó szűrőkön mindent letiltunk, és egyesével adjuk meg azokat a szabályokat, amelyek a „szabad” kategóriába tartoznak. - A jelszó rendelet: minden jelszó legalább 8 karakteres, tartalmaz számokat és egyéb ASCII karaktereket és nem szótári szó. Nem tartalmaz semmi személyhez köthetőt, pl. valaki születésnapját, stb. A jelszavak 30 naponként változzanak meg, stb. (Használjunk MD5 kódolású jelszavakat, lásd később). Használjunk shadow password funkciót. - Email titkosítás: amikor csak lehet, a szerveren lévő felhasználók kódolt formában levelezzenek és a rendszer is legyen képes kódolt levéltovábbításra. Ehhez már megvannak a szükséges programok: felhasználói oldalon a gpg , vagy a pgp , szerver oldalon a TLS-képes levéltovábbító, mint pl. a postfix-tls. Továbbá a rendszer eseménynaplóját is titkosított formában ajánlott elküldeni a rendszergazdának, hogy ez se legyen lehallgatható. - Őrizetlen terminál: A felhasználók ne hagyják őrizetlenül a számítógépüket bekapcsolt és bejelentkezett állapotban, mert bárki leülhet mellé és kárt tehet. Használjuk a vlock vagy xlock programokat a terminál lezárására. - Csak az kapjon shell-t akinek arra tényleg szüksége van. Akinek a munkájához nem szükséges a UN*X shell használata, pl. csak a böngészőjén keresztül módosítja az adatokat, annak ne legyen shell-je. - Nem biztonságos szolgáltatások (pl. telnet, ftp) tiltása és helyettük kódolt változataik beállítása (ssh, scp) - Lehetőséget adni a Web-szerver látogatójának a titkosított adatcserére (SSL) Érzékeny fájlokat / könyvtárakat azonosításhoz kötni. - Folyamatos mentés: adott időközönként teljes vagy részleges mentést kell végrehajtani a rendszerről, hogy hiba esetén gyorsan visszaállítható legyen az utolsó működő állapot. Egy mentési szabályzatot is ki kell dolgozni: milyen időközönként milyen mértékű mentést kell végezni, visszamenőleg hány állapotot kell megtartani, stb. - Rendszernaplók nyomon-követése: a rendszergazdának figyelnie kell a rendszer eseményeit, és ha valami kompromittálásra utaló jelet találna, akkor azonnal cselekednie kell. - Alapos ok nélkül semmilyen programot újabb verziójúra cserélni nem szabad. Egy jól működő rendszerhez hozzányúlni nem szabad. Csakis a biztonsági problémák miatt szabad új verziókat feltenni. Ha mégis lecserélni szándékoznánk valamit, csak már egy előre letesztelt, kipróbált változatot tegyünk fel. Tudniillik „a pokolba vezető út is jószándékkal van kikövezve”. Mi jószándékkal feltelepítjük a legfrissebb verziót, amely lehet, hogy teljesen másképp fog viselkedni, és akkor állhatunk neki tanulmányozni a hiba okát. Mindazonáltal, nem szabadna ~2 évnél idősebb szoftvert használni. Van néhány olyan hiba, amit a fejlesztők kijavítanak, de nem publikálnak. Ésszel kövessük mindig a legfrissebb stabil verziókat. - A „nagy” levelező szerveren sose legyen Web-szerver és vica versa. Általában a sendmail program a legérzékenyebb a betörésekre és rajta keresztül elérhető lehet a Web-szerver. Miután az OpenBSD csapat elkezdte auditálni a kódját, sokat javult a biztonsága, de azért Én az életemet nem bíznám rá. A levelezőszerveren használjunk egy sokkal biztonságosabb alternatívát, mint amilyen például a postfix vagy a qmail. - Ne futtassunk FTP szervert a Web-szerveren. Szintén sérülékeny pont a buffer overflow szempontjából. Lehetőleg a legfrissebb, legstabilabb szervert használjuk. Ha lehet, ne legyen Anonymous (névtelen) ftp, de ha mégis, akkor vigyázzunk a jelszófájlra. Ne engedjünk meg olyan könyvtárat, amelyben Anonymous olvashat és írhat is. - A Web-szerver démon sose fusson root jogokkal, kapcsoljuk ki a könyvtárlistázást, és ne kövesse a szimbolikus linkeket. (Ezekről részletesen később) Ha a rengeteg jelszót nem tudjuk megjegyezni, ne használjunk ugyanolyan jelszókat több helyen, ne írjuk le őket papírra, se kódolatlan fájlba. Használjuk pl. a gpasman programot. (http://gpasman.nl.linux.org) Ez a program tipikusan a sok jelszó menedzselését segíti. A jelszavakat kódolt formában tárolja. A Woody-ban már benne lesz. Töltsük le a rendszergazdai gépre (vagy fordítsuk le forrásból). Többen mindenféle kézigépekbe írják a jelszavaikat. Fontos, hogy ez esetben egyrészt kódoljuk az eszközben az információt lopás esetére, másrészt pedig tartsunk róla biztonsági másolatot, ha a készülék elromolna (ellopják, elvész), ne kelljen mindent előröl kezdeni. Sokan viszont az javasolják, hogy semmiféle jelszót ne tároljunk hálózatra csatlakoztatott gépen, hiszen valamiképpen ekkor úgyis hozzá lehet jutni. Persze ekkor meg kellene jegyezni az összes jelszót, amire kevés ember képes. Fontos feladat a rendszergazdának a rendszer folyamatos frissítése a biztonsági javításokkal, a biztonsággal foglalkozó oldalak látogatása. Pl. http://www.linuxsecurity.com, http://www.debian.org/security, http://www.cert.org. Olvassuk el a Compromise FAQ-t (http://www.iss.net), a Linux Security- HOWTO-t http://metalab.unc.edu/pub/Linux/docs/HOWTO/Security-HOWTO A tűzfal és a kernel tűzfalfunkcióját szabályzó ipchains program HOGYAN-ját ugyanitt találjuk Firewall- HOWTO és Ipchains-HOWTO néven. Az utóbbi magyar fordítása: http://www..rkcs.hu/linux/index2.html A http://www.faqs.org/rfcs/rfc2196.html címen egy biztonságpolitikai szabályzatot találunk RFC-be foglalva. Továbbá érdemes áttekinteni az 1244 és 1281-es számú RFC-ket is, melyek szintén ezzel a témával foglalkoznak. Végül egy valós életbeli példa található az ftp://coast.cs.purdue.edu/pub/doc/policy címen. Ajánlom továbbá az olvasó figyelmébe a következő könyvet: [12] 8.2 A Linux kernel biztonságát növelő projektek A Linux-hoz létezik több biztonsági „folt” is. Az egyik ilyen érdekes és hasznos kód a http://www..openwall.com/linux könyvtárában található. Jelenleg csak a 2.0 és 2.2-es sorozatú kerneleket támogatják. Sok biztonsági javítás kerül később innen a hivatalos kernelforrásba. A következők ellen nyújt bizonyos mértékű (nem 100%-os) védelmet: ? Nem futtatható felhasználói veremterület védelme a puffer túlcsordulásoktól. ? Szimbolikus link és FIFO korlátozás a /tmp könyvtárban ? /proc könyvtár információinak védelme a felhasználói kutakodástól és információgyűjtésről (csak az adott csoportba tartozó emberek tekinthetik meg a fájlok tartalmát) ? A fájl leírótáblák (File descriptors: 0,1,2) speciális kezelése ? A felhasználók által maximálisan futtatható folyamatok számának hatékonyabb korlátozása ? Használaton kívüli megosztott memória szegmensek megsemmisítése (kinullázása) Hasznos megfontolni ennek a foltnak a használatát, hiszen növelheti a rendszerünk biztonságát. Hátránya viszont az, hogy megfelelő tesztelés kell, hogy megelőzze a használatát, mert egyes „veszélyes” módon viselkedő programok esetleg nem fognak rendesen futni. (Tapasztalatom szerint minden jól működött.) Ha használni szeretnénk, mindenképp olvassuk el a dokumentációját, hogy megértsük, miről is van itt szó és milyen szintű biztonsági erősítést kapunk ezáltal. Ezt a foltot a kezdőknek is ajánlom, mivel nem igényel semmilyen különös karbantartást. Meg kell említenem a LIDS (Linux Intrusion Detection System Patch, vagyis Linux Betörés Detektáló Rendszer) foltot is. (http://www..lids.org) A LIDS képes együttműködni az OpenWall folttal és erős biztonsági rendszert épít a Linux-ba. Lényegében ez abban a fázisban fontos, amikor már valaki behatolt a rendszerbe és root jogokat szerzett. Ez a program lekorlátozza a root jogait. Amikor nekünk kell adminisztrálni a gépet, egy jelszó megadásával kikapcsolhatjuk a védelmet, hogy tudjunk dolgozni. Korlátozások: ? Megtiltja a modulok betöltését és eltávolítását. ? Megtiltja a közvetlen memória-kezelést ? Megtiltja a közvetlen lemez-kezelést ? Megtiltja a közvetlen I/O port-kezelést ? Védi az indulási folyamatban résztvevő fájlokat (kernel, lilo, démonok, modulok, init script-ek) Behatolás-figyelés: ? Naplózza a tiltott dolgokhoz való hozzáférési próbálkozásokat ? Csak olvashatóvá ill. csak hozzáfűzhetővé teszi a naplófájlokat, hogy a behatoló ne tudja eltüntetni nyomait ? Elrejti a behatolás-figyelő program részeit Rendszer-védelem: ? Az útválasztó-táblák és a tűzfal-szabályok védelme ? A felfűzések (mounts) befagyasztása ? A démonok védelme a szignáloktól (pl. kill) ? Kernel jogosultságok – a root user szintre butítható, stb. (bővebben a dokumentációban) A rendszert egy lidsadm nevű démon kezeli, melyhez egy RipeMD-160 kódolású jelszóval lehet csak hozzáférni. Ez a program monitorozza az eseményeket. A védelmet rajta keresztül lehet ki és bekapcsolni. Külön védelem állítható be szinte mindenhez a rendszeren. Ha érdekel minket a dolog, olvassuk el a dokumentációt. A lids@egroups.com címen érhető el a rendszer levelező listája. A függelékben egy részletesebb útmutatóban tárgyalom a beállítását. Ezt a programot a haladóknak ajánlom. A következő fontos és hasznos törekvés a Medusa, melyet Szlovákiában fejlesztenek - többek között szlovákiai magyarok is. Ez a programcsomag kernel foltból és egy démonból áll. A cél kernel szintű felhasználó azonosítás. Ez az „azonosító-szerver” átlátszóan működik a kernel és a felhasználói programok között. Bizonyos műveletek indítása előtt a kernel jóváhagyást kér a szervertől. Ezzel a módszerrel szinte bármilyen biztonsági modell megvalósítható. A konfigurációs fájlok megfelelő beállításával nagyon magas szintű biztonságot érhetünk el. A kernel és a démon egy speciális /dev/medusa eszközön keresztül kommunikál. A jelenlegi implementáció a következőkre képes: ? Teljes hozzáférés szabályozás (Access control) a fájlrendszeren ? Hozzáférés átirányítása egyik fájlról a másikra ? A jel (signal) küldés / fogadás teljes szabályozása ? Fontos folyamat-műveletek direkt irányítása ? Bármely rendszerhívás indításának szabályozása egy adott folyamaton belül ? Egyes fájlok és/vagy folyamatok teljes elrejtése más folyamatok elől ? Minden folyamat saját bejelentkezési azonosítót kap ? Adott kód végrehajtásának kikényszerítése ? Bármely rendszerhívás alacsonyszintű szabályozása Hátránya, hogy egyelőre csak Intel architektúrán működik, de már folyamatban van a kód portolása más rendszerekre is. A tesztek szerint jól működik többprocesszoros rendszereken is. A másik nehézség a rendszer beállítása, egy kis C nyelvi programozói múlt nem árt hozzá. A forráskód letölthető a http://medusa.fornax.sk címről. Amennyiben érdekel bennünket a dolog, olvassuk el az egész dokumentációt és kövessük az ott leírtakat. Segítséget kérhetünk a csapat levelezőlistáján: medusa@medusa.fornax.sk Azt, hogy a Medusa együttműködik-e az előzőekkel, sajnos nem tudom és nem is garantálhatom. (Van egy-két ember a levelezőlistákon, aki már készített vegyes foltokat, melyek több biztonsági foltot együtt tartalmaznak.) Végül is, egy jól felépített / beállított Medusa nagyrészt feleslegessé teheti a másik két kódot. Én az OpenWall-féle kódot alkalmazom a mintapéldámban. A függelékben röviden bemutatom a LIDS féle rendszert is. 8.3 A Web-alkalmazások biztonsága Nem egy Web-helyet a hibásan elkészített Web-alkalmazásokon keresztül törnek fel, vagy férnek hozzá egyes felhasználók személyes adataihoz. Ezeket a hibákat a Web- programozónak kell kiküszöbölnie a kódok rendszeres ellenőrzésével. Röviden bemutatom a betörési technikákat: ? „Süti mérgezés”: A felhasználó gépére a Web-szerverről kisebb, a későbbi azonosításhoz szükséges információkat tartalmazó fájlok kerülhetnek. Ezeket cookie-knak, magyarul sütiknek nevezzük. Ezeknek két fajtája van: egy állandó, azaz a lemezen lévő, és egy nem-állandó, vagyis a memóriában lévő süti. Természetesen a legtöbb kliensgépen a kódolatlan szöveges állományokként helyet foglaló sütik könnyen elolvashatók mások számára. Ezek használatát kerüljük. Továbbá a kódolatlan sütik hálózati szaglászással is elfoghatóak. Ezért javasolt az SSL csatorna használata kényes információkat tartalmazó sütik esetén. Sok szakember teljesen ellenzi a sütik használatát azok megbízhatatlansága miatt. Az elkapott sütik segítségével jelszavak és hitelkártyaszámok is megszerezhetőek. ? Űrlap manipulációk: A károkozó letöltve egy űrlapot végignézheti annak HTML kódját és azt módosítva küldheti vissza. Általában több elemet tartalmaz, mint amit az értelmező vár, ezzel pl. buffer overflow támadást indíthat a rendszer ellen. Más esetekben parancsok elindítását kezdeményezhetik a szerveren. Ha az értelező script root-ként futott, máris kész a bejárat. Védekezés: ellenőrizni kell az űrlap integritását értelmezés előtt, továbbá a kapott mezők értékeit nagymértékben szűrni és ellenőrizni kell a szerveren végrehajtás előtt. ? Több űrlap esetén egyes űrlapok kihagyása: Ha több űrlapot kell kitölteni egymás után, a károkozó személy direkt URL begépelésével kihagyhat néhány lapot, ezzel érvénytelen adatbázis rekordokat generálhat. Biztosítani kell, hogy csak akkor dolgozzon fel az értelmező egy adatsort, ha minden űrlap ki lett töltve. ? Direkt adatbázis lekérdezések: Sokszor az űrlap mezőiből direkt lekérdezések generálódnak az adatbázis felé, melyre a választ a következő oldal hozza. Ha a károkozó ismeri a programnyelvet (pl. SQL), akkor más felhasználókra vonatkozó információkat is lekérdezhet. Megoldás lehet itt is a mezők szűrése és az adatbázis hozzáférési jogosultságainak helyes beállítása. ? Könyvtárlistázás: Ha olyan könyvtárak is listázhatóak, melyek a Web-alkalmazás kódját tartalmazzák, akkor a kód könnyen megszerezhető és abban biztonsági hiba kereshető ki. A CGI-ket, PHP, stb. kódokat tartalmazó könyvtárak semmiképp se legyenek listázhatóak. (És limitáljuk a fel/letöltésüket.) Bővebb információkért nézzük át a szakirodalmat: [26], [27], [28]. 9. SSH - Távoli menedzsment Amint a rendszer változtatást, karbantartást igényel, a rendszergazda nem szaladgálhat be állandóan a lezárt szerver-helyiségbe, pláne, ha otthon ül, vagy épp úton van több száz kilométerre a szervertől. De ekkor is ki kell javítani az esetleges hibákat, ellenőrizni kell a rendszert. Ezért be kell jelentkeznie egy távoli gépről a szerverre, hogy elvégezze a karbantartást. Ha szerver nem állt le teljesen, van áram és a bejelentkezéshez szükséges minden hálózati kapcsolat él, akkor semmi akadálya, hogy a rendszergazda bejelentkezzen. Persze ezt a hagyományos telnet programmal is megtehetné, de hát bolond lenne, hiszen valahol talán egy lehallgató program pont erre vár, hogy a beírt rendszergazdai jelszavát elmentse és elküldje valakinek. Ezért a rendszergazda az ssh (Secure shell – biztonságos héj) program segítségével lép be rendszerébe. A szerveren futnia kell egy ún. sshd démonnak (szolgáltatás, kiszolgáló) és a kliens gépen kell lennie egy ssh kliensnek. Ez szinte minden platform alá létezik. BSD licensz alatt megjelent egy szabad forráskódú implementáció (http://www.openssh.com ). Egyébként a sokkal szigorúbb licenszel rendelkező SSHv1 és SSHv2 szerver/kliens csomagokat is választhatjuk. „A hálózatba kötött gépek távoli kezelése egyszerűen megoldható. Akár telnetes kapcsolaton keresztül (nem biztonságos), akár ssh vagy ssl segítségével (ezek már biztonságosak). Ezek karakteres felületeket biztosítanak, így egy lassú kapcsolaton (modem) keresztül is alkalmazhatóak. És hozzá kell tenni azt is, hogy egy profi rendszeradminisztrátor sokkal gyorsabban végzi a munkáját parancssorból, mint grafikus felületen. Ezenkívül léteznek karakteres terminálon is futtatható programok, amelyek menükön keresztül kommunikálnak a felhasználóval. Megfelelő beállítások esetén a rendszergazda közvetlenül is bejelentkezhet az adminisztrálni kívánt gépre, akár grafikus felületen keresztül is, anélkül, hogy zavarná a gépen dolgozó egyéb felhasználókat. Szinte minden változtatást végre lehet hajtani a gépen, az operációs rendszer újraindítása nélkül is.” „A távoli felügyelet lehetőségeinek köszönhetően a rendszergazdának el sem kell mozdulnia a számítógépe mellől ahhoz, hogy karbantartsa a gondjaira bízott gépeket. Az átlagos felhasználó teljesen a saját képére formálhatja az általa használt rendszert, és ehhez az operációs rendszeren nem kell változtatni, nem kell elállítani semmit sem. Ily módon a működőképesség fenntartása nem kerül erőfeszítésbe, mert nem szükséges változtatni a jól beállított rendszeren. A biztonsági rendszer miatt pedig a felhasználó nem tud elállítani semmit a gépen, amihez nincsen joga.” A tapasztaltabb rendszergazdák régóta tudják, hogy parancssoros üzemmódban sokkal hatékonyabban lehet dolgozni és karbantartani, mint mindenféle grafikus felületű ikonok és menük rengetegében. Azoknak, akiknek mégis fontos a grafikus felület segítsége, ott a linuxconf programcsomag. Ezzel szöveges módban egy menüs programmal szerkesztgethetjük a legfontosabb konfigurációs állományokat. Létezik hozzá egy X11 grafikus felületű (linuxconf-x11) kezelő is, ha kell. Ezt a csomagot telepítve a szerveren, a mi távvezérlő gépünk X szerverén meg fog jelenni a program, (javasolt egy ssh socket-be becsomagolni!) és máris állítgathatunk kedvünkre. Összegezve, ma már a karbantartás elképzelhetetlen távoli bejelentkezés nélkül. További információkat a IV. Megvalósítás / 2. Finomítás / 2.4 Az SSH konfigurációjának finomhangolása és az VII. Alternatívát nyújtó programok a Debian-ban / 4. Alternatívák a távoli bejelentkezésre c. fejezetekben találhat az olvasó. 10. PHP3 alapok (dinamikus Weblap-készítés) A PHP egy szerveroldali értelmező script nyelv. A PHP nyelvet Rasmus Lendorf készítette először. Később rengeteg programozó beszállt a fejlesztésbe, ahogy a nyelv egyre népszerűsödött. Miután a PHP alapjait teljesen újraírták, megszületett a PHPv3 . Tulajdonságai: - Nyitott forráskód, GPL licensz - Szerveroldali, nem kíván speciális böngészőt - Többplatformos - Több mint 600 ezer Web-helyen használják - HTML-be ágyazott - Egyszerű szintaktika - Kis erőforrásigény – az Apache moduljaként futhat - XML kezelése - Adatbázis kapcsolat mind szabad, mind kereskedelmi adatbázis- szerverekhez - Fájlkezelő rutinok - Szövegkezelő rutinok - Sokféle változó, komplex adatszerkezetek lehetősége - Képfeldolgozó rutinok – dinamikus képek előállítása - és még sok más Ez egy HTML-be beépülő nyelv, mely a szintaxisának egy részét a C, Java és Perl nyelvekből vette át. A PHP magas szinten integrálva van az Apache Web-szerver programba. Emiatt sokkal gyorsabb az Apache-PHP páros, mint az Apache-PerlCGI, mivel nem kell külső értelmezőt indítani. A másik fontos tényező az, hogy mivel szerveroldali a kód értelmezése, ezért a végfelhasználó a böngészőjében már csak HTML kódot kap, minden PHP kód HTML-lé lesz fordítva. Így egyrészt nem kell a böngészőnek az értelmezéssel törődni (mint pl. Java), másrészt az értékes munka, a Web-programozói kód sem kerül ki a szerverről és azt más így nem használhatja fel. A PHP3 hátrányai: „ ? Az Apache (tehát egyúttal a modulok, így a PHP3 is) mindvégig ugyanazon felhasználó jogaival fut […] CGI esetén suEXEC vagy setuid bit segítségével el tudjuk érni, hogy a script biztonságosan a mi jogainkkal fusson. […] Ezt azonban az Apache-on belül (a Unix biztonsági rendszerének felépítéséből következően) nem tehetjük meg – így vagy osztoznunk kell, vagy új process indítására kényszerülünk (lásd php3-cgi), de ezzel elvesztjük a PHP3 legnagyobb előnyét, a kezdési időt. A PHP3 tehát akkor ideális, ha az adott szerveren csak egyvalaki (például a webmaster) vagy egymással teljes mértékben együttműködők dolgoznak. ? A hosszabb, számításigényes feladatok lassan futnak, mivel a PHP3 utasításértelmezője lassú […] Bonyolultabb feladatoknál érdemes áttérni Perl-re, vagy C-re. ? […] az Apache több példányban fut egyszerre, és ez megnehezíti a letöltések közti adatmegtartást. Bár ez a probléma kis kényelmetlenség árán megoldható, de akinek feltétlenül megmaradó adatokra van szüksége, annak a Roxen Challanger Web-szervert ajánljuk. ” [13] Ugyanúgy mint az Apache, a PHP is szét van darabolva különböző csomagokra annak érdekében, hogy csak azt kelljen felrakni, amire igazán szükség van. Ezáltal kevesebb erőforrást foglalunk le. php3 php3-doc php3-dev php3-gd php3-imap php3-ldap php3-magick php3-mhash php3-mysql php3-pgsql php3-snmp php3-xml php3-cgi Az alapcsomag. Ez tartalmazza a betölthető modulokat az Apache szerverhez, néhány extra funkciót nyújtó modult és a php2-php3 konvertert. Az Online dokumentációkat tartalmazza. A fejléc fájlokat tartalmazza (új modulok fordításához.) E modulnak a segítségével dinamikus grafikákat készíttethetünk (a libgd grafikus könyvtárat használva). IMAP függvények hívása közvetlenül PHP script-ből. LDAP funkciók meghívása közvetlenül PHP script-ből. ImageMagick funkciók meghívása közvetlenül PHP script-ből. MHASH funkciók meghívása közvetlenül PHP script-ből. MySQL kapcsolat létrehozása közvetlenül PHP script-ből. PostgreSQL kapcsolat létrehozása közvetlenül PHP script-ből. SNMP funkciók meghívása közvetlenül PHP script-ből. XML kezelő funkciók meghívása közvetlenül PHP script-ből. Egyedülálló (Apache nélküli) értelmező. Ekkor más Web- szervereket is használhatunk . Minden fenti modul megtalálható CGI-s változatban is. Ezek az Apache-al is használhatóak, de akkor a sebesség kisebb lesz, viszont a futtató felhasználói jogkör megváltozhat. 3. táblázat - PHP3 csomagok a Debian-ban Ha az Apache fut és php3 modul be van töltve, akkor egy egyszerű kis programocskával letesztelhetjük. Írjuk be ezt a shell prompt-ba: echo “” > /var/www/phpteszt.php3. Ezután ízlés szerint kedvenc böngészőnkkel tekintsük meg az oldalt, pl.: lynx http://localhost/phpteszt.php3 Ha minden jól be van állítva, akkor itt egy hosszú információs oldal keletkezik, amely a szervergép és a rajta futó Web és PHP programok adatait listázza ki. A továbbiakban bemutatok egy egyszerű programrészletet ízelítőnek. A programozás részletes bemutatása meghaladja e munka kereteit. Javaslom az Online dokumentáció és a szakirodalom (pl. [3]) tanulmányozását a Web-programozásban érdekelteknek. Információk a hivatalos Web-oldalon bőven fellelhetőek: http://php.net. Néhány hasznos tipp és trükk: http://phpclub.unet.ru/index_e.php3 A következő egyszerű programocska a „Hello világ!” PHP-s megvalósítása. Természetesen ez korántsem mutatja meg a PHP erősségeit. Három fájlt készítünk. Az első egy függvény (include) fájl. Innen rutinokat hívhatunk meg – nem kell megírni minden egyes .php3 fájlba egy adott függvényt. Az első fájl két függvényt tartalmaz. Az első az oldal címét változtatja meg, a második pedig számokat ír ki ciklus segítségével. /var/www/hello.inc: Helló a hello.inc fájlból.\n"; } function printnumbers($start) { print "
A szövegtest vége
Ha futtatjuk az oldalt egy böngészőben (jelen esetben a lynx-ben) akkor a következő
képet kapjuk vissza:
Helló a hello.inc fájlból.
A szövegtest kezdete
7
8
9
10
11
A szövegtest vége
A Potato-ban a PHP csomagok karbantartója Madarász Gergely. A PHP
dokumentációjának magyar fordítása letölthető innen: http://weblabor.hu/php
A Debian Potato-ban 33 csomag foglalkozik a PHP3-al, 14 pedig a PHP4-el (Lásd
később).
11. MySQL alapok (adatbázis szerver)
A MySQL egy igazi többfelhasználós, többszálúsított SQL adatbázis szerver. Jelenleg
az SQL (Structured Query Language, Strukturált Lekérdező Nyelv) a legelterjedtebb és
szabványos adatbázis nyelv világszerte. A rendszer kliens/szerver felépítésű.
A MySQL legfőbb erényei a gyorsaság, robusztusság és a (viszonylag) könnyű
használat. 1996-ban kezdték fejleszteni a T.c.X. nevű cégnél., ahol azóta több mint 40
adatbázisban tárolnak 10000 táblát, melyből csak 500-ban 7 millió sor van. Ez kb.
100GB adat.
A MySQL-t a http://web.mysql.com hálószemen érhetjük el. Itt található Online
dokumentáció, melynek nagy része természetesen benne van a Debian-ban is.
A MySQL sajnos nem teljesen szabad szoftver . Saját licenszpolitikájuk viszont
megengedi ingyenes használatát sok platformon és szituációban. A mi esetünk:
„ 3.5.4 Running a web server using MySQL: If you use MySQL in conjunction with a web server
on Unix, you don't have to pay for a license. This is true even if you run a commercial web
server that uses MySQL, because you are not selling MySQL itself.”
Vagyis, ha egy Linux-os Web-szerveren futtatjuk, legyen az akár üzleti célú is,
számunkra ingyenes a használata.
Licenszet akkor kell vásárolni, ha:
- Eladjuk a MySQL szervert egy másik termék vagy szolgáltatás részeként.
- Pénzt kérünk a MySQL telepítéséért és üzemeltetéséért valakitől.
- Beletesszük egy olyan terjesztésbe, amiért pénzt kérünk és az nem
terjeszthető ingyenesen tovább.
- Nem UN*X platformon futtatjuk / használjuk.
Ekkor licenszet kell venni minden olyan gépre, amin a szerver fut. Az egyik kliens kódja
GPL alatt van, ezért arra ezek nem vonatkoznak.
Itt [8] egy hasznos olvasmány a papíralapú dokumentációt kedvelőknek. Ezek
[9],[10],[11] pedig az SQL nyelvet taglalják.
A következő címen MySQL + PHP mintapéldákat találhatunk:
http://www.wernhart.priv.at/php
libmysqlclient6
libmysqlclient6-dev
mysql-gpl-doc
mysql-gpl-client
mysql-manual
mysql-doc
mysql-client
mysql-server
www-mysql
xmysqladmin
3.22.30
3.22.30
3.22.30
3.22.30
0.95
3.22.32
3.22.32
3.22.32
0.5.7
1.0
a kliens oldal függvénykönyvtára
fejléc fájlok fejlesztőknek
Online dokumentáció GPL licensz alatt info,
HTML, és text formátumban
GPL-es kliens binárisok
Mike Miller nemhivatalos kézikönyve. Ez a
non-free szekcióban található. Már idejétmúlt,
de hasznos lehet
a non-free Online dokumentáció
a non-free kliens binárisok
az adatbázis-szerver motorja
Web-interfész – segítségével SQL parancsok
építhetőek be a Web-oldalakba. A parancsok
a szerveren hajtódnak végre és az eredményt
HTML-ben küldi el a felhasználónak
egy frontend (kliens) az adatbázis motorhoz.
X11 grafikus rendszerekben használható,
funkciói: a szerver újraindítása, státusz
ellenőrzés, folyamat ellenőrzés,
jogosultságok kezelése, adatbázisok / táblák
kezelése
4. táblázat - MySQL csomagok a Debian-ban
A szerverre nem elég feltenni a mysql-server csomagot. Ha ott akarjuk kezelni az
adatbázisokat / táblákat is ssh segítségével, akkor valamelyik klienst is fel kell tenni.
Érdekes lehet egy távoli gépről karbantartani az xmysqladmin segítségével is, mely
könnyen kezelhető grafikus megoldást kínál. Ez esetben a programot telepítsük inkább
a távoli gépre. Ha nem a szerveren végezzük a feltöltést, akkor a mysql portját is
engedélyeznünk kell a megfelelő hálózatok felé. Ez azonban elég veszélyes is lehet.
Javaslatom az, hogy egy jól megírt PHP-s programmal tartsuk karban az adatbázist a
Web-szerveren keresztül. (SSL és felhasználó-azonosítás segítségével) Ekkor a
mysql csak a szerveren belül lesz (legyen) elérhető.
A MySQL hibaüzeneteinek egy része már le van fordítva magyar nyelvre is.
III. Tervezés
A cégnél tehát összeül a döntéshozó és a szakember, hogy megbeszéljék a rendszer
tervét. A vezetőség kifejti elképzeléseit, igényeit a rendszerrel szemben felhasználói
szemszögből. A rendszergazda ennek alapján összeállítja a hardver és az Internet /
hálózat tervét, majd költségbecslést készít. A cég megjelöli, hogy milyen domén-
neveket kíván bejegyezni. A rendszergazda, vagy a leendő Internet szolgáltató
bejegyezteti a domén-neveket. (Esetünkben a boresszormegyar.hu, borgyar.hu,
szormegyar.hu domének lesznek bejegyezve.)
1. A feladat felmérése - skálázhatóság, alternatívák, hardver.
Fontos kérdés esetünkben az, hogy a Web-szerverünk mekkora forgalmat fog
lebonyolítani. Ennek mértékét találat/percben is megadhatjuk. Természetesen ez a
különböző napszakokban eléggé változó lehet. Lényeges tehát, hogy ha egy egyszerű
információs oldalról van szó, nem kell egy erőgépet vennünk. Ha már elektronikus
áruházat is üzemeltetünk nagy számú klienssel, megfontolható nagyobb, esetleg nem
PC architektúrájú gép vásárlása. A mi esetünkben talán még a cégnél meglévő egyik
Pentium-os gép is megteszi. Minimális konfigurációnak ajánlott egy Pentium 166,
32MB RAM, 2 GB HD paraméterű gép. Nagyobb forgalom és nagyobb Web-hely
esetén egy Celeron 400-as 128MB RAM és 6 GB lemez is megteszi. Extrém nagy
forgalom (és CPU terhelés) esetén válasszunk nagyobb, esetleg duál-processzoros
hardvert. Nem hiszem, hogy sok cég megengedhetné magának nem-x86 architektúrájú
gépek beszerzését – bár azok véleményem szerint sokkal jobb hardverek, csak
elterjedésüket gátolja magas áruk.
Fontos, hogy a hálózati kártya jó minőségű (pl. PCI-os 10/100 Mb/sec-es Ethernet)
legyen, mert ez köt össze a router-el / tűzfallal, ez vezet a külvilágba. Természetesen
fontos kérdés a sávszélesség a külvilág felé. Ez alapesetben egy 64/128k-s ISDN
vonal is lehet, nagyobb forgalom esetén pl. egy 1Mb-es bérelt vonal.
Amit fontos: a hardver egységek Linux-kompatibilisek legyenek. Linux-kompatibilis
hardverek: http://lhd.datapower.com, http://www.linuxhardware.net. Olvassuk el a Linux
Hardware Compatibility HOWTO-t.:http://www.linuxdoc.org/HOWTO/Hardware-
HOWTO.html. Főleg az alaplapon ne spóroljunk, legyen egy minőségi IDE vezérlő
chipset rajta (pl. i440bx). Ha SCSI kártyát és merevlemezt veszünk, akkor javasolt pl.
az Adaptec cég PCI-os SCSI kártyáit választani. Egyszerű információforrás maga a
kernel: egy make *config-al egy teljes körű listát kapunk a Linux által támogatott
hardverektől. Továbbá a kernelforrás Documentation könyvtárában is megfelelő
információkhoz lehet jutni. Tudni kell, hogy a kernelben nem egy adott cég adott
terméke, hanem általában annak a vezérlő-chip-je van felsorolva (leprogramozva),
hiszen több termék is használhatja ugyanazt a vezérlőt. Ezért ne ijedjünk meg, hanem
olvassuk át a hardver dokumentációkat, hogy melyik eszköz milyen vezérlővel
rendelkezik.
Ha a cégnél jelenleg is van egy erre a feladatra kijelölhető szabad gép, akkor már csak
a szoftvert és az Internet-kapcsolatot kell beszereznünk. Ha nincs, akkor keressünk fel
néhány számítástechnikai üzletet és szerezzük be a hardveregységeket, majd
szereljük azokat össze. Ma már egy PC összeszerelése gyerekjáték, ha megfelelően
választottuk meg az összetevőket. Erre itt nem térek ki, de ajánlom a következő
szakirodalmat: [6].
A lényeg az, hogy mielőtt nekikezdenénk installálni a rendszert, tájékozódjunk
részletesen a hardverünk Linux-kompatibilitásáról, hogy ne érjen munka közben
meglepetés.
A mintapéldámban egy fiktív Bőr és Szőrmegyártó Kft. esetét vizsgálom. A
menedzsment úgy határozott, hogy belépnek az elektronikus kereskedelembe, és első
lépésként információkat közölnek termékeikről, szolgáltatásaikról több nyelven is az
Interneten. Második lépésben pedig esetleg Online áruházat nyitnak a Web-helyükön
(ezt a lépést nem tárgyalom). Mivel nincs még tapasztalatuk e téren, ezért először nem
szeretnének sok pénzt fektetni a dologba. Ekkor jön a viszonylag kis teljesítményű kis
költségű házi Linux-os rendszer a számításba. Felkérik a rendszergazdát, hogy
szerezzen be információkat és tervezze meg a rendszert. A rendszergazda kiválasztja
és összerakja a hardvert, beszerzi a szoftvert kompakt lemezeken. (Pl. kiíratja CD-re
egy ismerősével, aki egy Internet-szolgáltatónál dolgozik, és le tudja tölteni azokat az
ftp tükrökről.) Továbbá megegyezik egy Internet-szolgáltatóval az előfizetésről is.
2. Költségek becslése mintapélda alapján.
Erről szintén nehéz általánosságban nyilatkozni. Mint már említettem a szoftver
beszerzési és használati költsége 0 Ft. A nagy ellenérv a TCO szokott lenni a
szabadszoftverek ellen. Vagyis a termék egész használati élettartama alatti összes
ráfordítás. Pl. az legyen a rendszergazda továbbképzése, az írott dokumentáció
beszerzése.
Természetesen az ingyenes szoftverekhez terméktámogatás nem jár ingyen.
Amennyiben szükségünk lenne telefonos vagy e-mail-es terméktámogatásra, akkor
arra több cégnél is előfizethetünk. Pl. a http://www.linuxcare.com egy olyan cég, amely
támogatást nyújt a különböző Linux rendszerekhez (Persze főleg angolul, magyarul
nem). A kereskedelmi terjesztések többféle konstrukciót is nyújtanak, ha a dobozos
(vagyis több ezer forintos) termékeiket vásároljuk meg. Ennek ellenére én ezt
semmiképp se javaslom, hiszen ekkor épp az ingyenességről mondunk le.
Amint a licenszekből is kiolvashatjuk, a szoftverekhez semmilyen garancia nem jár,
tehát nem vonható felelősségre senki, (csak a rendszergazda) ha valami nem úgy
működik, ahogy azt szeretnénk.
A legköltségkímélőbb megoldás csakis az lehet, ha a rendszergazda több Linux-os
levelező listát is olvas, és oda intézi kérdéseit. Sok „borzasztó” problémáról gyorsan
kiderül, hogy sokan már szembesültek ilyen szituációval, és már kész megoldással
tudnak nekünk szolgálni. Ezektől az önkéntesektől ne várjunk lehetetlent, ne
követelőzzünk megoldásért, mert ezek az emberek csupán jóindulatból segítenek és
azért, mert emlékeznek, hogy amikor ők kezdték, akkor nekik is segített valaki.
Legyünk tehát kultúráltak és ne zaklassuk kis butaságainkkal állandóan csak egy
személyt, hanem minél több emberrel ismerkedjünk meg. Hiszen 1-2 esetben mindenki
szívesen segít, de már a 36. levél után úgy érezheti magát az illető, hogy rászálltak.
A rendszergazdának továbbá kötelessége követni a friss Linux-os híreket. Pl.
http://www.linux.hu, http://slashdot.org, http://www.linux.org, http://www.linux.com,
http:/freshmeat.net, http://linuxapps.com, stb. Figyeljük a biztonsággal foglalkozó
helyeket, levelezőlistákat is, pl. security-l@sunserv.kfki.hu
Ha a rendszer mindig tartalmazza a biztonsági javításokat, és rendesen be van
konfigurálva, akkor szinte rá se kell néznünk.
Az üzemeltetési költséghez tartozik a leállás is, hiszen a rendszergazdát elő kell
keríteni, hogy indítsa újra a gépet és keresse meg a hiba okát.
„A költséghatékonysághoz tartozik a kiesett állásidő kérdése is. Linuxos gépek esetében ez
minimálisra csökken, nem ritka az sem, ha egy gép 100-200 napot üzemel leállás nélkül. Például
Donald Becker ,,A szövegszerkesztőtől a szuperszámítógépig'' címmel tartott előadást a jelenlegi
Beowulf projektjéről, és beszélt a rendszerek stabilitásáról is. A legtöbb rendszere már 100
napja folyamatosan működik, de van olyan is, amelyhez 200 napja nem kellett hozzányúlni. Ez
nem attól érdekes, hogy egy gép ennyi ideig bírja, hanem, hogy nagy számú (100-200) gép
működik együtt ennyi ideje.”
Véleményem szerint a TCO minimalizálható, ha a tervezéskor betartunk minden
szabályt, és nem saját magunk ellen dolgozunk. A megvalósításnál természetesen
nem szabad nagy kompromisszumokat kötni a terv ellenében, hiszen akkor felesleges
volt a tervezési fázis. A „Jó lesz az, hidd el!” alapon végzett munka mindig félmunka.
Ha egy már meglévő gépre telepítjük a rendszert, akkor a hardver költsége is minimális
lehet (egyéb kiegészítőkre mindig szükség lesz). Ha rászánunk egy kis pénzt, akkor
igénytől függően összeállíthatunk pl. egy Celeron-os gépet 100-150 ezer Ft + ÁFÁ-ból.
Egy komolyabb duál-PII-es gépet is ki lehet talán hozni 300 ezer Ft-ból. A fontos az,
hogy viszonylag minőségi és elterjedt alkatrészekből építkezzünk, mert így sok
fejfájástól kímélhetjük meg magunkat. Termékneveket nem akarok megemlíteni, többek
között védjegyi okok miatt is – egyébként mindenkinek a maga ízlése szerint. Mindenki
attól a cégtől vásárol, amely termékeivel jó tapasztalatai vannak. Sokat lehet vitatkozni,
hogy ki mikor milyen egységgel hogyan járt, miközben a másik termék kitűnően
működött, vica versa.
Konkrét árakat pedig azért is badarság lenne említenem, mert az már a jövő héten nem
lenne igaz, nemhogy mikorra az olvasó ezt a könyvet a kezébe veszi.
3. Biztonság
Megfelelő rendszertervezéssel elejét lehet venni a legkülönfélébb támadásoknak. Ha
betartjuk a II. Alapfogalmak / 8. Biztonsági alapok (hardver, szoftver), IV. Megvalósítás
/ 2. Finomítás fejezetekben leírt szabályokat, továbbá a következő tanácsokat is
betartjuk és alkalmazzuk, akkor nagymértékben fokozhatjuk a rendszerünk betörés-
biztosságát és helyes működését.
3.1 Milyen programok lehetnek / nem lehetnek egy Web-szerveren?
Egyes programokat / szolgáltatásokat egyáltalán nem tanácsos és felesleges egy éles
Web-szerveren futtatni és / vagy tárolni, mert támadási felületet biztosíthatnak a
behatolók számára. Bár egyazon szerveren rengeteg szolgáltatást tud nyújtani a Linux,
igazából, biztonsági okokból egy külön erre a célra kijelölt gépet kell Web-szerverként
üzemeltetnünk. A „mindent egybe” filozófiát pedig felejtsük el. Néhány fontos tanács:
- Ne legyen semmilyen fordító és fejlesztő eszköz / program. Ezek lehetőséget
adnak a betörőnek, hogy trójai faló programokat fordítsanak a rendszeren.
- Ne legyenek NFS export-ok, NFS szerver. Az NFS-t No File Security-nek is
szokták csúfolni. Rajta keresztül könnyen feltörhető a rendszer.
- Ne legyen NIS.
- Ha lehet ne legyen FTP szerver. Helyettesítsük scp-vel. Ha viszont lesz,
akkor ne legyen anonymous ftp szolgáltatás. A felhasználók legyenek chroot-
olva a saját home-könyvtárukba.
- Ne használjunk telnet szolgáltatást. Helyettesítsük pl. ssh-val. (lásd később)
- Ne fussanak az r* és RPC szolgáltatások (lásd később)
- Ne fusson semmiféle felesleges szerver, pl. ircd, talkd. Továbbá ne tartsunk
veszélyes klienseket (irc, icq, stb.)
- Ne szolgáltassunk ki a felhasználókról információkat (fingerd, identd)
- A különlegesen fontos fájloknál állítsuk be az immutable bit-et.
- Szigorú umask érték elhelyezése az /etc/profile-ban, és a
felhasználók egyéni beállításaiban.
- A rendszergazda számára elhelyezhetünk 077-es umask-ot is, de ezt csak a
rendszer készre-tétele után érdemes. Ekkor a jog a következő lesz: -rw------
- Lehetőség szerint csak eredeti Debian csomagokat használjunk, ha viszont
fordítanunk kell, próbáljuk meg először a forráskódot a Debian tükörről
leszedni. Ha onnan nem tudjuk, akkor a készítő hivatalos honlapjáról, vagy
ftp helyéről töltsük le, esetleg a hivatalos magyar tükörről. Erre azért van
szükség, mert egy ismeretlen helyről beszerzett bináris program vagy
forráskód tartalmazhat kiskapukat – tehát lehet, hogy kompromittált. A kernel
és a Debian csomagok és források MD5-ös igazolással érkeznek, mely
alapján ellenőrizni lehet a fájl integritását. A fordítást mindig másik gépen
végezzük.
Karbantartás során:
- Rendszeresen ellenőrizzük, hogy mely programok rendelkeznek SUID és
vagy SGID bit-ekkel. Ezt megtehetjük a következő paranccsal:
find / -type f \( -perm –04000 –o –perm –02000 \)
- Rendszeresen ellenőrizzük, hogy mely fájlok írhatóak mindenki által. Ezt
megtehetjük a következő paranccsal:
find / -perm –2 ! –type l –ls
- Rendszeresen ellenőrizzük, hogy mely fájloknak nincsen tulajdonosuk. Ez
azokra a fájlokra is jellemző lehet, melyek betörés céljára vannak használva.
. Ezt megtehetjük a következő paranccsal:
find / -nouser –o –nogroup -print
- Keressük meg az .rhosts fájlokat. Ezek betöréshez könnyen
felhasználhatóak ezért töröljük őket, ha nincs rájuk különösen indokolt
szükség. find /home –name .rhosts –print
Ezeket a fenti kereséseket betéve egy shell-script-be és azt a cron időzítő
segítségével mindennap lefuttatva, ennek kimenetét a /var/log-ban elhelyezve, vagy
e-mailben elküldve automatizálhatjuk. Ezek a lépések elhagyhatóak, ha egy jól
beállított tripwire programot működtetünk.
3.2 A partíciók megtervezése általánosan és a mintapéldához
Fontos egy éles rendszer esetében szétválasztani a különböző funkciót betöltő
alkönyvtárakat különböző partíciókra és egyeseket csak olvasható módban használni.
Ez nagyban növelheti a rendszer hitelességét , és a mentéseket is leegyszerűsítheti.
A mai kernelek már támogatják (a 2.2-es folttal, a 2.4 alapból) az LVM (Logical Volume
Management, Logikai Kötetkezelés)-t. Ezzel a módszerrel különböző merevlemezekről
vagy egyazon lemezről, de különböző helyekről fűzhetünk össze partíciókat egyetlen
egységgé, melynek mérete ezért dinamikusan változtatható. Itt erre a módszerre nem
térek ki, csupán a hagyományos utat tárgyalom. Az LVM-et csak haladóknak ajánlom.
A következő táblázat tartalmaz egy lehetséges kiosztást. Esetünkben egy egyszerű
IDE vezérlős ATA merevlemezről van szó, mely az első (ide0) vezérlő „master” részére
van csatlakoztatva. Ezeket az opciókat csak a rendszer készre-tétele után szabad
beállítani. Ha be lett állítva, teszteljük a rendszer újraindítását, hogy mennyire fog
zökkenőmentesen zajlani.
csatolási pont
méret kb.
mount opciók
eszköz
/
/boot
/usr
/home
/tmp
/var
/var/www
swap
40-60 MB
10 MB
tetszőleges
tetszőleges
100 MB
tetszőleges
tetszőleges
mem x 2
ro ,defaults
ro,nosuid,noexec ,nodev,defaults
ro,nodev,defaults
nosuid,noexec,nodev,defaults,usrquota
nosuid,noexec,nodev,defaults,usrquota
nosuid,noexec,nodev,defaults
nosuid,noexec ,nodev,defaults
(ezt a rendszer nem fűzi fel)
hda3
hda1
hda5
hda6
hda7
hda8
hda9
hda2
5. táblázat - Partíció-terv
A rendszer indulásakor az inicializáló script automatikusan felfűzeti a mount
programmal a /etc/fstab fájlban szereplő bejegyzéseket. Ez a program az adott
partícióra vonatkozó paramétereket is az fstab-ból olvassa ki. Az opciók jelentése:
„A következő opciókat minden fájlrendszer esetén alkalmazhatjuk:
- async A fájlrendszer minden írási/olvasási művelete aszinkron módon megy végbe.
- atime Frissíti az inode -ok elérési ideit minden elérés esetén. (Alapértelmezett.)
- auto A fájlrendszer csatolható a -a opcióval.
- defaults Az alapértelmezett opciókat használja. Ezek: rw, suid, dev, exec, auto, nouser, és
async.
- dev Értelmezi a karakteres vagy blokkos speciális eszközfájlokat a fájlrendszeren.
- exec Megengedi a bináris fájlok futtatását.
- noatime Nem frissíti az inode-ok elérési ideit minden elérés esetén. (Ez hasznos lehet pl. a
`news spool' gyorsabb elérésének biztosítására news szerverek esetén.)
- noauto Csak kifejezett parancsra csatolható, azaz pl. -a opcióval nem csatolódik.
- nodev Nem értelmezi a karakteres vagy blokkos speciális eszközfájlokat a fájlrendszeren.
- noexec Nem engedi meg a csatolt rendszeren található bináris fájlok futtatását. Ez pl. akkor
hasznos, ha egy szerver más architektúrájú binárisokat is tartalmazó fájlrendszert
használ, mint a sajátja.
- nosuid Nem engedélyezi a set-user-identifier (suid) és set-group-identifier (sgid) bitek
használatát.
- nouser Megtiltja minden közönséges (nem root) felhasználónak a fájlrendszer csatolását.
(Alapértelmezett.)
- remount Megkísérli egy már csatolt fájlrendszer újbóli csatolását. Ezt arra szokás
használni, hogy más opciókkal csatoljuk újra a fájlrendszert, például egy korábban csak
olvasható fájlrendszert írhatóvá tegyünk.
- ro Csak olvasható módon csatolja a fájlrendszert.
- rw Írható/olvasható módon csatolja a fájlrendszert.
- suid Engedélyezi a set-user-identifier (suid) és set-group-identifier (sgid) bitek használatát.
- sync A fájlrendszer írási és olvasási műveleteit szinkronizáltan végzi.
- user Megengedi minden közönséges (nem root) felhasználónak a fájlrendszer csatolását. Ez
az opció bekapcsolja a noexec, nosuid, és nodev opciókat, hacsak nem a további opciók
ezt felülbírálják. (Biztonsági okokból ezt csak nagyon átgondolt esetekben szabad
megtenni.)”
Tehát azok az alkönyvtár-rendszerek, melyek elméletileg nem tartalmazhatnak
futtatható fájlokat (/var /tmp /home /boot) ne is legyenek képesek futtatásra.
Továbbá a megfelelő partíciókon ne lehessen eszközfájlokat létrehozni, és az
eszközökhöz hozzáférni, továbbá ne lehessen tulajdonos-váltó programokat se
indítani. Azok a partíciók, melyek nem szabad, hogy változzanak (csak a
rendszergazda változtathatja meg őket), csak olvasható formában legyenek felfűzve.
Egy további trükk lehet az is, ha a ro-nak szánt partíciókat egy iso9660 (CD image)
formában készítjük el. Ekkor az esetleges betörő hiába szerez rendszergazdai
jogköröket, nem fogja tudni újra felfűzetni ezeket a fájlrendszereket rw-ben, mert az
isofs maga csak olvasható. Ez persze további bonyodalmakkal jár és kissé nehézkes a
rendszer frissítése, lévén, hogy mindig egy új ISO-fájlt kell készíteni.
1. A /boot partíciót azért tesszük legelőre és külön, mert:
- Így biztosan látni fogja a lilo .
- Jobb, ha ro és senki nem nyúl bele, ugyanis a kernel sérülékeny pontja a
rendszernek.
2. A második a swap partíció, mely virtuális memóriát képez a lemezen. Ezzel a fizikai
RAM 2-3 szorosáig tudjuk optimálisan bővíteni a rendszert. Ha pl. 64 MB RAM van
a gépben, akkor ajánlott 128 MB swap-ot alkalmazni. Természetesen terheléstől
függően lehet, hogy egyáltalán nem, vagy csak kis mértékben lesz használva a
swap. Ha 128 MB memóriánk van, nem biztos, hogy kell 256 MB swap. Teszteljük a
rendszert. Egy swap partíció maximális mérete 2 GB, de lehet több ilyen partíció is.
Akár több lemezen is. Azért érdemes előre tenni a swap partíciót, mert ha azt a
rendszer sokat használja, akkor így jelentős sebesség növekedés érhető el azzal
szemben, mint amikor az a lemez „végén” helyezkedik el.
2. A harmadik a gyökér fájlrendszer, mely a /bin, /lib, /sbin, /etc, /root,
/dev, /mnt könyvtárakat tartalmazza. Ezek olyan fájlokat tartalmaznak, melyeket
csak a rendszergazdának javasolt megváltoztatni. Ezért ha már működik a rendszer
és mindent jól beállítottunk és leteszteltünk, tegyük írásvédetté a gyökér partíciót.
Ahhoz, hogy ez problémamentesen sikerüljön, olvassuk el a IV. Megvalósítás / 2.
Finomítás / 2.13 A „/etc/fstab” és az „init script”-ek beállítása című fejezetet.
4. A negyedik partíció egy „extended” vagyis kibővített partíció. Ez azért nincs
feltüntetve a listán, mert ez tartalmazza a többi logikai partíciót. A logikai partíciók
számozása mindig öttől kezdődik, akár van 2,3,4-es elsődleges partíció, akár nincs.
5. Az ötödik partíció az első logikai. Ide a /usr alkönyvtár tartozik, melyre a rendszer
indításához és alapvető működéséhez nem szükséges programokat teszi a telepítő.
Mivel egy rendszerbeállítás után ennek sem szabad változnia, ezért ezt is ro-ban
használjuk. Ez mindaddig kis méretet igényel, amíg kevés funkciót teljesít a szerver.
Ekkor akár 50MB-al is beéri. Ha sokfunkciós alkalmazás-szervert építünk, akkor
felmehet akár 1-2GB-ra is a mérete.
6. A hatodik tartalmazza a /home könyvtárat, mely a valódi felhasználók könyvtárait és
fájljait tárolja. Mivel ebben a rendszerben nem lesz sok felhasználó – hagyományos
értelemben jobbára egy se – ezért ez lehet elég kicsi is. Igény szerint állítsuk be a
méretét. A felhasználóknak biztonsági okokból ne engedélyezzük indítható fájlok
futtatását, eszközfájlok létrehozását és setuid-al való kísérletezgetést se. A mérete
az adott rendszertől, vagyis a felhasználók számától függ. Általában legyen minél
nagyobb, ha sok a felhasználó és minél kisebb, ha nincsenek valódi felhasználók,
csak rendszergazdák. Pl. legyen 500 MB.
2. A hetedik az átmeneti fájlokat tartalmazó partíció. Ennek a könyvtárnak ún. „sticky”
vagyis kb. „ragadós” bit-je van. Ez azt jelenti, hogy az adott folyamat kapja meg a
saját maga által létrehozott fájl a tulajdonjogát. Pl. ha egy lali nevű felhasználó
által futtatott program létre hoz egy átmeneti fájlt, akkor annak a tulajdonosa a lali
lesz. Ekkor ezzel a fájllal azt tesz, amit akar, de a többiek fájljait nem tudja piszkálni,
esetleg olvasni se – ha megfelelő az umask értéke. Sok felhasználó és egyszerre
futó folyamat esetén kevés lehet a 100 MB, ekkor növeljük meg igény szerint. Ha
olyan programokat használunk, melyek extrém nagy fájlokkal dolgoznak (hang,
videó), akkor elég hamar elfogyhat ez a hely.
2. A nyolcadik a /var könyvtár: ez alatt találhatóak az állandóan változó adatok, mint
pl. a levelezés, a rendszernapló, a csomag-adatok, stb. Továbbá itt lesznek
elhelyezve a mysql adatbázisok is, ezért kellő mennyiségű helyet kell biztosítani
ezek számára. Ne felejtsük el később a /var/lib/mysql könyvtárt naponta
menteni.
9. Itt van a Web-szerver szíve-lelke, a Web-tartalom. Ez a /var/www könyvtár a Web-
szerver dokumentum-gyökere. Ennek mérete a Web-hely mérete szerint kell, hogy
alakuljon.
3.3 A biztonsági mentés (backup) lehetőségei, módszerei és javasolt
paraméterei
Ez szintén egy ritkán betartott szabály és fontos kérdés. Jó mentés nélkül a rendszer
nem sokat ér, nem biztonságos. A mentési „politikát” szabályzatban kell rögzíteni, be
kell tartani és tartatni az eredményes helyreállítás érdekében. A következőket kell
meghatározni: „
- milyen célra
- milyen gyakorisággal
- milyen eszközzel
- mely fájlrendszereket kell lementeni
A mentés céljai lehetnek:
- Hardver – főként merevlemez – hiba miatti teljes összeomlás esetén a rendszer gyors
visszatöltését biztosítani lehessen.
- Biztonsági tartalék – egy tiszta, idegen behatolók aknáitól mentes rendszer –
gyanított, vagy tényleges betörés esetére.
- A betörés és károkozás történetének utólagos felderítéséhez.
- Felhasználók állományai, arra az esetre, ha letörlik, elvesztik, rosszul javítanak bele.
- Számlázási vagy bármilyen jogi vita esetére bizonyíték. ”[12 p. 61]
Mentési eljárás típusok:
- Telepítés utáni mentés: ekkor még semmilyen felhasználói adat nincs fenn.
- Teljes mentés: az összes partíció mentése.
- Inkrementális (réteges) mentés. Csak az utolsó mentés után megváltozott
fájlok kerülnek mentésre.
Azokat a partíciókat, melyek csak olvasható formában vannak, elég egyszer elmenteni
(vagyis csak minden változtatás / frissítés után). A folyamatosan változó partíciókat
gyors változások esetén érdemes akár naponta is elmenteni.
A mentéssel szembeni követelmények:
- Sokáig őrizze meg a média az adatot, nagyon hibatűrő média kell.
- Szabványos, kompatíbilis, sokáig fennmaradó technológia.
- Többször felhasználható, nagy kapacitású, tartós média
- Címkén fel legyen tüntetve a mentés dátuma, a gép neve, a mentési szint, ha
több mentés is ráfér, akkor mind.
A média fizikai védelme: Mivel a mentés tartalmazza az összes bizalmas adatunkat is,
ezért lehetőleg páncélszekrényben kell tárolni, hőtől, fénytől, víztől, párától, mágneses
és elektromos tértől elzárva. Védeni kell lopás ellen (és) szállítás közben is.
Legegyszerűbb az, ha a gépben van egy CD-író, benne egy újraírható kompakt lemez
és a mentés minden éjszaka megtörténik a rendszer időzítő naplójából
(/etc/crontab). Ennek a megoldásnak a hátránya az, hogy ha teljes mentést kell
végezni, akkor kicsi lehet a 650Mb-os tárterület, továbbá a CD-k cseréje nélkül mindig
csak egy mentésünk lehet, ami nem tanácsos. Továbbá szükség van egy ugyanekkora
átmeneti tárterületre az ISO image fájl elkészítéséhez, mely az írás előtt szükséges. Ez
a megoldás viszonylag gyorsnak, és tartósnak mondható. Ma már költséghatékony is.
A másik egyszerű megoldás egy nagyteljesítményű és tárolókapacitású szalagos
egység. Ezekből elég nagy a kínálat. 2GB-os méret alatt nem ajánlom, hogy egységet
vásároljunk. Javasolt akkora kapacitású egységet vásárolni, hogy egy teljes mentés
egyben ráférjen. Linux alatt elég jól használhatóak az Ftape jellegű meghajtók, melyek
az alaplapi floppy vezérlőre csatlakoztathatóak. A szalagos egységek közül vannak
párhuzamos portra kapcsolhatóak és SCSI-s felületűek is. Az utóbbiak elég drágák is,
ui. a SCSI vezérlőt is meg kell venni. Cserébe viszont nagyobb biztonságot kapunk.
Valamint nagyobb sebességet és kapacitást is.
A fájlokat általában tömörítve érdemes menteni. Vannak olyan szalagos egységek,
melyek hardveres tömörítést alkalmaznak. A CD-RW esetében azonban nekünk kell
gondoskodni szoftveres tömörítésről is. Így a kapacitás akár kétszeres is lehet.
A következő fő kérdés a mentés szoftverének kiválasztása. Vannak a rendszerhez járó
általános archiváló programok, mint amilyen a tar és a cpio is. A dump program
azonban fájlrendszer-szintű mentést készít.
„ A dump abban különbözik ezektől , hogy a fájlrendszer tartalmát közvetlenül, nem a
fájlrendszeren keresztül olvassa. Ezt speciálisan biztonsági mentések céljából írták, míg a tar és
cpio programokat elsősorban archiválásra, de azért használhatók biztonsági mentésre is.
A fájlrendszer közvetlen olvasásának vannak előnyei. Lehetséges ilyenkor a fájlok visszaállítása
időbélyegjeik átállítása nélkül; a tar és a cpio használata előtt viszont a fájlrendszert először
csak olvashatóan kell csatlakoztatni (mount-olni). A fájlrendszer közvetlen olvasása
hatékonyabb is, ha mindent le kell menteni, mert a legkevesebb fejmozgással megoldható. A
legnagyobb hátránya az, hogy a mentési program ilyenkor a fájlrendszer típusához kötődik: pl.
a Linux dump utasítása csak az ext2 fájlrendszerre működik. A dump továbbá közvetlenül
támogatja a mentési szinteket míg a tar és a cpio esetén ezt egyéb eszközökkel kell
megvalósítani.”
Természetesen vannak a „fapados” dump helyett más mentési programok és eljárások
is. Ezek egy része viszont kereskedelmi termék. A dump-nál a hangsúly az
automatizálhatóságon és a távoli gépekre történő mentésen van és nem a színes
grafikus felületen. Főleg szalagos egységekhez használható. Segítségért forduljunk a
manuálhoz.
A Potato-ban több professzionális mentési programrendszer is található. Ezek főleg
központi backup-szerverre dolgoznak és kliens-szerver rendszerűek. Az egyik ilyen
program az afbackup. Nagy hangsúlyt helyeznek a biztonságra és a kliens
azonosítására. A backup-szerverről is indítható a kliensről való mentés. Lehetőség van
a tömörítésre, és a partíciók közvetlen mentésére is.
Először is olvassuk el a dokumentációt. Ez segít a rendszer megértésében. Ha nincs
külön gépünk a mentésre, de a szervernek van szalagos egysége, akkor sincs baj. A
mentő program szerver része foglalkozik a szalaggal, a kliens része pedig a fájlokkal. A
program beállítása igen egyszerű: elvégezhető az /etc/afbackup alatt lévő fájlokon
és egy automata script program segítségével is.
Mivel a mentés mindenkinél más típusú egységre történhet, ezért eltekintek a
konfigurációs fájlok részletes bemutatásától.
Egy másik hasznos mentő program a Potato-ban az amanda. Ezt inkább csak külön
szalag-szerverekhez ajánlják. Továbbá ott van még a kbackup, taper, tob
melyeket főleg az egygépes mentésre terveztek. Mindenkinek ajánlom, hogy próbáljon
ki többet is, majd az igényeinek megfelelőt válassza. Én a mintapéldában a kbackup-
ot használom.
A CD-írós mentéshez a következő programokat ajánlom:
cdbackup: http://cdbackup.home.dhs.org
scdbackup: http://scdbackup.linuxbox.com
Továbbá szükségünk lehet a CD írásához a cdrecord és az mkisofs programokra.
Egy backup programokat összefoglaló hely:
http://linuxberg.externet.hu/conhtml/adm_backup.html
3.4 Szoftveres UPS (szünetmentes tápegység) felügyelet soros
porton keresztül
Ma már elképzelhetetlen egy szerver szünetmentes tápegység (UPS, Uninterruptible
Power Supply) nélkül. Az újabb típusok alkalmasak kapcsolatot teremteni a szerverrel
és hosszabb áramszünet esetén megkérni azt, hogy álljon le. Ez általában a szerver
soros portján keresztül történik.
Fontos paraméterek:
- van-e a tápegységnek soros vagy más kapcsolati lehetősége a szerverhez
- támogatja-e a Debian-ban lévő UPS felügyeleti démonok egyike a tápot
- mekkora az áthidalási idő, a teljesítmény
- mekkora az akkumulátor újratöltődési ideje
- mennyi az akkumulátor élettartama
- milyen hosszú a garancia
- kapható-e alkatrész, új akkumulátor a táphoz
- van-e túláram és/vagy túlfeszültség-védelem
- mennyibe kerül
A lehetőségek szerint válasszunk olyat, aminek rövid az újratöltődési ideje, van benne
védelem, és persze kompatíbilis a szoftverünkkel. Ne sajnáljuk rá a pénzt, ez egy
fontos alkatrésze rendszerünknek. Olyan 40-50 ezer forintból már jó készüléket lehet
venni. Ha a szerverünk a szolgáltatónál lesz, lehet, hogy ott biztosítanak neki
tápegységet, bár annak hátránya az lehet, hogy nem kapcsolja le automatikusan a
szerverünket.
A Debian-ban a következő szoftverek találhatóak:
- apcd: Az APC Smart UPS termékeihez.
- apcupsd: Az APC cég termékeihez készült, a táp jelzése esetén kikapcsolási
folyamatot indít. Támogatja a BackUPS, BackUPS Pro, SmartUPS V/S, és
SmartUPS(NET/RM) termékeket.
- bpowerd: A Best Patriot cég termékeit támogatja.
- genpower: a legtöbb RS-232-es eszközzel működik. Extra képességei: hálózati
feszültség érzékelése, lemerült akku felismerése, soros kábel felismerése, az UPS
inverterének kiiktatása. A Debian csomagban van egy extra kábelhez való vezérlő
is, melyet „apc-pnp”-nek hívnak. Segítségével a fenti extrák kihasználhatóak a
következő termékeknél: APC Back-UPS Pro, Smart-UPS, és Matrix-UPS
rendszerek.
- upsd: képes a hálózaton keresztül is menedzselni a szerverek UPS-eit.
- powstatd (-crypt): könnyen konfigurálható, főleg dumb jellegű UPS-ekhez. a
következő termékeket támogatja: CyberPower PowerSL soro, CyberPower
Power2000 1500VA, CyberPower Power99 325VA, 400VA, 500VA, 720VA,
Néhány régebbi CyberPower 385VA, 450VA modell, TrippLite Internet Office 500
UPS, több régebbi APC termék. Ez a program arra is képes, hogy több gépet is
lekapcsoljon, melyek egy tápegységről futnak.
Nem ajánlhatok a fentiek közül „legjobb” címen programot, mert nincs lehetőségem
kipróbálni az összes tápegységet. Mindenki válassza ki a neki szimpatikusat, esetleg
tegyen fel többet is és próbálja ki mind. Természetesen az itt felsorolt eszközökön kívül
is léteznek olyanok, melyekhez írtak Linux-os vezérlőprogramot (pl. MGE). Ezt a gyártó
Web-helyén megtudhatjuk.
Fontos, hogy ha lehet, úgy állítsuk be a felügyeleti szoftvert, hogy küldjön levelet
minden áramkimaradásról a rendszergazdának és legalább egy helyi dolgozónak, aki
el tudja rögtön hárítani a hibát, ha leállna a szerver.
Lényeges, hogy a szerver BIOS-át ATX-es ház esetén – ha lehet – úgy állítsuk be,
hogy áramkimaradás után azonnal bekapcsoljon, amint újra van áram.
3.5 A szükséges felhasználók/csoportok és a lemezkvóta
megtervezése
Mindenek előtt szükséges leszögezni, hogy csak azok a személyek jussanak
felhasználói jogosultsághoz (UN*X user account-hoz) a szerveren, akiknek erre tényleg
szüksége van. Egy felhasználói számlát többen ne használjanak.
A rendszergazdai jelszót kettőnél se több, se kevesebb ember ne tudhassa. Csak
olyan ember ismerje a rendszergazdai jelszót, akiben a cégvezetés nagyon megbízik.
Mint már ahogyan a II. Alapfogalmak / 6. A Web-személyzet felépítése c. fejezetben
felvázoltam, a gépen dolgozó emberek különböző funkciókat töltenek be, és más-más
feladataik vannak. Ezért más-más hozzáférési jogosultság is szükséges számukra.
A fő rendszergazda kapja meg a root jogosultságot. Ezenkívül neki is létre kell hozni
egy felhasználói számlát, mert úgy lesz a rendszer beállítva, hogy root-ként csak a
konzolról lehessen bejelentkezni (vagyis pl. ssh-val sem). Ha már bejelentkezett a
gazda, akkor – ha szüksége van rá – átléphet a su paranccsal root szerepkörbe. Ez
azért is előnyös, mert így két jelszót is fel kell törni ahhoz, hogy valaki bejusson.
Továbbá napi teendőjének nagy részét nem kell root-ként végeznie, így megkerülhet
sok csapdát és véletlen törlést is az ember. Csak azokat a tevékenységeket végezzük
root-ként, amit nem lehet user-ként megtenni.
A webgazda teszi fel és tartja karban az oldalakat. Ő a www-data csoport tagja.
Amennyiben többen is végzik ezt a munkát, legyen e csoport tagjainak olyan umask
érték beállítva, mely lehetővé teszi a csoport tagjai számára az írás/olvasást is. Ha
beírjuk a következő parancsot: umask –S, akkor érthetőbb formában tudhatjuk meg a
jelenleg érvényes umask értéket. Pl. u=rwx,g=rx,o=rx. Ha ezt be szeretnénk
állítani u=rwx,g=rwx,o= -ra, akkor megtehetjük umask –S u=rwx,g=rwx,o=
paranccsal. Figyelem! Az Apache program www-data jogokkal fut. Ha egy olyan script-
et írunk, vagy lehetőséget hagyunk a Web oldalon vagy programokban, akkor az
Apache-nak, rajta keresztül pedig a támadónak írási joga lesz a szerver tartalmára
(vagyis a Web-oldalakra.) Ezért jobb, ha egy külön csoportot hozunk létre, pl. web-
csop néven. Ebbe a csoportba tartozzanak azok a felhasználók, akik a Web-tartalmon
módosíthatnak közvetlenül a szerveren. A másik megoldás, hogy pl. a fájlok a
webgazda tulajdonában vannak, de a www-data csoport a csoportazonosítójuk.
Ideális esetben nincs sok változás és elég, ha csak a webgazda kezeli az oldalakat. Ha
viszont több ember dolgozik a szerveren, és gyorsabban változik a tartalom, pl. a
fejlesztés alatt, akkor a többi embernek is lehet adni felhasználói számlát a gépre. Ezek
az emberek legyenek a web-csop tagjai. Az általuk feltett fájlok jogosultságaival nekik
kell törődni.
Ha azt szeretnénk, hogy az Apache program beállításait is a webgazda kezelje, akkor
adjuk át neki az /etc/apache-ssl/ könyvtárat és fájljait. Ezt megtehetjük így is:
chown –R webgazda:webgazda /etc/apache-ssl
Azt is megtehetjük, hogy a fájlok a root tulajdonában maradnak, de a csoportját adjuk
át a webgazdának, majd írási jogot kap a fájlokra a csoport.
Az ideális esetben van külön Web-fejlesztői gép. Ekkor így néz ki a felhasználók listája:
felhasználó
felhasználó név
csoport tagja
rendszergazda
Web-rendszergazda
adatbázis-rendszergazda
root, rgazda
webgazda
abgazda
root, rgazda (minden jog)
webgazda, www-data, web-csop, users
abgazda, mysql, users
6. táblázat - Felhasználók listája 1.
Ha nincs külön gép, akkor a fejlesztés is a szerveren zajlik. Ekkor:
felhasználó
felhasználó név
csoport tagja
Web-grafikus
Web-programozó
Web-tervező
titkárnő
webgraf
webprog
webterv
titkarno
webgraf, webcsop, users
webprog, webcsop, users
webterv, webcsop, users
titkarno, users
7. táblázat - Felhasználók listája 2.
Igény szerint vehetünk fel más felhasználókat is, például az adatbázis feltöltéséhez és
karbantartásához. Ezek a felhasználók nem hozhatnak létre új táblákat, nem
törölhetnek meglévőket, nem módosíthatják az adatbázis szerkezetét, csupán
feltölthetik adatokkal azt. Külön jogosultságrendszerrel megadható az is, hogy melyik
táblához ki és hogyan férhet hozzá. Fontos kiemelni, hogy a MySQL saját felhasználó
és jelszó adatbázissal rendelkezik. Ezeket a jogosultságokat az adatbázis-
rendszergazda tudja kezelni. Ahhoz, hogy valakinek hozzáférése legyen az
adatbázishoz, nem kell, hogy UN*X számlája legyen a gépen. Erre csak akkor van
szükség, ha az illetőnek be kell jelentkeznie a gépre, hogy egy adatbázis klienst
használjon. Mivel a UN*X-os kliens eléggé fapados az átlagfelhasználónak, ezért
kétlem, hogy erre egyáltalán szükség lenne. Egy jól megírt Web-alkalmazással lehet
kezelni az adatbázist felhasználói oldalról.
felhasználó
felhasználó név
csoport tagja
adatbázis karbantartó 1
stb.
abkarb1
abkarb1, (mysql), users
8. táblázat - Felhasználók listája 3.
A következő fontos kérdés a lemezkvóta. Ha csak egy-két embernek van joga belépni
a szerverre, akkor általában felesleges korlátozni az egy felhasználó által maximálisan
felhasználható helyet. Ha azonban több felhasználó is helyet kap a /home
könyvtárban, akkor már hasznos lehet a korlátozás. Ha egy felhasználó esetleg
teletömné a lemezt, pl. az mp3 fájljaival, akkor a többiek számára nem maradna szabad
hely a hasznos munkához. Az, hogy kit mennyire korlátozunk teljesen személyre
szabható. Nem csak egyes felhasználókat, hanem csoportokat is szabályozhatunk.
Minden olyan partíciót, ahova az átlagfelhasználónak írási joga van, érdemes kvótákkal
ellátni. Esetünkben ez a /home, /tmp és a /var/www (a Web-csoport számára).
Mivel az utóbbit valószínűleg csak munkára használja az ember, nem biztos, hogy
korlátozni kell. A példában csak a /home partíciót korlátozom.
A kvóta két részből áll. Az első a soft limit, vagyis az a határ, melyet elméletileg
szeretnénk, hogy betartsanak. A soft limit-et át lehet adott ideig lépni (grace period –
türelmi idő), egészen a hard limit eléréséig. Ekkor új fájlokat a felhasználó már nem
írhat a lemezre, az írni kívánt adatok elvesz(het)nek. Amint letelik a türelmi idő
(általában 1 hét), a soft limit hard limit-té válik. Ilyenkor a felhasználónak le kell törölnie
néhány fájlt, hogy visszatérhessen a felső határ alá.
Korlátozni a lefoglalt blokkokat és az inode-okat is lehet. A másodikra azért lehet
szükség, mert egy rosszindulatú felhasználó sok rövid (pl. 0 bájtos) fájlt készíthet,
mellyel lefoglalhatja az összes szabad inode-ot. Ekkor – bár a lemez nem telített –
mégsem tudunk rá írni.
Az egyes felhasználók lemezkvóta-beállításait a root szabályozhatja az edquota –u
fnév paranccsal. Egyes csoportok kvótái is szabályozhatóak: edquota –g csnév
Minden felhasználó ellenőrizheti a kvótáinak állását a quota paranccsal. A
rendszergazda életét megkönnyíti a repquota parancs, mely egy adott partíció
kvótáinak állásáról készít jelentést. A quotatstats program egy gyors statisztikát
készít számunkra. A quotacheck leellenőrzi induláskor a kvótatáblázatokat. A
quotaon és quotaoff parancsokkal lehet ki és bekapcsolni egy adott fájlrendszer
kvóta-ellenőrzését. Bővebb információkért forduljunk a manuál oldalakhoz és a
dokumentációhoz.
Példámban az alsó határt (soft limit) 20 megabájtban a felsőt (hard limit) pedig 40-ben
jelölöm meg.
IV. Megvalósítás
A következőkben a Debian GNU/Linux 2.2 (Potato) változatának telepítését és
behangolását fogom bemutatni lépésről lépésre. Ennek a fejezetnek az elolvasása
inkább csak a rendszergazda-beállítottságú embereknek javasolt. Az egész fejezet
elolvasásának csak akkor van értelme, ha egy számítógép mellett ülve végigkövetjük a
teendőket. Azok számára, akik nem követik végig a feladatmegoldásomat, az egész
fejezet értelmetlennek tűnhet, mert az anyag „másik fele” a számítógép monitorán
jelenik meg (mivelhogy minden egyes képernyőképet nem tudok itt bemutatni).
Fontos feltétel, hogy addig, amíg az összes beállítást el nem végeztük a rendszeren és
le nem teszteltük széleskörűen szerverünket, NE tegyük ki élesben az Internetre. A
telepítést úgy végezzük, hogy a gép le legyen választva minden hálózatról. A tesztelést
egy Internettől elzárt, belső hálózati szegmensen végezzük (mely nem része a
produktív hálózatnak). Ekkor persze hogy lenne lehetséges az Internetről való
telepítés? - kérdezheti az olvasó. Ha mindenképp ezt a megoldást választjuk, nem baj.
Lényeg az, hogy a telepítés megkezdése előtt állítsuk be megfelelően a tűzfalat,
nehogy menet közben rögtön ránk akadjanak. Továbbá a csomagok letöltése után
kapcsolódjunk le a hálózatról. (Vagy töltsük le a csomagokat egy másik gépre, stb.)
1. Gyorstalpalás
A következőkben a „totálisan türelmetlenek” számára néhány lépésben felvázolom a
Debian GNU/Linux Potato kiadásának telepítését. Később finomhangolom a rendszert.
1.1 A szoftver beszerezése: CD-set, vagy FTP tükör.
Mi sem egyszerűbb, mint letölteni a CD ISO image fájlokat (jelenleg 3 db kompakt
lemez ) és kiíratni őket. A lemezek elérhetőek többek között az ftp.fsn.hu alól is.
Célszerű újraírható lemezre íratni az anyagot. Ekkor, ha biztonsági frissítések látnak
napvilágot, gyorsan átírhatjuk a lemezeket és nem kell kidobni azokat.
Ha nincs szélessávú elérésünk, kérjünk meg valakit a Linux-os levelező listákról, hogy
írjon nekünk CD-t megegyezés szerint. Általában anyagáron meg szokták írni a
lemezeket.
(Ne felejtsük el, hogy az első kompakt lemezről indíthatjuk a telepítést, ha az adott gép
BIOS-a támogatja ezt. Ha nem, akkor legalább 2-5 floppy-t készítenünk kell.)
Ha viszont nem akarunk a CD-kel vesződni és van szélessávú Internet-elérésünk
(értsd: legalább 1-2 Mbit/sec), akkor nyugodtan telepíthetjük a rendszert ftp-n keresztül
is. Elég csak a kernel és a „root” floppy image fájlokat letölteni, és azokat floppyra
másolni. A kernel floppyhoz tartoznak a driver lemezek. Ezeken a kernel moduljai
találhatóak. Továbbá az alaprendszer is lemezeken van, méghozzá 11 db-on. Ha 1.44-
es floppy meghajtót használunk, akkor összesen 16 db lemezre lesz szükségünk az
alaprendszer telepítéséhez. Ha az alaprendszert FTP, NFS vagy HTTP protokollokon
keresztül is be tudjuk szerezni, akkor elég 5 db floppy (rescue, root, driver-
1,2,3).
A telepítéshez szükséges fájlok a debian/dists/potato/main/disks-
i386/current könyvtárban találhatóak. (A telepítő lemezek magyar nyelvű fordítása
megtalálható az ftp://mlf.linux.rulez.org/pub/mirrors/debian-disks-hu címen. A fordítás
még nem teljes, fejlesztés alatt áll. A hivatalos tükrökön az angol nyelvű változat lelhető
fel.) Először érdemes letölteni a doc alkönyvtárban lévő dokumentációkat és
átolvasgatni azokat. A doc/ch-hardware-req.en.html fájl fontos információkat
tartalmaz a szükséges és támogatott hardver eszközökről, továbbá a telepítéshez
használt kernel és modulok milyenségéről. Ha ezt elolvassuk, sok fejfájást
spórolhatunk meg.
Az installációs folyamathoz négyféle lemezkészletet készítettek. Minden készlet
hozzáférhető egyben (loadlin-es változat), 1.2Mb, 1.44Mb és 2.8Mb-os floppy
méretben is. A floppy image fájlok a megfelelő image-méret alkönyvtárakban lettek
elhelyezve.
- A standard, általános célú készlet egyben megtalálható a fenti
könyvtárban. Ez méretben a legnagyobb, szinte minden modul le lett fordítva.
Ha nem tudjuk, hogy mire lesz szükség, ezt érdemes használni. Előnye, hogy
szinte mindennel működik, amit a Linux támogat, hátránya a nagy mérete.
- A compact változat sokkal kisebb, csak egy modul lemez tartozik hozzá.
Természetesen kevesebb hardvert támogat. Előnyös olyan esetekben, ahol
tudjuk, hogy mire számíthatunk, és a megfelelő vezérlők benne vannak
ebben a csomagban. Ez a készlet az azonos nevű alkönyvtárakban található.
Olvassuk el a README.txt fájlt bővebb információkért.
- Az idepci készlet olyan esetben használatos, amikor nincsenek SCSI-s
eszközeink (merevlemez) és PCI buszos IDE vezérlős merevlemezre akarjuk
telepíteni a rendszert.
- Az udma66 készletre akkor van szükségünk, ha a merevlemezünk ATA-66-
os IDE vezérlőre van csatlakoztatva. (pl. HPT366)
Fontos kiemelni azt, hogy ha a gépen már van egy FAT típusú fájlrendszer, akkor elég
letölteni a linux (kernel, 1Mb), drivers.tgz (modulok, 3.6Mb), base2_2.tgz
(alaprendszer, 15Mb), loadlin.exe (kernel betöltő) fájlokat és a root floppy-t.
Ezután az install.bat indításával indulhat a kernel betöltése és a telepítés
merevlemezről.
Ha floppy-s módszert válasszuk (mert pl. szűz merevlemezre akarunk telepíteni), de
nincs még kéznél linux rendszer, akkor a dosutils könyvtárban lévő programokat
letöltve (loadlin, rawwrite) segíthetjük az image-ek floppy-ra írását.
Linux alatt a dd if=image of=/dev/fd0 bs=512; sync; paranccsal írhatunk ki
egy floppy-t. Ekkor persze a rajta lévő dolgok törlődnek. Fontos, hogy hibamentes
lemezeket használjunk, mert nem lesz ellenőrizve a lemez írás közben, és esetleg a
telepítés közepén derül ki a hiba.
Az images-1.44 alkönyvtárban találhatjuk a root.bin, a rescue.bin, drivers-
x.bin és a base-x.bin lemezeket 1.44Mb-os floppy meghajtóhoz. Ez a
legelterjedtebb mostanában, a továbbiakban erre vonatkozik, amit írok.
1.2 A telepítés menete
Nézzük meg a telepítés konkrét lépéseit. Amikor már a kezünkben vannak a kész
telepítő lemezek vagy CD-k, hangoljuk be a számítógép BIOS-át a nekünk
legmegfelelőbb beállításra. Védjük le a Setup-ba való belépést jelszóval, a
rendszerindítást viszont semmiképp se. Válasszuk ki indítási célként vagy a CD-ROM
olvasót, vagy a lemezmeghajtót. A telepítés befejezése után ne felejtsük el ezt
visszaállítani úgy, hogy az első indítható egység az a merevlemez legyen, amelyikre a
rendszert telepítettük.
1.2.1 Indítás CD-ről vagy floppy-ról
Helyezzük be az indítható médiát és indítsuk el a számítógépet. Nemsokára ezt a
képet láthatjuk: (a színeket a legtöbb képen megfordítottam az olvashatóság és a tinta
kedvéért.)
2. kép - Üdvözlőkép
Nyomogassuk végig az F1..F10 billentyűket és olvassuk el az információkat. Ha
valamely hardver eszköz vezérlőjének indulási paramétert kell átadnunk (pl. I/O bázis
cím, megszakítás, stb.), akkor az tegyük meg. Általában a kernel mindent megtalál
magától, és nem kell kézzel paraméterezni. Ha a hardver eszköz valamilyen nem
hétköznapi I/O címen van, vagy a kernel modul / vezérlő nem ismeri fel magától,
tájékozódjunk, hogy kell azt paraméterezni. Alább a SCSI kártyák minta paramétereit
láthatjuk:
3. kép - Speciális indítási paraméterek
Az indításnak több lehetséges módozata van:
4. kép - Indítási metódusok
Ha minden jól megy, mi csak nyomjunk le az Enter billentyűt – ekkor elindul a kernel
betöltése és a hardver felismerése. A kernel betöltése után a rendszer jelez, hogy
tegyük be a root floppy-t. (CD esetén erre nincs szükség). Ha minden jól ment, akkor
egy üdvözlő képernyő fogad minket. Itt csak nyomjunk Enter-t.
1.2.2 Szükséges alapbeállítások, partícionálás
Először válasszunk billentyűzetet. Én az „us” billentyűkiosztást ajánlom. (És persze
angol billentyűzetet, hiszen ezt a gépet nem szövegszerkesztésre fogjuk használni.)
Mivel még nincs Linux-os fájlrendszer a merevlemezen, partícionálnunk kell azt a
tervünk alapján.
5. kép - Merevlemez partícionálás
Több lemez esetén ki kell választanunk azt, amelyiket fel akarjuk partícionálni. Jelen
esetben ez a „hda” lesz. A következő képernyőkép figyelmeztet minket, hogy a LILO
nem képes a régi merevlemezeken az 1023-as cilinder felett lévő részekről betölteni a
kernelt. Nekünk ez itt nem számít, mert az első partíció a /boot lesz, így a kernel nem
kerülhet azokra a területekre.
Ha a lemez teljesen szűz, akkor egy kérdést kapunk, hogy új MBR táblát készíthet-e a
rendszer. Természetesen válaszoljunk igennel. Ha a tábla esetleg hibás, akkor is ezt a
képernyőt kaphatjuk. Esetünkben mindenképp töröljük az egész táblát, hiszen nem
lesz más operációs rendszer a gépen. A cfdisk program segítségével feloszthatjuk a
merevlemezt. Ez egy elég könnyen használható és elég egyértelmű program (Bár én a
mai napig jobban szeretem a fapados fdisk programot. Elszántaknak ezt az utóbbit
ajánlom.)
6. kép - A cfdisk program
(A fenti ábrán lévő méret-adatok irreálisak, mert ez egy virtuális gépen belüli telepítést
mutat egy 280 MB-os lemezre.)
Hozzunk létre 3 db „primary” és 5 db „logical” szeletet (=partíciót) a „New” menüpontra
lépve. A méreteket az eredeti terv arányai szerint válasszuk meg. A „hda2” szeletnél
álljunk rá a „Type” menüpontra és válasszuk ki a 82-es kódot (Linuxswap). Amint
minden kész, nyomjuk meg a „Write” menüpontot. Ekkor válaszoljunk „yes”-szel, igen
tényleg ki akarjuk írni a táblát.
A következő lépés a swap partíció inicializálása. Válasszuk ki a megfelelő (esetünkben
„hda2”) partíciót. A szeletről minden adat törlődik.
Most a szeletek formázása következik ext2fs fájlrendszerrel. Először a „hda3” részt
válasszuk. Ne kérjünk 2.0-s kernel kompatibilitást, hiszen nem lesz rá szükségünk. A
szeleten minden adat törlődik. A telepítő megkérdezi, hogy ez-e a gyökérnek szánt
rész. Válaszoljunk igennel. Ezután sorra formázzuk meg a többi partíciót is
hasonlóképpen. Amikor a partíció felfűzési pontjáról kérdez, jelöljük ki a helyes választ
a tervünknek megfelelően. Ha a listában nem szerepel a pont, az „other” menüpontban
megadhatjuk kézzel.
1.2.3 A hálózat beállítása
Ha ezzel készen vagyunk, telepíthetjük a kernelt és a modulokat a gépre. Válasszuk ki
a floppy-t (vagy a CD-t) forrásmédiumként. Itt még nem lehet hálózatról telepíteni
sajnos, mert még nincsen a hálózati kártya vezérlője betöltve, ami a floppy-n van.
Ha a floppy-t választottuk, tegyük be a „rescue” lemezt. A tartalma felmásolódik a
gépre. Ha ez kész, a telepítő bekéri egymás után a három „driver” lemezt, mely a
kernel moduljait tartalmazza.
7. kép - Modulok kiválasztása és betöltése a modconf programmal
Ami a hálózat működéséhez feltétlenül szükséges, azt keressük meg és töltsük be. (Pl.
hálókártya vezérlő modulja) A „cdrom, fs, ipv4, ipv6, video” menüpontokban ne is
keresgéljünk, szerverünkhöz szükséges vezérlők itt úgyse lesznek. Ha SCSI-s
merevlemezünk van, akkor azt már eddig úgyis fel kellett ismernie a kernelnek. A
telepítéshez nem szükséges speciális eszközeinket pedig később is megkereshetjük a
modconf program futtatásával.
Válasszuk ki tehát a „net” menüpontot. Itt keressük ki a hálókártyánknak megfelelő
vezérlőt. Megkérdezi, hogy biztosan be akarjuk-e tölteni. „Igen”. Ezután – ha szükség
van rá – paramétereket is adhatunk a moduloknak, mint pl. I/O bázis cím. Általában a
legtöbb modul megtalálja az eszközt a szabványos címeken keresgélve. Ha a
hálókártya ISA-PnP-s, akkor lehetőleg vegyük ki PnP-ből és „jumper”-oljuk fel egy adott
megszakításra, különben a Linux nem ismeri fel egykönnyen.
8. kép - Hálózati modulok tallózása
Ha a következő üzenetet kapjuk: „Installation succeeded”, akkor minden rendben,
sikerült. Ha „…failed” a szöveg vége, akkor próbálkozzunk mással, vagy másik
báziscímmel, megszakításokkal.
Ha már nincs más betölteni való eszközvezérlőnk, lépjünk ki a modconf-ból és
válasszuk a Hálózat beállítása menüpontot. Elsőként adjuk meg a szerver nevét. Ezt
mindenki saját fantáziájára bízom. Legyen minél ötletesebb és ritkább (pl. egy szép női
név). Én a példa számára az egyszerűség kedvéért az „alfa” nevet választottam.
Ha esetleg több hálókártya is lenne a gépben, akkor ebben a lépésben ki kell
választani, hogy melyiket konfiguráljuk. Legyen az eth0 eszköz.
Most az IP cím megállapításának módja következik. A telepítő felajánlja, hogy DHCP,
vagy BOOTP protokoll segítségével szerez egy dinamikus IP címet. Nekünk ez nem jó,
hiszen Web-szerverünknek statikus IP címe van. „Nem” a válasz. A következő kérdésre
adjuk meg a statikus IP címünket, a hozzá tartozó hálózati maszk értékét, és az
(Internet felé) átjáró IP címét. Ezek után a megvásárolt domén-nevet írjuk be.
Esetünkben ez boresszormegyar.hu. A következő lépés a névkiszolgálók IP
címeinek megadása. Adjuk meg az elsődleges és másodlagos név-szerverek címeit
szóközökkel elválasztva.
1.2.4 Alaprendszer telepítése, újraindítás a merevlemezről
Egy telepítési médiumot kell kiválasztani. Ha CD-lemezeink vannak, akkor semmi
probléma, indulhat az alaprendszer telepítése. Nyomjunk párszor Enter-t. Az
alapbeállítások célravezetőek.
Floppy esetén, ha az alaprendszert is hálózatról akarjuk letölteni (miért is ne?), akkor
válasszuk ki a hálózatot. Ha valahol a Debian tükör ki van exportálva NFS
segítségével, akkor azt is használhatjuk. Alapállásban egy HTTP címről szeretné
letölteni az alaprendszert, mely messze Amerikában található. Szerencsére a
http://ftp.fsn.hu/ftp:80 alatt találunk megfelelő magyar tükröt. Írjuk be ezt a cím helyett.
Ha az alaprendszert is kiírtuk floppy-ra, és nem akarunk / tudunk hálózati telepítést,
akkor egyenként tegyük be a lemezeket.
Miután az alaprendszert sikerült telepíteni, a rendszer beállítása következik. Itt meg kell
adni az időzónánkat. Válasszuk ki a CET-et (Central European Time). Ekkor kérdést
kapunk a hardver óra felől. Mivel csak ez a rendszer lesz a gépen, állítsuk a gépidőt a
GMT-hez. (Ez a 0-s időzóna).
A gép merevlemezének indíthatóvá tétele a következő feladat. A LILO-t tegyük az
MBR -be, vagyis válasszuk az első lehetőséget. Ha van még egy üres floppy-nk,
akkor készíthetünk egy boot-floppy-t. Mivel a rescue floppy segítségével is be tudunk
jutni a rendszerbe, ezt elhagyhatjuk.
Vegyük ki a telepítő médiumot a meghajtóból, nehogy az induljon el a merevlemez
helyett! A felmerülő „tényleg mehet-e az újraindítás” kérdésre ezután válaszoljunk
igennel.
1.2.5 A jelszórendszer beállítása. („MD5”, „Shadow password”)
Miután a rendszerünk felállt, megkérdezi a telepítő, hogy akarunk-e MD5-ös
jelszókódolást. Természetesen akarunk, hiszen ekkor maximum 8 karakter helyett
maximum 127 karakteres jelszókat is használhatunk, ami nagyban növeli a
biztonságot. Ezután válaszoljunk szintén igennel, akarunk árnyék-jelszófájlt (shadow),
ez is közelebb visz a biztonsághoz.
A következő lépés a rendszergazdai (root) jelszó megadása. Mostanra már ezt is
kitaláltuk a tervünk szerint. Írjuk be kétszer.
Hozzunk létre legalább egy felhasználót, méghozzá a rendszergazdáét, az „rgazda”
nevűt. (A telepítő segítségével.) Adjuk meg a nevet, a valódi nevet és kétszer a jelszót.
Most a telepítő észrevette, hogy a PCMCIA modulokat nem is használjuk, nincs ilyen
eszköz a gépben. Bátran távolíttassuk el vele.
1.2.6 Az „apt” program beállítása
A következő lépés az apt program letöltési forrásának beállítása. Itt kell megadnunk,
hogy a Debian tükör (a CD is annak számít valamilyen mértékben) hol található. Innen
fogja leszedni a csomaglistát. Ezután kezdhetünk csak neki a csomagok
kiválasztásának. CD-s telepítés esetén válasszuk ki a „cdrom” menüpontot és az
alapértelmezett beállítások kiválasztásával biztosan sikerrel járunk. Floppy-s telepítés
esetén válasszuk az „ftp” menüpontot.
9. kép - Az APT program beállítása
Ekkor kérdést kapunk: akarunk-e a non-US tükrökről származó (vagyis kriptográfiát
tartalmazó) programokat használni. Mivel a szervergép nem az USA-ban helyezkedik
el, válaszoljunk „Igen”-nel. A következő kérdés a non-free, majd a contrib
szekciókra vonatkozik. Itt is válaszoljunk igennel.
Ekkor a Debian tükrök listáját kínálja fel. Először válasszuk ki Magyarországot
(Hungary), aztán a hozzánk sávszélességben közelebb eső szervert. Én az
ftp.hu.debian.org–ot választom.
Biztos, ami biztos, a legjobb, ha az apt-t saját kézzel konfiguráljuk, ugyanis ekkor
megadhatjuk a biztonsági frissítéseket tartalmazó könyvtárat is. Válasszuk ki az „Edit
sources by hand” menüpontot. Ekkor egy egyszerű és jól használható
szövegszerkesztő jön elő (ae). Módosítsuk a rendszert a következőképp:
deb ftp://ftp.hu.debian.org/debian potato main contrib non-free
deb ftp://ftp.hu.debian.org/debian-non-US non-US/main non-US/contrib non-US/non-free
deb ftp://ftp.hu.debian.org/debian dists/potato-proposed-updates/
Az első sorban a „fő” debian szervert jelöljük meg, melyen nincsenek kriptográfiát
tartalmazó programok. Itt három részre oszlik a rendszer: a fő, a nem-szabad és a nem
szabadhoz kapcsolódó programokra. A második sorban ugyanez igaz, de a titkosítást
tartalmazó programokra. A harmadik sor a biztonsági frissítések külön könyvtára.
A sorok jelentése: csomag protokoll://szervernév/tükörgyökér változat szekciók
- csomag: deb: bináris csomag, vagyis a .deb fájlok kellenek (forráskód
esetén „deb-src”)
- protokoll: lehet „ftp”,„file” vagy „http”
- szervernév: a tükör helye, domén-név, vagy IP cím
- tükörgyökér: az adott szerveren belül hol kezdődik a tükör (melyik
alkönyvtárban)
- változat: lehet „stable” „unstable” „frozen”. Ez mind a három egy-egy
szimbolikus kötés (link) az adott állapotban lévő változathoz. Az írás
pillanatában a Potato még „frozen” állapotban van , ezért inkább direkt
módon határozom meg annak a helyét.
- szekciók: a használni kívánt szekciók egymástól üres közzel elválasztva.
Mentsük el a változtatásokat (a képernyő tetején segítség olvasható, a „^” jel a Control
billentyűt jelenti.) Ekkor az apt-get program letölti a csomaglistát a szerverről. Ha ez
sikerült mehetünk tovább. Ha nem, akkor szerkesszük át a forráslistát.
Most azt kell eldönteni, hogy a csomagokat egyenként (advanced) válogatjuk ki, vagy
egy előre elkészített összeállítást használjunk. Én az egyenkénti kiválasztást javaslom.
Igaz ez sokáig eltarthat, de így pontosan meg tudjuk határozni, hogy mi kell és mi nem.
A türelmetlenek válasszák ki a Web-server pontot. Ekkor egy általános csomaglista
alapján kerülnek telepítésre, ami eléggé különbözik az általam felsoroltaktól.
Később
? az apt-get update paranccsal frissíthetjük a csomaglistát,
? az apt-get upgrade paranccsal frissíthetjük a csomagokat,
? az apt-get dselect-upgrade paranccsal a dselect által kiválasztott új
csomagokat is telepíthetjük,
? az apt-get install csomagnév paranccsal letölthetünk és telepíthetünk egy
csomagot
? az apt-get remove csomagnév paranccsal eltávolíthatunk csomagokat
? és még sok mást is tehetünk, ha elolvastuk a dokumentációt.
1.2.7 A „dselect” program
A dselect program használata igen egyszerű és egyértelmű, ha az ember már ismeri.
Más rendszerekhez szokott embernek ez először nagyon ijesztő lehet, mert ez egy
igazi UN*X-os szemléletű program. Először is olvassuk el a súgóját, hogy mit hogyan
kell csinálni, mert különben nem megyünk semmire. (A súgó a 2. menüpont alatt érhető
el.)
10. kép - dselect - Főmenü
A főmenü 7 pontból áll.
- 0. Access: ki tudjuk választani, hogy milyen médiáról telepítjük a
csomagokat. Ez a módszer lehet most apt, floppy és nfs. (CD esetében
cdrom, multicd is), továbbá később lehet http, ftp is. Mivel az apt már be van
állítva, ezzel ne is foglalkozzunk.
- 1. Update: itt indíthatjuk a csomaglista frissítését. Esetünkben ez az apt-
get update parancsnak felel meg.
- 2. Select: Ez az egész program szíve-lelke. A csomaglistában tallózhatunk,
és a kívánt csomagokat kijelölhetjük telepítésre, megtartásra, törlésre, vagy
teljes törlésre. Részletesen később.
- 3. Install: Ezzel indíthatjuk a csomagok letöltését (Internet esetén) vagy
bemásolását (CD esetén). Miután a csomag a rendszerbe került, ki lesz
csomagolva, majd be lesz állítva. Bizonyos csomagok interaktivitást
igényelnek a rendszergazdától beállítás közben.
- 4. Config: Ha egy csomagot az előző menetben nem tudott a rendszer
beállítani, de már ki lett bontva, akkor itt újra próbálkozhatunk.
- 5. Remove: A törlésre jelölt csomagok eltávolítását itt lehet elindítani.
- 6. Quit: A dselect programból való kilépés.
Belépve a „Select” menübe egy üdvözlő képernyőt kapunk, mely tájékoztat a program
használatáról. Ezt itt olvassuk végig. Nyomjuk meg a „?” gombot, majd a „k” betűt.
Ekkor az összes felhasználható funkció és a hozzá tartozó billentyű fel lesz sorolva.
11. kép - dselect - Súgó
Navigálni a csomagok között a kurzorgombokkal lehet. Ha egy csomagot telepíteni
akarunk, jelöljük meg a „+” gombbal. Ha törölni akarjuk, akkor jelöljük meg a „-”
gombbal. Ha azt akarjuk, hogy a csomaghoz tartozó konfigurációs fájlok is törlődjenek,
akkor jelöljük meg a „_” gombbal. Ha azt akarjuk, hogy a csomag ne frissüljön, akkor
jelöljük meg a „=” gombbal. Ha később mégis azt szeretnénk, hogy frissüljön a csomag,
jelöljük meg a „:” gombbal.
A csomagokat többféle szempont szerint is sorba lehet rendezni. Nyomjuk meg az „o”
gombot egyszer, az „O”-t pedig kétszer. Ekkor szekció szerint fogjuk rendezni a
csomagokat. Véleményem szerint telepítéskor ez a legjobb sorrend, karbantartáskor
viszont csak egyszer nyomjuk meg az „O”-t (ekkor aszerint is rendezi, hogy az adott
csomag telepítve van-e már vagy nincs).
A csomaglistából az Enter leütésével lehet kilépni, ezt eleinte nehéz megszokni. „Q”-val
felülbírálhatjuk a csomagfüggőségeket. Esc-el pedig a változtatások elhagyásával
léphetünk ki.
A csomagnevek között keresni a „/” gomb lenyomásával lehet. Ha ezt a nevet akarjuk
továbbra is kerestetni, akkor a „\” gombbal megtehetjük.
A súgóból a Space billentyűvel léphetünk ki. Először lehet, hogy nem érthető mi az a
három „*” vagy három „-„ egymás mellett. Nyomjuk meg a „v” betűt és rögtön
megértjük.
A csomagok kiválasztása
Miután beléptünk a csomaglistába először is nyomjuk meg az „o”-t majd kétszer az „O”-
t. Ezután a „/” gombot leütve keressük meg egyenként a következő csomagokat és
jelöljük meg őket telepítésre a „+” gombbal. Ha egy csomag egy másiktól függ, egy új
képernyő fog megjelenni. Ettől ne ijedjünk meg. Ha valami függ egy másiktól
(depends), akkor a program automatikusan megjelöli és megkér minket, hogy fogadjuk
el ezt a beállítást. Ha mégse tetszene a függés okozta változás, akkor nyomjuk meg az
„R” gombot. Ha megfelel így is, akkor nyomjunk Enter-t. Ha csak javasolja a csomag
egy másik csomag telepítését is (recommends, suggests), akkor ő nem jelöli meg, a
döntést teljesen ránk bízza. Javaslatom, hogy tartsuk magunkat a következő listákhoz.
„+”: cruft, debconf, logcheck, vlock, members, memstat, quota, slay, suidmanager,
syslog-ng, syslog-summary, systune, tmpreaper, whowatch, hdparm, watchdog, slocate,
kernel-image-2.2.16, dpkg-mountable, dpkg-multicd, doc-base, manpages-hu, joe,
postfix-tls, libssl09, openssl, screen, ud, ippl, snort, traceroute, tripwire, mysql-
client, mysql-server, apache-ssl, apache-common, ssh, cracklib-runtime, cracklib2,
wipe, analog, php3, php3-mysql, webalizer, wget
12. kép - dselect - Csomaglista
A következő csomagok rövid összefoglalóját olvassuk el, és igény / hardver
konfiguráció szerint válasszuk ki azokat telepítésre, melyek számunkra szükségesek,
vagy hasznosak. Semmiképp se válasszuk ki mindet, mert több olyan csomag is van,
melyek hasonló, vagy ugyanazon funkciót töltik be , továbbá egyes csomagok csak
speciális hardverelemek esetében szükségesek.
esetleg „+”: anacron, linuxconf, mon, makepasswd, pwgen, raidtools, raidtools2, sudo,
alien, apcd, autolog, bpowerd, ext2resize, mtx, genpower, powstatd, timeoutd, upsd,
apache-doc, debian-guide, dhelp, doc-rfc, dpkg-www, dwww, info2www, sysadmin-guide,
ftape-doc, grep-mail, pkg-order, eject, ncftp, netcat, linuxlogo, lm-sensors, bing,
echoping, fping, fwctl, icmpinfo, netmask, netselect, ntop, queso, lshell, rdate,
tcpdump, nstreams, asp, mason, netdig, nmap, , libapache-mod-auth-pam, wdsetup, idled,
doc-html-w3, nwm, cronolog, ldp-nag, mysql-doc, tdlug, wdg-html-ref, lasg, bigbrother,
gnupg, lynx-ssl, zip-crypt, unzip-crypt, powstatd-crypt, cdrecord, mkisofs, afbackup,
afbackup-client, amanda-*, apcupsd, bzip2, dlocate, dump, hwtools, kbackup-*, knl,
ltrace, mc, mc-common, parted, setcd, sformat, symlinks, sysutils, taper, tob, tree,
vfu, yard, fonty, ftape-util, set6x86, statserial, weblint, zope-*, wml, linbot, www-
mysql
A következő csomagokat pedig jelöljük ki eltávolításra („_”), vagyis - most még nem-
telepítésre. A zárójelben lévő csomagokat én törlésre ajánlom, viszont mások esetleg
hasznosnak találhatják, ezért tessék elolvasni a hozzájuk tartozó információt és igény
szerint választani.
„_”: bison, flex, dpkg-perl, tetex-bin, bin86, gcc, fbset, (elvis-tiny), ppp,
pppconfig, g++, libstdc++-210-dev, (isapnptools), pump, (fdutils), xviddetect, tetex-
base, gdb, libc6-dev, make, dpkg-dev, rcs, manpages-dev, (nvi), emacs20, emacs-common,
(perl-5.005-doc), (perl-5.005-suid), m4, libindent, exim, libopenldap1, libopenldap-
runtime, libpcre2, liblockfile1, libpng2, tetex-lib, dialog, (mutt), (procmail), dc,
bc, gpm, fingerd, lpr, nfs-common, nfs-kernel-server, pidentd, talk, talkd, telnetd
Ha ezekkel végeztünk, nyomjunk Enter-t és ekkor kikerülünk a főmenübe.
Indítsuk el az „Install” menüpontot. Ez a parancs megfelel az apt-get dselect-
upgrade parancsnak. Az én konfigurációm esetében mindössze 35 MB-nyi csomagot
kell letölteni. Kibontás után kb. 55 MB helyet foglal a rendszeren.
1.2.8 A feltelepített programok konfigurálása
Miután az összes kért csomag lejött a tükörről, a rendszer megkérdi, hogy a
programokat milyen felületen szeretnénk beállítani. A választási lehetőségek a
következőek: Dialog (dialógus ablakok), Text (hagyományos, egyszerű szöveges
felület), Web (böngészővel), Noninteractive (mindenből az alapbeállítást tárolja el,
később kézzel beállíthatjuk, amit akarunk. Bár én legjobban a sima szöveges módot
szeretem, a kezdők kedvéért a barátságosabb dialógusos módszert tárgyalom a
következőkben.
debconf beállítása: A következő kérdés az, hogy milyen szintű kérdések alatti
prioritású kérdésekkel nem akarunk foglalkozni: medium, critical, high, low. Válaszunk
legyen „low”, tehát minden kérdést megválaszolunk. A következő kérdés arra
vonatkozik, hogy az adott csomag kérdéseire adott válaszunkat megjegyezze-e és azt
válaszolja automatikusan minden újabb frissítésnél. Most még válaszoljunk nemmel,
hiszen lehet, hogy valamit elrontunk. A kérdés furfangos: megmutassam-e újra és újra
a régi kérdéseket: Igen. Később ezt javasolt Nem-re változtatni a dpkg-reconfig
debconf parancs segítségével.
A csomagok felépítésükben hasonlítanak a .tar.gz fájlokra, telepítő / eltávolító script-
ekkel vannak ellátva, stb. Egy csomag telepítése két részből áll: először kibontja a
csomagból a fájlokat, és a megfelelő helyre másolja őket (unpacking). A második
szakaszban pedig beállítja a konfigurációs állományokat és futtatási jogot ad a
futtatható fájloknak (setting up). Ha a beállításhoz szükség van a rendszergazda
döntésére is, akkor megkérdezi.
A következőkben az én általam összeállított csomaglista beállító kérdéseit sorolom fel.
Más lista (csomagok) esetén más kérdések lehetnek.
Az „unpacking” fázisban:
netbase:
1. adjuk meg, hogy mely IP tartomány helyi: 127.0.0.1/8 (mivel igazi IP címünk van, nem adunk meg belső hálózati
tartományokat.)
2. adjuk meg mely hálózati interfészekkel rendelkezünk, pl.: eth0 eth1
logcheck: Engedélyezzük, hogy felülírja az /etc/cron.d/logcheck fájlt, ha ezt kéri.
mysql-server:
1. figyelmeztet, hogy adjunk meg egy adatbázis rendszergazda felhasználót. Ezt majd később megtesszük.
2. Megkérdezi, hogy ha a mysql-server teljes eltávolítását kérjük, akkor letörölje-e az adatbázisainkat is.
Válaszoljunk nemmel.
snort: (portscan-detektor): adjuk meg azt az IP tartományt, ahonnan portscan támadásokat várunk. Mivel az
interneten vagyunk, ez legyen a saját IP címünk/tartományunk. (Vagy az Internet Kijárat IP-je, stb.)
ssh: az ssh kliens kapjon-e SUID bitet. Semmiképp, mivel nem akarunk .rhosts azonosítást. Nem a válasz.
lilo: megkérdi, hogy az új LILO fájlok segítségével hozzon-e létre új indítót. Igen.
A következőkben számos csomag kerül kibontásra és telepítésre. Ezek nem igényelnek interaktivitást.
A következő kérdés az /etc/motd (Message of the day) cseréje. Y,I: igen, N,O: nem, D: megmutatja a kettő
közötti különbséget, Z: majd később döntök. Válasszuk az Y-t. A csomagok telepítése folytatódik.
A „setting up” fázisban:
netbase:
1. kikapcsoljuk-e az inetd.conf-ban a DoS veszélyes szolgáltatásokat? Igen.
2. Az ipfwadm parancs legyen-e ipchains kompatibilis átjátszó? Igen.
3. Akarunk-e IPv6-os címeket az /etc/hosts-ban. Nem.
apache-ssl: Az SSL szerverhez készül egy azonosító. A cégünkről kell adatokat megadnunk, hogy majd a kliens
azonosíthassa szerverünket. Írjuk be az ország nevét (HU), a megye nevét (pl. Zala), a város nevét, a cég nevét, az
eszköz titulusát: Web-szerver, majd végül a szerver nevét: www.boresszormegyar.hu, email címét (pl.
info@boresszormegyar.hu.
postfix-tls:
1. kérdést tesz fel, hogy a levéltovábbítás előtt az átmeneti fájlok olvashatóak legyenek-e a gépen fenn levő
felhasználók által (gyorsabb út), vagy legyen egy külön felhasználó (postdrop) létrehozva, és ekkor csak a
rendszergazda láthatja ezeket a fájlokat (lassabb, de biztonságosabb út). Válaszunk Igen.
2. Adjuk meg a gépünk nevét: alfa.boresszormegyar.hu
3. Elindítsa-e a levelező démont? Igen.
13. kép - a “snort” program beállítása
snort:
1. Mikor induljon el a portscan detektor? „boot” vagyis induláskor.
2. Melyik interfészen figyeljen? Amelyiken az Internetre vagyunk kapcsolódva. Nekem eth0.
3. A hálókártya hallgatózó üzemmódját kikapcsolja-e? Igen.
4. A következő kérdésre Igen legyen a válasz, itt nem részletezem.
5. Addicionális paraméterek: nyomjunk egy Enter-t.
6. Ki kapja meg email-ben a napi statisztikákat: adjuk meg e-mail címünket.
7. Itt is nyomjunk Enter-t
webalizer:
1. hova tegye a kész statisztikákat? Ha ki akarjuk tenni a Web-re, akkor nyomjunk Enter-t (nem ajánlott). Adjunk
meg neki egy nem nyilvános könyvtárat.
2. Melyik gépnek nézzük meg a statisztikáit? Adjuk meg az egyik virtuális Web-szerverünk nevét.
php3: elindítsam az apache-ssl beállítóját, hogy a modult betöltse? Igen.
apache-ssl: ki a Web-szerver rendszergazdája (e-mail). Az alapértelmezés jó lesz, lásd későbbiekben.
3. Mi legyen a nyilvános neve a Web-szervernek? www.boresszormegyar.hu
4. megkeresi a dinamikusan betölthető modulokat. Ezekeket majd később beállítjuk kézzel. Elmentsem a
beállításokat? Igen.
5. Újraindítsam az Apache-ot? Igen.
lshell: (korlátozott shell, az átlagfelhasználók jogait tudjuk vele korlátozni belső DoS támadások kivédésre) A
kérdésre válaszoljunk Igennel. Figyelem! Azoknak a felhasználóknak, melyeknek sok erőforrást biztosítunk, adjuk
vissza később a /bin/bash rendes shell-t az /etc/passwd fájlban!
lynx-ssl: adjuk meg kezdőoldalnak a saját gépünket.
tripwire: (fájl integritás auditáló program) kinek küldje el a rendszeren észlelt változásokat? Adjuk meg a gyakran
olvasott e-mail címünket.
watchdog: (hasznos őrszem DoS ellen): elindítsa-e minden induláskor a démonját? Igen. És most? Igen.
2. Finomítás
Természetesen az eddig elvégzettek finomhangolásra szorulnak. Egy rendszer akkor
van készen, ha optimalizáltuk az adott hardverhez és az adott igényeinkhez. A
finomítás elég időigényes is lehet, de hosszú távon megéri. A finomhangolás legfőbb
célja a sebesség és a biztonság fokozása. Persze a kényelem se az utolsó szempont.
(Ez alatt nem a biztonság hiányát, vagy háttérbeszorítását értem. Hiszen maga a
biztonság is kényelmet nyújt.)
Kezdetnek – a következő lépések magyarázatára - elolvashatjuk ezt a cikket [21].
2.1 Első lépések
1. Első lépésként tegyük a /root könyvtárat olvashatatlanná mások számára:
chmod o-xr /root Tegyük meg ezt továbbá minden felhasználói könyvtárral is,
hogy a felhasználók egymás személyes anyagába ne nézhessenek bele: chmod
o-xr /home/*
2. Állítsuk be a TCP SYN-flood elleni védekezést : szerkesszük meg az
/etc/network/options fájlt és írjuk be ezt a sort: syncookies=yes , továbbá
egy ilyen sornak is szerepelnie kell: spoofprotect=yes Ezután állítsuk le,
majd indítsuk újra a hálózati interfészt: /etc/init.d/networking stop;
/etc/init.d/networking start
3. Változtassuk meg az /etc/default/rcS fájl utolsó sorát FSCKFIX=no –ról yes-
re. Ezzel elérjük, hogy ha a rendszer hibásan állna le és az fsck program beindul,
annak minden kérdésére válaszoljon yes-el a rendszer, különben rendszergazdai
beavatkozásra lenne szükség a helyszínen. (Vagyis minden felmerülő hibát
automatikusan kijavít.)
4. Készítsük el a következő ipchains táblát, pl. a /root/szabalyok.sh fájlba:
#!/bin/sh
MYIP=”sajátIP”
# IPChains szabályok
# Az alapártelmezett viselkedés tiltó (–P = Policy)
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# Kitöröljük az előző szabályokat (-F = Flush)
ipchains -F
# Befelé jövő kérések (-A = Add, -p procotol, -i interface, -s source, –d destination)
# Ezeken a portokon lehet kérni szolgáltatást
ipchains -A input -p tcp -i eth0 -j ACCEPT –s 0.0.0.0/0 -d $MYIP 80
# a többihez nem írom oda a –s 0.0.0.0/0 (bárhonnan)-t mert ez az alapértelmezés
ipchains -A input -p tcp -i eth0 -j ACCEPT -d $MYIP 443
ipchains -A input -p tcp -i eth0 -j ACCEPT -d $MYIP 22
ipchains -A input -p tcp -i eth0 -j ACCEPT -d $MYIP 25
# Ahhoz, hogy a belső gépről is tudjunk kapcsolódni kifelé, szükség van egy
# befelé jövő kapcsolati portra is. Mivel ez tetszőleges lehet, ezért tiltsunk
# le minden olyan csomagot, mely kapcsolódni próbálna a portjainkra (-y = SYN flag)
ipchains -A input -p tcp -y -i eth0 -j REJECT -d $MYIP
# itt viszont megnyitunk minden portot (ACK, FIN, ACK+SYN flag-es csomagok jöhetnek)
ipchains -A input -p tcp -i eth0 -j ACCEPT -s 0.0.0.0/0 -d $MYIP
#Megendedunk néhany ICMP típust a helyes működés érdekében
# A “nagyok” javaslata alapján ezeket szabad beengedni:
# echo-reply (echo-request) time-exceeded destination-unreachable source-quench
# (a következőket egyenként egy sorba kell írni)
ipchains -A input -p icmp -i eth0 -j ACCEPT -d $MYIP --icmp-type echo-reply
ipchains -A input -p icmp -i eth0 -j ACCEPT -d $MYIP --icmp-type echo-request
ipchains -A input -p icmp -i eth0 -j ACCEPT -d $MYIP --icmp-type time-exceeded
ipchains -A input -p icmp -i eth0 -j ACCEPT -d $MYIP --icmp-type destination-
unreachable
ipchains -A input -p icmp -i eth0 -j ACCEPT -d $MYIP --icmp-type source-quench
# a localhost-nak megengedhetjuk a működést az lo interfészen
ipchains -A input -p all -i lo -j ACCEPT -s 127.0.0.0/8 -d 127.0.0.0/8
ipchains -A output -p all -i lo -j ACCEPT -s 127.0.0.0/8 -d 127.0.0.0/8
# viszont meg kell tiltanunk azt, hogy valaki a 127.0.0.0-s tartományból
# küldjön csomagot a nem-hurok interfészeken:
ipchains -A input -j DENY -l -s 127.0.0.0/8 -i ! lo
# a kifelé mehet minden, tcp, udp, icmp, stb.
ipchains -A output -p all -i eth0 -j ACCEPT -s $MYIP -d 0.0.0.0/0
A fenti lista feltételezi, hogy csak egy Ethernet interfészünk és egy IP címünk van.
Több hálózati kártya és IP cím esetén értelemszerűen módosítsuk, vagy egészítsük ki
a listát. Ha nem gépeltünk el semmit, és a teszt is működőképesnek mutatja a
rendszert, akkor szerkesszük meg. Ha kész, futtassuk le a fájlt: sh
/root/szabalyok.sh majd tároltassuk el a beállításokat az ipchains-save >
/etc/default/ipchains.rules paranccsal. A szerver leállása esetén ezt a listát
induláskor újra be kell tölteni. Lényeges, hogy a lista még a hálózati interfészek
felhúzása előtt töltődjön be. Ezt megtehetjük úgy is, hogy átszerkesztjük a
networking script-et, vagy írunk egy egyszerű indító script-et
/etc/init.d/ipchains-rules.sh néven.
#!/bin/sh
echo “Restoring IPChains rules…”
/sbin/ipchains-restore < /etc/default/ipchains.rules
Tegyük a fájlt futtathatóvá: chmod a+x /etc/init.d/ipchains-rules.sh Hogy
induláskor ez el is induljon, egy szimbolikus linket kell elhelyeznünk az /etc/rcS.d
könyvtárban:
ln –s /etc/init.d/ipchains-rules.sh /etc/rcS.d/S38ipchains-
rules.sh (Ugyanis a networking a 40-es számot viseli.)
1. Szerkesszük meg az /etc/host.conf fájlt a következőképp:
order hosts,bind # mi a név-lekérdezés sorrendje
multi on # egy névhez az összes hozzá tartozó IP-t adja vissza
nospoof on # a DNS átejtést próbálja kiküszöbölni
spoofalert on # az átejtési kísérletet naplózza
6. ippl: IP Protocol Logger, vagyis egy csomagforgalom naplózó. Később
segítségünkre lehet betörés utáni nyomozásra. Olvassuk el a manuált ,
szerkesszük meg az /etc/ippl.conf-ot, majd indítsuk újra a démont
(/etc/init.d/ippl restart).
runas nobody # Milyen jogokkal fusson
noresolve all # nem kell DNS feloldás, mert lassít
# ident # nem kell ident kikeresés, mer ez is lassít
# Alapesetben a syslog()-on keresztül naplóz, de
#a három protokollt külön logfájlba is helyezhetjük
#log-in tcp /var/log/ippl/tcp.log
#log-in udp /var/log/ippl/udp.log
#log-in icmp /var/log/ippl/icmp.log
run icmp tcp # csak az icmp-t és a tcp-t naplózzuk
logformat normal all # a log bőeszédűsége: short / normal / detailed
ignore icmp type echo_reply # a ping csomagokat nem naplózzuk
log options ident,resolve tcp port 22 # az ssh-s kapcsolatokat lenyomozzuk
Ahhoz, hogy szét tudjuk válogatni az ippl üzeneteit, helyezzük el ezt a három sort
az /etc/syslog-ng/syslog-ng.conf-ba, majd indítsuk újra a syslog-ng-t.
destination ippl { file(“/var/log/ippl.log”); }; # ide fognak kerülni az üzenetek
filter f_ippl { program(ippl); }; # ennek a szűrőnek a segítségével
log { source(src); filter(f_ippl); destination(ippl); };
7. Ha szükség van rá, állítsunk be a kernelnek számunkra megfelelő értékeket a
systune program segítségével (ha telepítve lett.) Szerkesszük meg az
/etc/systune.conf fájlt.
# 2.2 és 2.4 kernelek beállításai
# az alapértelmezett egyszerre nyitott fájlok száma 4096
# Amennyiben TÉNYLEG szükség van rá a nagy forgalom és a sok fájl
# miatt, (olvassuk el először a dokumentációt!) az értéket megnövelhetjük így:
/proc/sys/fs/file-max:16384
# a következő paraméter hasonlóképpen szabályozza az inode számokat:
/proc/sys/fs/inode-max:16384 # eredetileg 8192
Ha változtattunk valamit a beállításokon, érvényesítsük ezeket:
/etc/init.d/systune restart
8. Mentsük el floppy lemezre a partíciós táblát. Ez nagyon előnyös lehet később, ha
esetleg valamilyen hiba miatt megsérülne az.
mount /floppy
dd if=/dev/hda of=/floppy/mbr.gépnév.dátum bs=512 count=1
Visszatölthetjük később ezzel a paranccsal:
dd if=/floppy/mbr.gépnév.dátum of=/dev/hda bs=1 count=64 skip=446 seek=446
9. Készítsünk egy mysql rendszergazda jelszót, mely különbözzön a
rendszergazdai jelszótól: mysqladmin –u root password új-jelszó
Ezután végezzük el a következőket:
- hozzunk létre szövegszerkesztővel egy /root/.my.cnf fájl ezzel a
tartalommal:
[mysqladmin]
user = root
password = új-jelszó
- ha esetleg nem root-ként készítettük volna a fájlt:
chown root:root /root/.my.cnf
- Mindenképp: chmod 0600 /root/.my.cnf
Ezzel elértük, hogy titkos jelszavat adtunk az adatbázis rendszergazdának és
még a szerver is jól fog funkcionálni (különben induláskor és leálláskor is jelszót
kérne, ami nem lenne jó, ha nem is vagyunk gépközelben). Ezt a jelszót adjuk át az
adatbázis-rendszergazdának is, hogy egyáltalán tudjon valamit kezdeni a
rendszerével és létrehozhassa a felhasználóit.
Ahhoz, hogy a mysql hibaüzeneti magyarul jelenjenek meg, keressük meg ezt a
sort és módosítsuk az /etc/mysql/my.cnf fájlban
language=/usr/share/mysql/hungarian
Rengeteg apró trükk is számba jöhet, mely mind a kényelmünket szolgálja. Például
sokkal használhatóbb a héj, ha a héj „kérdése” így néz ki:
[webgazda@alfa:/usr/doc/]$ Ezt úgy érhetjük el, ha a saját .bashrc-nkbe ezt
írjuk be: PS1='[\u@\h:\w]\$'
Egy minta .bashrc:
set meta-flag on # ezek a magyar bill. kezeléshez szükségesek
set convert-meta off
set output-meta on
PS1='[\u@\h:\w]\$' # ez állítja be a shell prompt-ot
#\u az felhasználó neve, \h a gépnév, \w pedig az aktuális könyvtár
export PS1 # ezzel pedig közzétesszük azt magunknak
umask 027 # állítsuk be az umask értékét
# ez annyit tesz, mint umask –S u=rwx,g=rx,o=
export LS_OPTIONS='--color=auto -h' # kellemes színeket kapunk az ls parancshoz
eval `dircolors`
alias ls='ls $LS_OPTIONS' # ezzel érvényesítjük
alias ll='ls $LS_OPTIONS -l' # legyen egy-két rövidebb parancs a hosszú
alias l='ls $LS_OPTIONS -lA' # paraméterezés helyett
HISTFILESIZE=0 # ez biztonsági okok miatt hasznos, ekkor nem
# olvasható el, hogy milyen parancsokat használtunk eddig
EDITOR=/usr/bin/joe # ha nem adjuk meg, az alap szövegszerkesztő a “vi”
Ha ezt az /etc/skel könyvtárban helyezzük el, akkor minden új létrehozott
felhasználónak ez kerül be a könyvtárába.
Készítsünk egy /etc/environment fájlt a következő tartalommal: LANG=hu_HU
Ezután, amikor lehet, magyarul fognak megjelenni az üzenetek. Mivel ahhoz, hogy ez
érvénybe lépjen, újra be kellene jelentkezni, ezért írjuk be ezt a parancssorba: export
LANG=hu_HU.
Magyar ékezetes kiosztásra az angolról loadkeys hu paranccsal válthatunk.
Értelemszerűen visszaváltani angolra a loadkeys us –el lehet. (Szükségünk lehet a
fonty csomagra is.)
A hat konzol között ctrl-alt-F1..6 gombokkal válthatunk.
2.2 Az Inetd.conf finomhangolása – a nem biztonságos szolgáltatások
letiltása
Az inetd program az Internetes Szuperszerver. Feladata az, hogy a ritkán használt és
/ vagy speciális szolgáltatásokat elindítsa, ha kívülről kérés érkezik valamelyik
meghatározott portra. Mivel az Apache (és a többi itt futó szolgáltatás is)
„Standalone” módban fut, ezért esetünkben nincs szükség az inetd munkájára.
Igazság szerint a jelen felállásban nincs szükség egyetlen szolgáltatásra sem azok
közül, melyeket az inetd nyújt. Ezért az egész inetd programot letilthatjuk. Sajnos
ez a program és a hozzá tartozó fájlok sok más jóval együtt a netbase csomagban
vannak – így nem törölhetjük le őket a rendszerből. Amennyiben mégis szükségünk
lenne néhány szolgáltatásra, mely az inetd-ből futna, használjunk egy profibb
helyettesítő csomagot, mint amilyen pl. az xinetd, vagy rlinetd.
Előszöris állítsuk le az /etc/init.d/inetd stop paranccsal. Ezután szerkesszük
át az /etc/inetd.conf fájlt úgy, hogy minden bejegyzés elé tegyünk egy „#” jelet.
Erre azért van szükség, hogyha valaki el is indítaná az inetd programot, akkor se
tudjon vele mit kezdeni. Ezután írjunk az /etc/init.d/inetd fájl első sorába egy
„exit 0” sort. Ekkor a inicializáló script indítás helyett kilép. Az /etc/inetd.conf
jogosultságait állítsuk a következőre: chmod u+r,u-w,a-wrx inetd.conf Ezek
után biztos ami biztos alapon adjunk neki immutable bit-et: chattr +i
inetd.conf. (Sőt, akár chmod a-x /usr/sbin/inetd, de ez könnyen
kijátszható.)
Hogy a paranoia teljes legyen, állítsuk be a tcp_wrapper fájljait is:
/etc/hosts.deny-ban kommentezzünk ki mindent és tegyük be az ALL:ALL és az
ALL: PARANOID sorokat. Az első sor minden olyan címről érkező kérést megtagad,
amelyik nincs benne a hosts.allow fájlban. A másik szabály az olyan gépekre
vonatkozik, melyeknek az IP címe nem egyezik meg a nevük szerint a DNS-ből, vagy
az /etc/hosts fájlból lehívott név-IP cím hozzárendelésnek.
A Standalone módban futó szervizeknek a saját konfigurációs állományaikban lehet
meghatározni, hogy milyen tartományokat szolgáljanak ki és milyeneket nem. Ezekre
az adott helyen kitérek.
A következő felesleges szolgáltatás a portmap. Ez a démon szolgáltatná a SUN féle
RPC-k listáját (Remote Procedure Call, Távoli Eljárás Hívás). Mivel ezeket a
szolgáltatásokat is az inetd indítja – és azt már megszüntettük – erre sincs szükség.
Állítsuk le a szolgáltatást az /etc/init.d/portmap stop paranccsal, majd írjunk
egy exit 0 sort az /etc/init.d/portmap script első sorába.
2.3 A levelező démon beállítása
A nagyfokú biztonságossága miatt a postfix csomagot választottam. Ezt az IBM-nél
kezdték fejleszteni. Szerzője Wietse Venema, aki többek között a tcp_wrapper
program írója is és biztonsági problémák megoldásán dolgozik. A Postfix-et már a
tervezési fázisban a biztonságra hangolták. A program neve arra utal, hogy az elterjedt
és viszonylag könnyen feltörhető sendmail program lecserélésével utólagos
biztonsági foltozást kapunk. Mivel ez egy Web és nem egy levelező szerver lesz, nincs
szükségünk a sendmail extra funkcióira. Nincs szükségünk a qmail gyorsaságára és
teljesítményére sem. A Postfix ezért kitűnő választás.
A Postfix a Potato-ban két változatban is megtalálható. A postfix csomag a standard
programot tartalmazza, míg a postfix-tls csomag (mely a non-US szekcióban van)
egy TLS (Transportation Layer Security, az RFC2246 szerint) bővítéssel rendelkezik.
Ez az OpenSSL rendszerkönyvtárat használja. Az RFC2487 leírja a TLS SMTP-be
való integrálását. Ezek segítségével készítette el Lutz Jänicke a TLS bővítést a Postfix-
hez. Segítségével a következők érhetők el, amennyiben mindkét gép, melyek között a
kapcsolat folyik, ismeri ezt a protokollt:
? Titkosított e-mail szállítás a gépek között
? A fogadó gép beazonosítása, hogy azonos-e azzal, akinek mondja magát.
? A küldő gép beazonosítása, levéltovábbítás céljából (relaying)
És amire nem képes:
? A felhasználók leveleinek biztonságát megőrizni - ez a titkosítás csak szállítási
rétegre vonatkozik
? A küldő azonosítása
A fentiek eléréséhez használjunk gpg-t vagy pgp-t
Bár még nagyon kevés gépen van ilyen protokollt ismerő levelező démon , mégis
ajánlom ennek a használatát. Később egyre jobban el fog terjedni, és addig is legalább
a saját szervereink legyenek nagyobb biztonságban.
Konfigurációs állományait az /etc/postfix könyvtárban találjuk. A fő beállításokat a
main.cf fájl tartalmazza. Nyissuk meg kedvenc szerkesztőnkben és módosítsuk a
következő sorokat:
myhostname = alfa.boresszormegyar.hu # a saját gépünk neve
mydomain = boresszormegyar.hu # mi a bejegyzett domén-nevünk
# myorigin = $mydomain # ha ez lenne a fő mail szerver, akkor ezt adnánk forráscímnek
# milyen gépeknek vagyunk a levelező szervere: ( „A” típusú DNS rekord kell)
mydestination = $myhostname, localhost.$mydomain, www.$mydomain
Ha szeretnénk a felhasználóknak Családnév.Keresztnév stílusú címzést is biztosítani,
szúrjuk be a következő sort is:
canonical_maps = hash:/etc/postfix/canonical
Alapbeállításként ez a fájl a manuál oldal szövegét tartalmazza, ezért töröljük ki / le.
Majd szerkesszük meg a hivatkozott fájlt a következőképp:
# user Név.Név
rgazda Kis.Jozsef
webgazda Nagy.Istvan
abgazda Kovacs.Lajos
#stb.
Ha virtuális doméneket is akarunk használni, akkor szúrjuk be ezt a main.cf-be:
virtual_maps = hash:/etc/postfix/virtual
Ezután szerkesszük a hivatkozott fájlt:
# ezeket a doméneket is bejegyeztük, ezért nekik is fogadjuk a leveleket.
borgyar.hu
szormegyar.hu
Ha kéretlen levelek szerverszintű szűrésére van szükségünk, olvassuk el a
/usr/doc/postfix-tls/html/uce.html fájlt. Fontos, hogy ne használjunk „Open
Relay”-t, vagyis ne továbbítsuk bárki leveleit átjátszóként, mert ekkor a spamer -ek
céltáblájává válhatunk, ráadásul bekerülünk az ORBS -be, és akkor sok helyre
levelet sem küldhetünk majd.
Mivel ez nem egy levelező szervernek lett szánva, limitáljuk az egyszerre futható
levélküldések számát az /etc/postfix/master.cf-ben 50-ről pl. 10-re :
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
# ==========================================================================
smtp inet n - n - 10 smtpd
Nyissuk meg az /etc/aliases fájlt is és módosítsuk így:
# a postamesternek szánt leveleket a rendszergazda kapja meg két helyre is
postmaster: rgazda@gyakranolvasom.hu root
# a webmesternek szánt leveleket ketten is megkaphatják
webmaster: rgazda@gyakranolvasom.hu webgazda, wgazda@gyakranolvassa.hu
# minden root-nak szánt levelet továbbítsunk
root: rgazda@gyakranolvasom.hu
info: titkarno
Indítsuk újra a levelező szervert : /etc/init.d/postfix restart
Ha valamit elgépeltünk a fájlokban, akkor most lehet, hogy nem fut a démon.
Győződjünk meg erről így: ps aux | grep postfix Ekkor három programnak kell
megjelennie: master, pickup, qmgr. Ha ezek láthatóak a sorok között, akkor
minden rendben van.
A titkosítás beállítása
A következőkre van szükség a titkosításhoz:
? 1 db titkos kulcs a szerverhez
? 1 db nyilvános kulcs a szerverhez, melyet egy CA hitelesített (~digitálisan aláírt),
mely azt bizonyítja, hogy cégünké az adott gépnév (és domén).
? 1 db CA igazolás a CA nyilvános kulcsával
El kell készítenünk tehát egy igazolást arról, hogy azok vagyunk, akik vagyunk (vagy
vásárolhatunk egyet egy erre szakosodott cégtől, de ez még felesleges). A következő
lépéseket kell megtenni:
0. Megkeresünk egy segédprogramot és beállítjuk azt igényeinkhez.
1. Legyártunk magunknak egy saját CA kulcsot, hogy CA-vá válhassunk.
2. Legyártunk a levelező szerver számára egy szerver kulcsot.
3. Ezt aláíratjuk a CA kulccsal.
4. Bemásoljuk a fájlokat a helyükre.
5. Megszerkesztjük a konfigurációs fájlt
6. Újraindítjuk a levelezőt.
Részletesen:
(0) A dokumentáció elolvasása után keressük meg a következő fájlt:
/usr/lib/ssl/misc/CA.pl Másoljuk át a /root könyvtárába és hívjuk be
kedvenc szövegszerkesztőnkbe. Az alábbi minta alapján szerkesszük át a fájlt
(csupán egy –nodes paramétert kell beírnunk két helyre ):
[…]
# create a certificate
system ("$REQ -new -x509 -nodes -keyout newreq.pem -out newreq.pem $DAYS");
$RET=$?;
print "Certificate (and private key) is in newreq.pem\n"
} elsif (/^-newreq$/) {
# create a certificate request
system ("$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS");
[…]
Erre azért van szükség, mert az indításkor nem szabad, hogy a kulcs fájl kódolt legyen,
különben a postfix nem fogja tudni beolvasni. Keressük meg továbbá a $DAYS=’-
days 365’ sort. Ennyi nap után jár le az igazolás, évente meg kell újítanunk saját
magunknak. Sajnos nem jöttem rá, hogyan lehetne ezt működőképesen megnövelni.
(1) Most futtassuk ezt a programot: ./CA.pl -newca Ez a kis programocska
legyártja nekünk a megfelelő igazolást (CA). Előszöris adjunk meg neki egy
jelszót kétszer (erre később emlékeznünk kell!). Majd – az Apache-SSL-hez
hasonlóan - töltsük ki itt is az azonosítói adatokat. Ekkor már mi vagyunk a saját
azonosító-szolgáltatónk (CA).
(2) A következő lépésben futtassuk a ./CA.pl -newreq –t, és töltsük ki ezt is
hasonlóképpen:
14. kép - Postfix – igazolás készítése a CA.pl programmal
A challenge password és optional company name mezőket üresen is hagyhatjuk.
(Ezzel elkészítettünk egy igazolást).
(3) Ha ez kész, futtassuk le ezt: ./CA.pl -sign Írjuk be a jelszót, a felmerülő
kérdésekre válaszoljunk Igen-nel. (Ezzel aláírtuk az igazolást.)
(4) Másoljuk be a fájlokat a helyükre:
cp /root/demoCA/cacert.pem /etc/postfix/CA.pem
cp /root/newcert.pem /etc/postfix/igazolas.pem
cp /root/newreq.pem /etc/postfix/privatkulcs.pem
(5) Szerkesszük meg a main.cf-et:
smtp_tls_key_file = /etc/postfix/privatkulcs.pem # a titkos kulcsunk
smtp_tls_cert_file = /etc/postfix/igazolas.pem # a nyilvános igazolás, kik vagyunk
smtp_tls_CAfile = /etc/postfix/CA.pem # a CA igazolása (ezt is mi csináltuk most)
smtpd_tls_key_file = /etc/postfix/privatkulcs.pem # a “d” re végződő paraméterek
smtpd_tls_cert_file = /etc/postfix/igazolas.pem # segítségével kliens is lehet
smtpd_tls_CAfile = /etc/postfix/CA.pem # a szerverünk és így is lehet azonosítani
A titkos kulcsot csak a rendszergazdának szabad látnia:
chown root /etc/postfix/privatkulcs.pem
chmod 400 /etc/postfix/privatkulcs.pem
(6) Indítsuk újra a levelezőt: /etc/init.d/postfix restart
Ha valamit elgépeltünk a fájlokban, akkor most lehet, hogy nem fut a démon.
Győződjünk meg erről így: ps aux | grep postfix Ekkor három programnak kell
megjelennie: master, pickup, qmgr. Ha ezek láthatóak a sorok között, akkor
minden rendben van.
A többi alapbeállítás általában megfelelő minden esetre. Az egész programot már a
tervezéskor úgy hangolták, hogy biztonságos legyen.
Ha minden jól ment, akkor a levelező szerverünk rendesen be lett állítva igényeinkhez.
Mindenképp olvassuk végig a dokumentációt, amint van rá egy kis időnk. (pl. lynx
/usr/doc/postfix-tls/html/index.html)
Linkek: http://www..postfix.org , http://www..aet.tu-cottbus.de/personen/jaenicke
2.3 Másik gép használata a fordításokhoz, miért?
Mivel éles szerveren biztonsági okokból nem tarthatunk semmilyen fejlesztő-eszközt,
fordítót, stb., ezért nagyon ajánlott egy másik – rendszergazdai adminisztrációs gépet
fenntartani. Ha fordítókat tartanánk a szerveren, bármelyik felhasználó – vagy épp a
betörő forráskódból fordíthatna magának a gépen programokat. Ez kerülendő.
A szerveken üzembe helyezés után általában se billentyűzet (BIOS beállítás!), se egér,
se monitor nem szokott lenni. A szervert mindig a hálózatról, egy másik gépről – a
rendszergazda gépéről lehet menedzselni.
Jelöljünk ki (vagy vásároljunk) egy gépet a rendszergazda számára. Ez lehetőleg
megfelelően jó tudású / teljesítményű gép legyen. Az se baj, ha ez egy megfelelő
eszközökkel (hálózati kártya, modem) ellátott laptop. Ekkor a rendszergazda azt
mindenhova magával viheti, és szükség esetén nála van minden fontos és kézreálló
eszköz.
Továbbá ezen a gépen kell kipróbálni először az új programokat, kernelverziókat, hogy
az éles rendszerekre már tesztelve, megismerten kerülhessenek fel az újítások.
Ez a gép legyen elzárva a hálózat többi részétől – lévén ez a rendszer nem éles, tehát
nincsenek (ne legyenek) publikus szolgáltatásai, hiszen fejlesztői rendszer, ezért
érzékeny lehet a támadásokra. Ez a rendszer mindig érzékeny adatokat és
programokat tartalmazhat. Ezért nagyon körültekintőeknek kell lennünk. Ebből a
rendszerből csak kifele lehessen látni, kintről befele ne.
2.4 Személyre szabott kernel konfigurálása és fordítása kézzel és a
„kernel-package” csomaggal. A „lilo” beállításai.
Ez egy nagyon tág és mély témakör. II. Alapfogalmak / 2. A Linux kernel c. fejezetben
már kitértem a kernel sajátosságaira, azokat itt nem szeretném elismételni. Szintén
nem térhetek ki a különböző hardver eszközök kiválasztására és beállítására. Azokat a
lényeges pontokat viszont megpróbálom érinteni, melyek a biztonság szempontjából
fontosak, és / vagy mindenképp bele kell kerülnie a kernelbe.
A 2.2-es linux konfigurálásához van egy részletes magyar nyelvű útmutató, mely itt [7]
található. Igaz ez már egy kicsit idejétmúlt, a 2.2.4-es kernelt taglalja, viszont 25 oldal
terjedelmével elég kimerítő. Ez a link pedig a magyar nyelvű linux-kernel-HOGYAN-t
fedi, igaz, ez is elég idejétmúlt már, viszont jó elméleti kiindulópont lehet.
Olvassuk végig először az eljárások menetét és csak utána kezdjünk hozzá a
tényleges gyakorlati megvalósításhoz. Én a kernel-package csomag segítségével
való fordítást ajánlom, de meg kell ismernünk a kézzel való fordítás menetét is.
Szerezzünk be egy kernel forráskódot, ha lehet, akkor pl. az apt-get install
kernel-source-2.2.16 paranccsal. Ha ennél frissebb vagy speciálisabb forrást
szeretnénk, akkor valamelyik kernel tükörről beszerezhetjük azt. Ha szükség van
kernelszintű fájlrendszer-titkosításra, akkor a nemzetközi változat „foltját” is töltsük le.
Továbbá szerezzünk be minden olyan forráskódot, amelyre az adott hardverhez
szükségünk lehet, de még nincs benne a hivatalos kernelben (pl. alaplapi CPU
hőmérőket és ventilátor fordulatszámmérőt kezelő programrész, az lm_sensors nevű
folt. ). Ha megvan minden és a fordításhoz szükséges bináris csomagok is fenn
vannak a gépen (gcc, binutils, make, libc6-dev, bin86, ha kell
menuconfig: ncursesX.X-dev, make xconfig: tkX.X-dev, azok a csomagok,
melyeket ezek igényelnek, gzip, grep, shellutils, stb.).
Ha i586, vagy i686 architektúrájú processzorral rendelkezünk a szervergépben, akkor a
fejlesztői (rendszergazdai) gépre tegyük fel a pentium-builder csomagot.
Segítségével a célgép processzorához tudjuk optimalizálni a kernel (és minden más
lefordított C program) kódját, mely viszonylag nagy sebességnövekedést
eredményezhet. Ha a program fent van, adjuk a következő parancsot: export
DEBIAN_BUILDARCH=pentium (i686 esetén pedig pentiumpro). Ha nem akarjuk
ezt minden fordítás előtt begépelni, tegyük be a ~/.bashrc fájlunkba. Ezután az
összes C program kódja a kért processzorhoz lesz optimalizálva. Ekkor az ennél
kisebb processzorokon az adott program / kernel nem fog futni (pl. i486).
A kész lefordított kernel a következő részekből áll:
fájl(ok)
méret
forma
funkció
arch/i386/boot/bzImage
modulok
./System.map,
./.config,
~600kb
1-2Mb
~300kb
~10kb
bináris
bináris
szöveges
szöveges
A rendszermag.
az induláshoz nem szükséges
programrészek
A rendszerhívások listája
A kernel konfigurációja
9. táblázat - A kernel részei
A rendszermag elkészülte után le lesz tömörítve és a fenti könyvtárba lesz másolva.
Minden olyan kódrészt, amely a rendszer indulásához nélkülözhetetlen bele kell
fordítani a kernelbe és nem szabad modulba tenni (pl. ha IDE vezérlős lemezünk van
és arról indul a rendszer, akkor az IDE vezérlő támogatást mindenképp fordítsuk be).
Bizonyos kódrészeket egyáltalán nem is lehet modulba fordítani. A modulokat később
pl. a modprobe vagy insmod paranccsal lehet betölteni, az rmmod-al kiszedni és az
lsmod-al listázni (modutils csomag).
A System.map fájl a kernel rendszerhívásait és szimbólumait tartalmazza. Induláskor
ezt a kernel (klogd) beolvassa. Ez megkönnyítheti a kernel üzeneteinek megértését,
ugyanis ekkor emberi (angol) nyelven szól hozzánk.
A .config fájlt jó eltenni későbbre, hogyha egy kis változás miatt újra kell fordítani,
akkor ne kelljen előröl kezdeni a „konfigolást”.
A kézzel való fordítás lépései:
1. Csomagoljuk ki a kernelforrást, pl. az /usr/src könyvtár alá:
tar –xzvf linux-2.2.16.tar.gz; cd linux
2. Ha kell, foltozzuk be a szükséges plusz kódokkal. Pl.:
cat folt.txt | patch –p1 –E –N –s –d /usr/src/linux
Ha úgy döntünk, alkalmazzuk az OpenWall-féle kódot, csomagoljuk ki:
tar –xzvf linux-2.2.16-ow1.tar.gz
Majd pedig foltozzunk:
cat linux-2.2.16-ow1/linux-2.2.16-ow1.diff | patch –p1 –E –N –s –d /usr/src/linux
Ha használni akarjuk a LIDS rendszert is, olvassuk el a függelékben lévő útmutatót.
3. Mivel már tudjuk, hogy melyik hardver elemet milyen vezérlővel fogunk használni,
ezért keressük elő ezt a jegyzetünket. Végezzük el a kernel konfigurálását. Ezt
háromféleképpen is megtehetjük: make config, make menuconfig, make
xconfig parancsokkal. Az első elég kényelmetlen, mert egyenként rákérdez
minden egyes lehetőségre. A második már jó, ekkor egy színes, menüs, de még
szöveges programocska fut, melyből kényelmesen kiválogathatjuk, hogy mi kell
nekünk. Ehhez szükséges az ncurses-dev csomag, mivel ez a programocska is
le kell, hogy forduljon és ncurses képernyőkezelő rutinokat használ. Kérésre angol
nyelvű rövid leírást kapunk minden egyes opcióról.
15. kép - make menuconfig
A harmadik változat a legkényelmesebb, egy TCL/Tk függvénykönyvtárat használó
grafikus X11 felületű beállító-programot kapunk.
16. kép - make xconfig
Akkor nézzük a fontosabb beállításokat. Én a make xconfig felületet használom. Mi
az ami mindenképp benne kell, hogy legyen és mi az ami semmiképp se kell a
konfigunkban:
- Code maturity level options / Prompt for development and/or incomplete
code/drivers: a félkész/fejlesztés alatt lévő eszközvezérlők és funkciók
megjelenítése választási lehetőségként. Kell.
- Processor type and features / Processor family: válasszuk ki, hogy milyen
processzor van a gépünkben. Math emulation – ez semmiképp sem kell, ha van
FPU a gépünkben. MTRR support: ha i686-os processzorunk van akkor
ennek a használata gyorsítja a végrehajtást, kellhet. SMP support: ha egynél több
processzor van a gépünkben, akkor kell.
- Loadable module support / Enable …: kell, hiszen szeretnénk modulokat
használni. Kernel module loader: mindenképp kell – kernelszintű modul betöltő.
- General setup / Networking support: [y], hiszen épp hálózatra tesszük a gépet. Itt
be lehet állítani a PCI buszt, ha van tegyük. A System V IPC, a BSD process
Accounting, Sysctl support, kernel support for ELF bin., mindenképp kell. Ha
akarjuk használni a párhuzamos portot, tegyük be, de ez is egy betörési
lehetőség lehet a gépre, igaz helyi. Én javaslom az APM support kernelbe-
fordítását és megfelelő beállítását (SMP módban nem megy). Egyrészt áramot és
ezzel pénzt spórolhatunk meg, másrészt megnöveljük a szerver élettartamát,
mivel kevesebbet „pörög” a gép processzora. Figyelem! A suspend funkciót tiltsuk
le a BIOS-ban, csak a doze mode-ot engedélyezzük (esetleg a stand by módot
is), mely – ha nincs szükség rá – leszabályozza a processzor frekvenciáját. A
suspend funkció hatására a gép alvó-üzemmódra kapcsol és csak pl. a
billentyűzet megnyomásával ébreszthető fel – ez szervereken nem előnyös. Ha a
gép nagyon nagy forgalmat bonyolít, akkor az egész APM-et hagyjuk ki. Ha
viszont keveset forgalmaz, akkor fontoljuk meg használatát. Javaslom továbbá az
RTC GMT -hez való állítását is.
- Plug and Play support: ha van ilyen kártya a gépben, akkor kapcsoljuk be.
- Block devices: válasszuk ki, milyen blokkos eszközöket (floppy, merevlemez)
akarunk használni. Azt az eszközt, amiről a rendszer indul, fordítsuk kernelbe, a
többi mehet modulba is. Ha nincs szükség rá, a floppy-t ki is hagyhatjuk. Ha
alaplapi IDE vezérlő chipset-ünk van és a Linux támogatja ezt, akkor válasszuk
azt is . Loopback Device support, Network block device support kell. Ha
valamilyen RAID, vagy párhuzamos portra csatlakoztatható IDE eszközünk van,
válasszuk ki.
- Networking options: itt ki kell választanunk, hogy milyen hálózati funkciókra lesz
szükség. Packet socket: [m], K./U. netlink socket: [y], Network firewalls: [y], Unix
domain sockets: [y], Socket filtering: [y], TCP/IP networking: [y], IP firewalling: [y],
IP firewall packet netlink dev.: [y] Ezek többek között a tűzfal és csomagszűrő
funkciók. Masq és proxy nem kell, mert ennek a szervernek nem az a feladata. IP
aliasing: [y] – ez kell, ha IP-s virtualhost-ot szeretnénk. TCP syncookie support: [y]
– ez a DoS típusú támadásoktól véd. Allow large windows: [y] Ha szükségünk van
egyéb hálózati protokollokra, funkciókra, akkor jelöljük ki azokat is.
- SCSI support: ha van ilyen eszközünk, válasszuk ki. (pl. merevlemez)
- Network device support: [y], Dumy:[y], Ha van pl. üvegszálas hálózati eszközünk,
akkor válasszuk ki. Ha van ARCnet, Ethernet, Appletalk, Token ring, WAN,
Amateur Radio hálózati eszközünk válasszuk a megfelelő vezérlőt.
- Nem hiszem, hogy a szerverben infravörös, ISDN, és / vagy régi kártyás CD-ROM
eszközeink lennének. Ezeket kihagyhatjuk.
- Character devices / Virtual terminal: [y], Support for console…:[y], ha kell, soros
port vezérlőnket is válasszuk ki. Unix98 PTY support: [y], Watchdog support: [y],
(lesz majd szoftveres) Eanched Real Time Clock Support: [y] Egérre nem hiszem,
hogy itt szükség lesz. Nyomtatóra, botkormányra, képfeldolgozó eszközre sem.
- Watchdog cards: / software watchdog: [m], ezt később tárgyalom.
- Ha van Ftape (floppy portra kapcsolható szalagos egység), akkor azt is.
- Filesystems / Second extended fs support: [y] – erről fogunk ui. indulni. /proc…,
/dev/pts…: [y] Itt még sok egyéb választásunk is van. Ha esetleg más operációs
rendszereket is tartanánk ugyanazon a gépen (a mi esetünkben nem), akkor
válasszuk ki, ami kell.
- Network file systems / NFS fs supp.: [m] ez a klienshez kell, szervert meg nem
tanácsos üzemeltetnünk, az kimarad. Ha van a környezetben más gyártótól
rendszerszoftver és szükség is van rá, hogy rendszerünk lássa azokat, akkor
válasszuk ki ami kell.
- Partition types: ha ugyanazon a gépen más op’rendszereket is tartunk, jól jöhet a
nekik megfelelő speciális partíciós tábla vezérlője, egyébként semmi szükség
rájuk.
- Native language support / NLS ISO 8859-1 és –2 modulba.
- Console drivers / VGA text console:[y], - ha VGA kártya van a gépben.
Támogathatjuk továbbá az MDA egyszínű monitorokat is. Szerverben a Frame
buffer-nek nem sok értelme van, úgysincs rajta monitor. Ha nem választunk itt ki
semmit, akkor nem jutunk be a gépbe, csak a soros porton!
- Sound – itt hangkártyának semmi értelme, nem kell.
- Ha betettük az OpenWall-féle foltot, akkor itt van egy Security Options menü is,
ami alatt az összes kérdésre válaszoljunk yes-el.
- Ha a LIDS rendszert is befoltoztuk, olvassuk el a részletesebb útmutatót a
Függelékben!
- Kernel hacking – Magic SysRq key : [y] – ha a rendszer lefagyna, akkor az alt-
printscreen billentyűvel még esetleg feléleszthetjük a konzolt, vagy legalább
kiíratjuk a veremtárat és a gyorsítótárakat. (Olvassuk el a doksiját!)
Miután mindent beállítottunk mentsük el a változásokat és lépjünk ki.
4. Ebben a lépésben a fordító a .config fájl alapján beállítja a függőségeket – csak
az fog lefordulni a forrásból, amire szükség van a mi beállításainkhoz. Ezt a make
depend paranccsal tehetjük meg. Ezt a lépést nem lehet kihagyni!
5. Most elindítjuk a kernel fordítását: make –j2 bzImage
6. Ha nem kapunk hibaüzenetet, akkor indítsuk a modulok fordítását.
make –j2 modules
7. Ha itt se kaptunk hibaüzenetet, akkor a make modules_install paranccsal
felteszi a /lib/modules/kernelverzió könyvtárba a kész modulokat. Ha kész
mozgassuk át őket a szerverre.
8. Másoljuk a magot, a térképet és a konfigot a /boot-ba
scp arch/i386/boot/bzImage root@alfa:/boot/vmlinuz-kernelverzió
scp System.map root@alfa:/boot/System.map-kernelverzió
scp .config root@alfa:/boot/config-kernelverzió-gépnév
9. (Innentől minden a szerveren történik) Szerkesszük meg az /etc/lilo.conf
fájlt, hogy az új kernelünk felkerülhessen az indítható kernelek közé. Ha kész
futtassuk a lilo-t. Itt látható egy mintapélda:
boot=/dev/hda # az eszköz, ahova a boot menedzser települjön
install=/boot/boot.b # ez az i386 arhitektúra miatt szükséges valós módú kód
map=/boot/map # és lemeztérképe
vga=5 # milyen VGA szöveges módba váltson a konzol, itt 80x34
delay=50 # várakozás tizedmásodpercben, mielőtt a kernelt indítja.
prompt # mindenképp jelezze ki a választómenüt
timeout=50 # ha nekikezdünk gépelni, de abbahagyjuk…
default=sajat # melyik kernel induljon el, ha nem választunk
message=/boot/message # a lilo prompt elé írhatunk üzenetet.
root=/dev/hda3 # hol van a gyökér fájlrendszer
read-only # csak olvasható módban fűzze fel először a rendszert
#a gyári kernel mindig legyen fenn, hátha kell.
image=/vmlinuz # a kernel helye
password=jelszo # mi legyen a jelszó, arra az esetre
restricted # ha paraméterek akarunk átadni a kernelnek induláskor
label=gyari # mi legyen a kernel neve a lilo prompt-nál
image=/boot/vmlinuz-2.2.16
password=mehet
restricted
label=sajat
append="idebus=45” # paraméterezhetjük az egyes kódrészeket az append
# parancs segítségével. (opcionális)
Ezek után, ha minden hiba nélkül futott le, újraindíthatjuk a szervert. Mindenképp
legyen egy stabil, működő kernel a lilo.conf-ban, nehogy kizárjuk magunkat a
rendszerből. Érdemes minden jól működő és használatban lévő kernelből boot floppy-t
is gyártani, hátha megsérül az MBR.
Ha a lilo.conf végleges, állítsuk 400-re a mask -ját, és tegyük rá az immutable
bit-et.
Az új kernelt teszteljük, stresszeljük először, mielőtt feltennénk az éles szerverre.
Persze, mivel a rendszergazdai gép biztosan más hardvereket tartalmaz, mint a
szerver, ezért lehet, hogy ki se próbálhatjuk. A kernel fordítása közbeni hibák egy része
utalhat hibás memória vagy processzor elemekre. Esetleg nem jó a processzor hűtése.
Ellenőrizzük.
Fordítás a kernel-package csomaggal:
Első fázis : kernel beszerzése és konfigurálása
cd