2014. május 29., csütörtök

Levelezés Linuxon 0. rész - Alapok

Levelezésről általában

A Linuxot használtam eddig desktop környezetként, mostanában ismerkedem a különféle szerver szolgáltatásokkal. Az egyik fontos szolgáltatás a Linux világban a levelezés. Az itt leírtak desktop környezetben is használhatók, de igazából a nagy előnye a szerverek világában van.
Mint mindig most is magamnak írom a postot, a saját tapasztalataim lejegyzetelésére. Kérem, hogy így kezelje mindenki aki olvassa.
Az első dolog amit látni kell az a levelezés infrastruktúrája, felépítése, működése. Én magam még nem teljesen értem, jónéhány paradigmától kellett megszabadulnom.
Először is látni kell hogy ha levelező szervert készítünk, akkor mindent amit átlag felhasználóként tapasztaltam a levelezésről teljesen más. Talán bonyolultabb, de ez igazából a rugalmasság elérése miatt tűnhet bonyolultnak.

Levélküldés (MUA, MTA, SMTP)

Nézzük először az elveket, amik bizony már 40 évesek. Az akkori technikai rendszerekhez igazodtak és aszerint lettek kialakítva. Manapság az elv ugyan az csupán a különféle elemek kerültek át a központi gépekből a felhasználói desktopokra, majd vissza a szerverekre.
Abban az időben a felhasználóknak buta termináljaik voltak, amikkel egy központi gépre kapcsolódtak és ott futtatták más felhasználókkal együtt, párhuzamosan a programjaikat. Tehát minden program egy központi gépen futott, még a levelező kliens is (Mail User Agent, MUA), ami egyszerű parancssori alkalmazás volt, gyakorlatilag felhasználói felület nélkül, egyszerűen a terminálra kiírta a szöveges információt.
Az egyik legismertebb MUA a mailx volt a Unix világban. Segítségével pl így lehetett levelet írni:

mailx -s "Elso level" user@pelda.hu

A parancs hatására elindítottunk egy levél megírását. A levél tárgya "Elso level" és a címzett user@pelda.hu volt. A feladó természetesen az a felhasználó, aki bejelentkezés után kiadta a parancsot.
A parancs jóváhagyása után beadhattuk a levél törzsét amit egy CTRL-D billentyűvel lezárhattunk. A levél pedig elküldésre került.
Ugyan ezen a központi gépen futott egy úgynevezett levelező szerver is. Ennek a dolga az hogy más levelező szerverek által nekünk továbbított üzeneteket a saját (helyi) felhasználóink postafiókjába tegye. A másik feladata a saját felhasználóink által megírt levelek továbbítása a célfelhasználó levelező szerverének, ami majd beteszi a címzett postaládájába a levelünket. Mint látható ez a szerver leveleket továbbít, innen is ered a neve Mail Transfer Agent (röviden MTA). Természetesen többféle MTA megvalósítás létezik (postfix, sendmail), ezek bemutatása, konfigurálása egy későbbi cikkben történik. Ez is mint a hálózaton történő kommunikációk mindegyike egyfajta alkalmazás szintű protokollt használ aminek segítségével az üzenetek elküldésre kerülnek. A protokoll neve a Send Mail Transfer Protocol (SMTP). A protokol alapértelmezésben a 25-ös TCP porton kommunikál, ezért nevezik ezt a portot smtp portnak.
Régen az MTA-k nem voltak authentikálva, tehát gyakorlatilag ha valaki ismert egy működő MTA-t akkor igen könnyen tudott levelet küldeni. Manapság az MTA-k mind authentikációval érhetők el és korlátozva is vannak általában a saját hálózatra.
A 90-es és a 2000-es években megnőtt a felhasználói munkaállomások teljesítménye és a levelező kliensek jellemzően a felhasználók saját gépein futottak, távol a levelező szervertől. Ezek a kliensek már grafikus programok voltak, rengeteg kényelmi funkcióval felszerelve. Aztán a kliensek átkerültek a 2000-es évek végére a web-re. A webtechnológiák és a hálózati kommunikációs sebesség drasztikus növekedése már lehetővé tette hogy webes alkalmazásként jelenjenek meg a különféle asztali alkalmazások, többek között az email kliensek is.
A lényeg azonban változatlan maradt. A felhasználó valamilyen levélszerkesztővel megírja az emailt, amit a 25-ös smtp porton továbbít valamilyen MTA-nak. Ezután MTA-MTA közti kommunikáció folyik, végül a címzett postafiókjában tárolódik a levél.



Példának nézzük meg mi történik ha a tatooine nevű gép laci felhasználója levelet ír a naboo gép tomi felhasználójának.
A tatooine gépre bejelentkezik laci felhasználó és elindítja az email szerkesztő alkalmazását, márha nem terminálba akarja közvetlenül az SMTP protokoll nyelvén megadni a szükséges adatmezőket. (ez is lehetséges, érdekes jó kis tapasztalat). Az email megírása után elküldi az üzenetet (pontosabban az alkalmazást utasítja arra, hogy az SMTP szabályoknak megfelelően a tatooin 25-ös portjára csatlakozzon és küldje el az üzenetet). A kommunikációs csatornán fogadja a tatooine MTA-ja a levelet. A protokol szabályok alapján kiszedi belőle a címzettet és megszólítja a címzett naboo gépet a 25-ös portján. Átküldi a levelet a naboo MTA-ja tárolja a levelet tomi felhasználó postafiókjában.

Ott tartunk tehát hogy egy levelező klienssel megírt és elküldött levél megérkezik a címzett postafiókjába. De mi történik ezután?

Levelek olvasása (MUA, POP3, IMAP)

A levelek olvasására jellemzően ugyan azt a programot használjuk mint az írásra. Tehát ez is egy Mail User Agent, azaz egy MUA.
Régen a buta terminálok idejében, amikor a felhasználó bejelentkezett a terminálon akkor mindenféle okos scriptek futottak le és különféle beállításokat végeztek illetve információkat adtak. Az ősidők óta az egyik ilyen információ az volt hogy olvasatlan levele van a postafiókjában. Itt értesülhetett a felhasználó levél érkezéséről. Ezután valamilyen parancssori programmal lekérdezhettük a postafiókunkat. Találtam a neten egy képet erről a folyamatról:

Látszik hogy a James felhasználó miután bejelentkezett a Metroid-4 nevű szerverre, értesül hogy levele érkezett (You have new mail.).
Ezután kiadja a mail parancsot. A program kiírja a verziószámát, meg egy rövid help szöveget, végül pedig azt is hogy 1 üzenet van a postaládában ami még nincs olvasva (1 message 1 new), majd a levelek listája jön (itt egyetlen sor). A sor elején az N betű jelzi hogy új  levél (New), még olvasatlan, majd a levél sorszáma, címzettje dátum és a tárgy.
Utána a ? a mail program promptja. Ez jelzi hogy érvényes parancsra vár. A felhasználó beírta a print parancsot, melynek hatására megjeleníti az összes olvasatlan levelet teljes egészében. Látható a levél, majd ismét a ? prompt.
Ugye kényelmes így levelezni? :)

A lényeg a fentiekből, hogy valamiféle UNIX postaládába érkezett levelet a UNIX terminálba lekérdeztük és elolvastuk. Igen ám, de mi nem itt akarjuk ezt megtenni, hanem távol a saját okos számítógépünkön.
Két lehetőségünk van. Az egyik az, hogy letöltjük a leveleinket a saját gépünkre, a másik pedig az hogy a távoli gép postafiókját jelenítjük meg és kezeljük.
Erre két protokoll van segítségünkre. A POP3 protokoll a 110-es porton és az IMAP protokoll a 143-as porton.
POP3 segítségével letölthetjük a leveleinket a saját gépünkre. A protokoll akkor élte virágkorát, amikor nem volt állandó kapcsolat, hanem betárcsázós módon (dial-up) kapcsolódtak a kliensek a világhálóra. Ilyenkor letöltötték a leveleket, majd bontották a vonalat. Offline módon olvasták és kezelték a leveleket a saját gépükön.
Az IMAP protokoll a modernebb technológia. Segítségével levélkezelés valósul meg, de a szerver oldalon, így kisebb adatforgalom keletkezik, ugyanis a levél nem töltődik le a kliensre. A levelek keresése, kezelése a szerveren történik, de ugyanakkor kényelmes kliens alkalmazás segítségével.

Ezen protokollokat is egy szerver oldali folyamat kezeli. Ilyen alkalmazás például a Dovecot vagy a Courier, melyek mind a POP3 mind az IMAP protokollokat támogatják.

Összefoglalás

Ezzel gyakorlatilag áttekintettük a levelezés legfontosabb folyamatait:

  • levél megírása (MUA)
  • levél továbbítása, fogadása és tárolása (MTA, SMTP protokoll)
  • postafiók lekérdezése, levelek olvasása (MUA, POP3/IMAP protokollok)
Amit még levelezés kapcsán meg lehet (és meg is kell) tenni, de ez már egy további szint:
  • levélküldési biztonság (SMTP authentikáció)
  • levélszűrés (tartalomra, csatolmányokra)
  • vírusellenőrzés








2014. május 21., szerda

Hálózatos fájlmegosztás Linuxon (NFS)

NFS - Hálózatos fájlrendszer 

Hálózatos fájlmegosztás az egyik leggyakoribb szolgáltatás a hálózatokon. Ennek is több formája létezik. A most bemutatásra kerülő módszer a hálózatba kötött Linux gépek közti megosztást és elérést teszi lehetővé. Ezzel a módszerrel egy másik Linux gépen lévő könyvtárat hasonló módon lehet elérni mintha a helyi gépen lenne.
A Linuxon egyetlen fájlrendszer létezik, amibe befűzhetünk (mount) különböző akár távoli fájlrendszereket. Ehhez el kell indítani a távoli gépen az úgynevezett NFS szolgáltatást, illetve a helyi gépen telepíteni kell az NFS kezeléséhez szükséges programcsomagot. A távoli gépen egy egyszerű konfigurációs fájlban megadjuk az exportálandó fájlrendszer részeket, végül a helyi gépen a mount paranccsal befűzzük a távoli exportált fájlrendszer részt a sajátunkba.

A kiszolgáló telepítése

Első lépésként telepítsük a távoli gépre a kiszolgáló (server) programot.

sudo apt-get install nfs-kernel-server

Miután települtek a szükséges programcsomagok a /etc/exports fájlban megadhatjuk hogy milyen fájlrendszer részeket, kiknek és milyen opciókkal akarunk kiajánlani.

sudo nano /etc/exports

Példaként a /srv/share és a /srv/backup könyvtárak kiajánlását láthatjuk:

/srv/share     *(rw,sync,no_root_squash)
/srv/backup    192.168.1.200(rw,sync,no_root_squash)

A fenti exportálás esetében a /srv/share könyvtárat (aminek léteznie kell) minden IP címről elérhetővé teszi. A /srv/backup könyvtárat csak a 192.168.1.200 IP címről teszi elérhetővé (pl. egy levelezőszerverről a mentések ide készülnek)
Figyeljünk hogy az IP cím (illetve a *) után közvetlenül, szóköz nélkül kezdődjön az opciókat tartalmazó nyitó zárójel!
A példában használt opciók jelentése a következő:
  • rw - 
  • sync -
  • no_root_squash - 
  • no_subtree_check - 
Természetesen ennél több opció áll rendelkezésre. Ehhez lásd a manual oldalakat:

man exports

Miután megadtuk a konfigurációt, indítsuk el a szolgáltatást:

sudo service nfs-kernel-server start

Ezzel a kiszolgáló oldalon készen vagyunk, az NFS szerver működik mégpedig a 2049 porton.

Teendők a kliens oldalon

A kliens oldalon első teendőnk a nfs-common csomag telepítése.

apt-get install nfs-common

Ezek után hozzuk létre a csatolási pontok helyét (azaz a könyvtárat ahová csatolni szeretnénk a távoli megosztott könyvtárat):

mkdir -i /mnt/nfs/share
mkdir -i /mnt/nfs/backup

ezután csatolhatjuk a távoli könyvtárat:

sudo mount 192.168.1.100:/srv/backup /mnt/nfs/backup

A csatolást ellenőrizhetjük:

df -h

A manuális csatolás helyett használhatjuk /etc/fstab fájlt is az automatikus csatoláshoz. Ehhez írjuk bele a következő sort:

192.168.1.100:/srv/backup /mnt/nfs/backup nfs rsize=8192,wsize=8192,timeo=14,intr

A /etc/fstab fájlban megadható NFS csatolási opciókról részletesen a manualban lehet olvasni:

man nfs

Az NFS csatolás tesztelése

A csatolt fájlrendszert ezek után használhatjuk, mintha a helyi fájlrendszer része lenne.

Ellenőrzésként hozzunk létre egy proba nevű fájlt:

sudo touch /mnt/nfs/backup/proba

ellenőrizzük hogy létre jött-e a fájl:

ls -l /mnt/nfs/backup

A fájllistában ott kell lennie a proba nevű fájlnak.

Jogosultságok

Ahhoz, hogy az NFS csatolási pontokra legyen írási jogunk a kliens oldalon, szükséges hogy a szerver oldalon a felhasználók létezzenek és megfelelő jogokkal rendelkezzenek a megosztott könyvtárhoz. Tehát fel kell venni a szerveren a felhasználókat (adduser) és a könyvtár jogosultságokat be kell állítani (chmod).

Záradék

Megjegyzések:

  • A fenti példákban a 192.168.1.200 IP címen egy Backup szerver, a 192.168.1.100 címen pedig egy Samba kiszolgáló működik. A Backup szerveren telepítettem az NFS kiszolgálót, a Samba szerveren pedig a klienst, majd csatoltam a Samba szerver fájlrendszerébe a Backup tárhelyét. Ezután egy egyszerű tar paranccsal már meg is oldható a Samba szerveren lévő windowsos megosztások tartalma.
  • A csatolási művelet nálam elég lassan (5-10 mp) történt, bár hozzá kell tennem hogy egy nagyon minimalista kis teljesítményű servert helyeztem üzembe.

Használt források: 




2014. május 15., csütörtök

Ubuntu fix IP beállítás

Ubuntu Server telepítését ha gyorsan csináltad és nem vacakoltál a finombeállítással telepítés közben, akkor után szükséges lehet (szerintem mindenképpen kell) hogy DHCP címkiosztásról átállítsuk a rendszert fix IP címre.
A Linux az IP konfigurációt a /etc/network/interfaces fájlban tárolja. Pontosabban itt kell megadni az elérhető hálózati csatolók IP hálózati paramétereit.

sudo vi /etc/network/interfaces

A következők alapján módosítsuk a csatoló paramétereit:

iface eth0 inet static
       address 192.168.1.100 #a csatoló IP címe
       netmask 255.255.255.0
       network 192.168.1.0
       broadcast 192.168.1.255
       gateway 192.168.1.1
       dns-nameservers 192.168.1.100 8.8.8.8 #DNS szerverek
       dns-search sajat.halozat #hálózat neve amiben keresni fog



Írjuk át a /etc/hosts fájlban a következő sort:

127.0.1.1 myserver.mynetwork.lan

erre:

192.168.1.100 mysqrver.mynetwork.lan myserver

Indítsuk újra a hálózatot:

sudo /etc/init.d/networking restart

2014. május 8., csütörtök

QT 5 telepítése Ubuntu-ra

Az ubuntu.hu oldalon nemrégiben megjelent egy cikk, mely néhány magyar nyelvű ingyenes rendszergazdáknak szóló elektronikus szakkönyv megjelenését és letölthetőségét közölte.
Az engem érdeklő linux rendszergazdai könyvek között volt még néhány másik is. Többek között egy "QT strandkönyv" címre hallgató is. A könyv igen könnyed olvasmányt ígér a QT programozásról. Gondoltam megismerkedem ezzel a környezettel/nyelvvel is.
Ubuntu Linuxot használok desktop környezetnek, így ez alá akartam telepíteni a legújabb QT 5.2-t. Mivel az Ubuntu tárolókban QT 5.0.2 szerepel ezért gondoltam hogy inkább letöltöm és nem a tárolókból telepítem.
Találtam egy leírást a QT projekt oldalán, mely az Ubuntu telepítést írja le. Ez alapján a következő műveleteket csináltam végig:


  1. Letöltöttem a projekt oldaláról a 32 bites telepítőkészletet (a leírásban az offline készlet letöltése szerepel, én az online-t találtam csak meg, így azt szedtem le)
  2. Futtatási jogot adtam a letöltött csomagnak, majd elindítottam:

    chmod +x qt-opensource-linux-x86-1.6.0-online.run
    ./qt-opensource-linux-x86-1.6.0-online.run
  3. A g++ telepítéséhez a következő csomagot kell telepíteni:

    sudo apt-get install build-essential
  4. Ezután már csak az OpenGL könyvtár telepítése szükséges:

    sudo apt-get install mesa-common-dev
Ezek után elindítottam a QT Creatort, csináltam egy alap üres GUI alkalmazást, próbáltam futtatni, de hibaüzenet fogadott:

cannot find lGL


Egy csomó google-zás után találtam rá a megoldásra. Telepíteni kell még egy OpenGL könyvtárat:

sudo apt-get install libgl1-mesa-dev

Ezek után már gond nélkül fordulnak a QT alkalmazások.