JAH190 - Linux Server - Perusteet

Näkymät
Syotec Wiki
Loikkaa: valikkoon, hakuun

Sisällysluettelo

Linux palvelimena

Linux on saavuttanut vahvan aseman palvelinkäytössä, eikä suotta. Suosioon on olemassa useita syitä, joista muutama on lueteltu alla.

  • Muokattavuus
  • Suorituskyky
  • Luotettavuus ja turvallisuus
  • Hallittavuus
  • Päivitykset

Toisaalta Linux koetaan monessa mielessä epävarmaksi ratkaisuksi. Tähän vaikuttavia tekijöitä ovat:

  • Ammattitaidon puutteellisuus
  • Kriittisyys avointa lähdekoodia kohtaan
  • Mainonta.. tai sen puute

Yllä mainitut asiat silmällä pitäen olen luonut tämän materiaalin. Täytyy muistaa, että Linux-palvelin käyttää täysin samaa rautaa kuin muutkin käyttöjärjestelmät. Emme siis kiinnitä rautapuoleen niin paljon huomiota, paitsi avartaaksemme ajatusmaailmaa. Pääsääntöhän on, että palvelimen pitää täyttää tietoturvan peruskolmio eli:


Saatavuus Onhan palvelut käytössä 24/7? Käytännössä tähän ei päästä koskaan, mutta esimerkiksi UPS, RAID, kahdennetut virtalähteet, HOT SWAP ja palvelimien kahdentaminen parantaa luotettavuutta merkittävästi. Otetaan insinööritieteestä käytännönläheinen, mutta täysin teoreettinen esimerkki: yhden palvelimen käytettävyys on 90-prosenttinen eli on poissa käytöstä 36,5 päivää vuodessa. Lisäämällä toinen palvelin rinnalle, eli toisen rikkoutuessa voidaa ottaa toinen käyttöön, saadaan käytettävyys nousemaan arvoon 0,9+0,9-0,9*0,9=0,99. 36,5 päivää muuttuu 3,65 päivään. Muutos on siis merkittävä, mutta onko tarpeellinen?


Luottamus Eihän kukaan pääse katsomaan hänelle kuulumattomia tietoja? Esimerkiksi pääsylistat, palomuurit ja kryptaukset on kehitetty tätä asiaa varten. Onhan palvelinhuoneen ovi lukossa?


Eheys Pysyyhän tieto siinä muodossa, jossa sen on tarkoituskin pysyä? Sähkökatkot, levyrikot, tuntemattomat käyttäjät ja muut tekijät eivät saa vahingoittaa tätä.


Palvelinkäyttö on siis aivan eri maailma kuin työasemapuoli, jossa korostuu täysin toiset asiat. Palvelimissa voidaan tinkiä käyttöliittymän ulkoasuista ja keskittyä muihin asioihin, kuten hallittavuuteen ja luotettavuuteen. Näissä asioissa Linux on vahva, sillä käyttöjärjestelmän perusrakenne on omiaan erilaisiin ympäristöihin. Linuxin perusrakenne on hahmoteltu alla olevassa kuvassa.


Linuxin perusrakenne


Muokattavuus

Linux on rakennettu avoimen lähdekoodin pohjalta, kuten valtaosa siihen asennettavista ohjelmistakin. Järjestelmän loistavuus on siinä, että käyttöjärjestelmästä voidaan poistaa kaikki ylimääräinen "hömppä" ja keskittyä olennaiseen, eli palvelimelle tarkoitettuun tehtävään. Järjestelmää päästään muokkamaan hyvinkin syvälle, joskus jopa liiankin syvälle, jolloin vaaditaan vankkaan tietotaitoa laitteiston kokonaisuuden ymmärtämiseksi.

Linuxissa on hyvin voimakkaasti pidetty erillään erilaiset osat. Graafinen käyttöliittymä on oma ohjelmansa, lähes jokainen verkkopalvelu on ohjelma ja itse asiassa käyttöjärjestelmän ydinkin, eli kernel, on vain kokoelma ohjelmia ja moduuleja. Ohjelmien eriyttämisen lisäksi käyttäjien ja järjestelmän välinen ero on suuri. Lähes poikkeuksetta jokaisessa Linuxissa on normaalikäyttäjän lisäksi pääkäyttäjä eli root. Tämä näkyy parhaiten siten, että esimerkiksi Gnomessa on työkalut käyttäjäkohtaisten asetuksien muokkaamiseen (Järjestelmä => Asetukset) ja järjestelmäkohtaisten asioiden muokkaamiseen (Järjestelmä => Ylläpito). Ylläpidolliset asiat vaativat pääkäyttäjän oikeudet, jolla turvataan se, ettei normaalikäyttäjä pääse vahingoittamaan järjestelmän toimintaa.

Monien käyttäjien mieltämä heikkous on juuri järjestelmän vahvuus. Useat käyttäjät näkevät järjestelmän moduulirakenteen sekavana, mutta kriittisissä sovelluksissa ei voida käynnistää käyttöjärjestelmää päivittäin uudestaan, että saavutetaan käynnistymisen jälkeinen vakaan tila. Näissä tapauksissa on äärimmäisen tärkeää, että tarpeettomat ja/tai epävakautta aiheuttavat sovellukset, jotka ennen pitkää täyttävät muistin ja rekisterit, voidaan ottaa kokonaan pois käytöstä.

Suorituskyky

Linux on muokattavuutensa johdosta viritettävissä erittäin suorituskykyiseksi järjestelmäksi. Tosiasia on se, että jokainen sovellus on riippuvainen resursseista. Tyypillisiä sovelluksien käyttämiä resursseja ovat prosessori, keskusmuisti ja verkkoyhteys. Sovelluksen käynnistyessä, sille annetaan prosessinumero ja sille varataan resurssi. Sovelluksen käyttötarkoituksen mukaisesti eri resursseja kulutetaan eri tavoin. Esimerkiksi selain kuluttaa yleisesti ottaen verkkoyhteyttä. Jos verkokyhteys on epäluotettava, surffaaminen ei ole millään tavoin sujuvaa. Verkkoyhteyden tarjoama resurssi on siis pullonkaula.

Vaikka sovellus ei olisi aktiivisessa käytössä, päällä ollessaan se kuluttaa aina esimerkiksi keskusmuistia. Sovelluksella on siis kaikissa tapauksissa allokoitu muistialueesta palanen. Sovelluksen haukkaama palanen on poissa muilta, vaikka ohjelma ei ole aktiivisessa käytössä laisinkaan. Näissä tapauksissa on äärimmäisen tärkeää, että tuo edellä mainittu "hömppä" on poissa, jolloin resurssit voidaan antaa mahdollisimman laajasta niitä todella tarvitsevien sovelluksien käyttöön. Tämä sama logiikka pätee samoin myös koneen muihin resursseihin.

Muokattavuuden ansiosta laiteympäristöistä saadaan otettu kaikki mahdollinen tehokkuus irti ja sovittaa esimerkiksi ylläpidolliset toimet tapahtumaan sellaiseen aikaan, kun järjestelmässä ei ole käyttösovelluksien aiheuttamaa kuormaa.

Luotettavuus ja turvallisuus

Linux on alunperin rakennettu verkkoon monikäyttäjäympäristöihin, joissa verkko, käyttäjät ja niihin liittyvät oikeudet ovat olleet äärimmäisen tärkeässä roolissa. Näkyvä asia historiasta on pääkäyttäjä eli root, jolla on käytännössä kaikkeen mahdolliseen ja mahdottomaan riittävät oikeudet. Tämä on heijastanut suoraan erittäin suureen järjestelmän ja normaalikäyttäjän väliseen eroon. Pääkäyttäjä tekee järjestelmän toimintaa vaikuttavia asioita ja normaalikäyttäjä keskittyy käyttämiseen. Tästä syystä esimerkiksi viruksien, matojen ja muiden haittaohjelmien pääsy koneelle on erittäin vaikeaa, sillä normaalikäyttäjän oikeudet järjestelmän toiminnan kannalta ovat hyvin rajalliset. Käyttäjä voi siis tehdä vahinkoa itselleen ja omille tiedoilleen, mutta muiden käyttäjien toimintaan vahingoille ei ole suurta merkitystä.

Käyttäjälogiikan lisäksi verkkoyhteyksien liittyvät asiat on otettu huomioon jo lähes alkumetreiltä lähtien. Linuxiin löytyy valtava määrä erilaisia tapoja ottaa verkon yli yhteyttä, mutta yhteyksiin yhdistyy aina tietoturvauhka. Yhteyksiä voidaan rajoittaa sovellustasolla, eli esimerkiksi määritellään Telnet-palvelinohjelmistolle sallitut käyttäjät tai sallittu IP-osoite. Sovellustasolla tapahtuvaan määrittelyyn ei yleensä täysin luoteta, jolloin Internetin ja sovelluksen väliin laitetaan palomuuri. Sovellustason uhkaa voidaan siis pienentää palomuurilla, mutta tässäkin tapauksessa Linuxin perusrakenne antaa mahdollisuuden siihen, että poistetaan turhat ja tarpeettomat sovellukset käytöstä. Ei siis avata porttia, johon yhteys voidaan ottaa!

Palomuuri on ollut Kernelin osa jo yli kymmenen vuoden ajan. Nykyisin palomuuri tunnetaan nimellä Netfilter, josta yleisesti käytetään nimeä Iptables. Palomuurin ollessa osa kerneliä sen nopeus ja toimintavarmuus on äärimmäisen hyvä. Lähes jokaisessa Linuxissa palomuuri on jatkuvasti päällä, mutta voimassa oleva palomuurisääntö ei ota mitään kantaa liikenteeseen. Sääntöjä voidaan ottaa käyttöön välittömästi ja huomaamatta erilaisilla hallintatyökaluilla. Palomuurisääntöjä tehdessä täytyy muistaa, että mitä enemmän sääntöjä ja liikennettä on, sitä enemmän järjestelmää kuormitetaan.

Ehkä suurin kysymys Linuxin kohdalla on se, että voivatko avoimen lähdekoodin ohjelmat olla turvallisia. Avoimeen lähdekoodiin perustuvien ohjelmien takana ovat yhteisöt, jotka monesti ovat voittoa tavoittelemattomia. Yhteisöt muodostuvat asiaan vihkiytyneistä henkilö- ja yritysjäsenistä, joita suosituimmilla projekteilla eli ohjelmilla tai ohjelmistoilla on valtava määrä. Jäsenet on yleensä luokiteltu kehittäjiin, testaajiin ja loppukäyttäjiin. Kehittäjät sananmukaisesti kehittävät lähdekoodia, testaajat raportoivat ongelmista ja loppukäyttäjät keskittyvät käyttämään. Voiko järjestelmä pyöriä ilmaisella lähdekoodilla? Voi ja pyörii, sillä rahat yksittäisten jäsenien toimintaan tulee palveluista ja muista lopputuotteista. Tuotteita voivat olla puhelimet, tukiasemat, valvontakamerat, varmuuskopiointijärjestelmät ja valvontajärjestelmät, eli tuotekirjo on äärettömän suuri. Linus Torvalds kiteyttää tämän asian osuvasti.

Software is like sex: it's better when it's free.

Hallittavuus

Linux on erittäin modulaarinen käyttöjärjestelmä, mikä tarkoittaa esimerkiksi sitä, että lähes jokainen käynnissä oleva ohjelma on itsenäisesti erillään toimiva prosessi. Ohjelma voi olla jatkuvasti käynnissä tai ohjelma voidaan käynnistää vain tietyksi ajaksi tiettyyn toimenpiteeseen. Näitä toimenpiteitä, ajankohtaa, resurssien tarvetta ja onnistumista käyttäjä pystyy hallitsemaan täydellisesti. Suurin kysymys on, että miten.

Linuxin pääroolissa on ollut ja on edelleen komentorivi. Oletusasennuksessa Linux tarjoaa käyttäjälleen seitsemän terminaalia, joilla käyttäjät voivat suorittaa omia komentojaan. Jos järjestelmässä on graafinen työpöytä, lukkiutuu se yleensä terminaaliin numero 7. Graafista työpöytää hallitaan joko paikallisesti tai esimerkiksi VNC-palvelinohjelman kautta. Terminaalit voidaan ottaa käyttöön esimerkiksi sarjaportin kautta, jolloin erilaisia hallintatoimenpiteitä voidaan tehdä esimerkiksi kannettavalla koneella. Yleinen käytäntö on kuitenkin jakaa komentorivipohjainen hallintaliittymä verkon kautta jonkin tunnelin läpi, joista nykyisin yleisin on SSH-protokolla. Järjestelmän hallinta voidaan antaa myös selainpohjaisen hallintaliittymän käyttöön. Vaihtoehtoja on valtavasti, joista jokainen voi valita parhaiten tilanteeseen sopivan.

Järjestelmää voidaan siis hallita usealla eri tavalla. Hallintaliittymän kautta päästään kiinni järjestelmän hakemistorakenteeseen ja järjestelmäkomentoihin. Hakemistorakenteesta löytyy valtavasti informaatiota, joita tuottaa eri prosessit eli ohjelmat. Lähes jokaisesta ohjelmasta päästään määräämään niin sanottu lokituksen taso, joka kertoo sen, että kuinka paljon informaatiota ohjelma järjestelmään tuottaa. Ohjelma voi lokittaa tietoa haluttuun paikkaan, joista yleisimmät ovat terminaali ja tiedostot. Tämän lisäksi on olemassa oma ohjelma, joka tuottaa tietoa järjestelmä yleisestä toiminnasta. Halutessaan päästään tilanteeseen, jossa jokainen näppäimen painalluskin tallennetaan haluttuun niin sanottuun lokitiedostoon.

Järjestelmän peruskomennot tarjoavat valtavasti työkaluja, joilla päästään seuraamaan järjestelmän tilannetta ja vaikuttamaan järjestelmän toimintaan. Komentoja ja tapojo on lukuisia, joista jokainen käyttäjä voi valita omalle toimintatavalla sopivimman. Linux tarjoaa hallittavuutensa puolesta mahdollisuuden vaikka mihin.

Päivitykset

Linuxin perustuessa avoimeen lähdekoodiin suurin osa sen ohjelmista ovat GPL-lisensointiin pohjautuvia. Lyhykäisyydessään GPL-lisensoidun ohjelman voi kuka tahansa kopioida itselleen ja jakaa eteenpäin. Jakeluteknisesti tämä on tarkoittanut valtavaa etua, sillä kuka tahansa voi asentaa verkon kautta järjestelmän lukemattomaan määrään koneita. Jakelumediana toimii siis verkko ja siellä luotettava jakelupalvelin, joka sijaitsee esimerkiksi julkisrahoitteisilla yliopistoilla. Käyttäjälle tämä tarkoittaa siis irtautumista CD- ja DVD-levyistä maailmaan, jossa kaikki ohjelmat on päivitetty ajantasella tehokkaan jakeluverkoston ansiosta. Linux voidaan määritellä tarkistamaan jakelupalvelimilla olevien ohjelmistojen versiot, ja vertaamaan niitä omaansa. Jos johonkin ohjelmaan on tullut esimerkiksi turvallisuuspäivitys, kasvatetaan ohjelmistoversiota yhdellä, jolloin Linux ymmärtää päivittää itsensä. Päivitysoperaatio voidaan ajoittaan esimerkiksi hetkeen, jolloin järjestelmällä ei ole kuormitusta.

Linuxille on tyypillistä, että päivityksiä tulee jakeluversiosta riippuen enemmän tai vähemmän. Päivityksien määrä on suoraan suhteesa siihen, että kuinka paljon ohjelmia järjestelmään on asennettu ja millaisia ohjelmia jakeluversio käyttää. Avoimen lähdekoodin ohjelmien valmiusaste voidaan kategorioida esimerkiksi viiteen tasoon, jotka ovat stable, testing, unstable, experimental ja oldstable. Versioista stable-tason saavuttaneisiin ohjelmiin julkaistaan vain turvallisuuspäivityksiä, jolloin päivityksien määrä on hyvin pieni. Näissäkin tapauksissa järjestelmän uudelleenkäynnistäminen vaaditaan hyvin harvoin, ja näin saavutetaan tilanne, jossa järjestelmän uptimet voivat olla useita satoja päiviä.

Linuxissa kannattaa muistaa, että päivitysjärjestelmän kautta tulee päivityksiä kaikkiin järjestelmän ohjelmiin eli esimerkiksi Internet-selaimeen. Ei tarvitse siis päivittää jokaista sovellusta erikseen.


Sisällysluetteloon


Tiedostojärjestelmä

Linuxin tiedostojärjestelmä pitää sisällään sekä hakemistorakenteen että järjestelmäkomennot. Tiedostojärjestelmästä on olemassa vapaamuotoinen standardi, joka määrittelee Linuxin ja muiden unix-järjestelmien sekä BSD-pohjaisten käyttöjärjestelmien yhteisiä hakemistoja ja komentoja. Järjestelmillä on erittäin pitkät perinteet ja FHS on osoitus siitä, että järjestelmät ovat hyvin yhteneväiset toistensa kanssa. FHS ei ole mikään kiveen kirjoitettu standardi, joten järjestelmien välillä on eroja, mutta peruslogiikka on sama. Alla on mainittu muita Linuxin kaltaisia järjestelmiä

http://www.openbsd.org/
http://www.freebsd.org/
http://www.sun.com/software/solaris/
http://www.apple.com/fi/macosx/
http://www.hp.com/products1/unix/
http://www.ibm.com/servers/aix/

Hakemistorakenne

Hakemistorakenteessa näkyy vahvasti Linuxin käyttämä käyttäjähierarkia ja ympäristö. Käyttäjähierarkia näkyy niin, että on kansioita, joihin vain ja ainoastaan pääkäyttäjä voi tehdä muutoksia (Ei-jaettavat). Näiden kansioiden sisältö voi olla kiinteää, jolloin pääkäyttäjä tekee muutokset käyttäen esimerkiksi tekstieditoria. Toinen vaihtoehto on muuttuvasisältöinen, jolloin järjestelmä käyttää kansioita erilaisen dynaamisen sisällön säilytykseen, joista esimerkkinä voisi mainita prosessilistan.

Ei-jaettavia kansioita

Edellisen lisäksi järjestelmässä on kansioita, joita kutsutaan nimellä Jaettavat. Nämä kansiot on tarkoitettu ohjelmien ja järjestelmän käyttäjien käyttöön. Osaan kansioista käyttäjillä ja ohjelmilla on vain lukuoikeudet, jolloin puhutaan termistä kiinteä. Tiettyihin kansioihin on muutosoikeudet ja näitä kansioita voidaan käyttää esimerkiksi kotikansioina.

Jaettavat kansiot

Perusjärjestelmä eli juurikansio sisältää aina vähintään alla olevan listan kansiot.

Directory	Description
bin		Essential command binaries
boot		Static files of the boot loader
dev		Device files
etc		Host-specific system configuration
lib		Essential shared libraries and kernel modules
media		Mount point for removeable media
mnt		Mount point for mounting a filesystem temporarily
opt		Add-on application software packages
sbin		Essential system binaries
srv		Data for services provided by this system
tmp		Temporary files
usr		Secondary hierarchy
var		Variable data

Juurikansiossa olevilla kansioilla on useilla oma rakenteensa ja sisältönsä. FHS on yleensä määrittellyt vähimmäisvaatimukset, joita eri järjestelmäversiot täydentävät esimerkiksi käyttämillään komennoilla.

Järjestelmäkomennot

Järjestelmäkomennot on pääsääntöisesti jaettu käyttäjien välillä niin, että on komentoja, joita voi suorittaa vain pääkäyttäjän oikeuksilla ja komentoja, joita voi suorittaa normaaleilla käyttäjän oikeuksilla. Nämä komennot sijaitsevat juurikansion alikansioissa /bin ja /sbin. Lyhenne bin tarkoittaa sanaa binaries, joka on suoritettava ohjelma, kuten esimerkiksi Windows-järjestelmien exe-tiedostot. Lyhenne sbin tarkoitaa system binaries, jotka ovat käytännössä kuin exe-tiedostot, jotka vaativat käynnistämiseen pääkäyttäjän oikeudet.

Tämän lisäksi on pääkäyttäjän oikeudet vaativia komentoja, joita voidaan suorittaa järjestelmän ulkopuolella. Tämä tarkoittaa käytännössä sitä, että esimerkiksi Gnomessa voidaan käynnistää ohjelma pääkäyttäjän oikeuksilla. Nämä ohjelmat ovat kansiossa /usr/sbin. Gnomessa, eli järjestelmän ulkopuolella, käytettävät muut ohjelmat ja komennot sijaitsevat kansiossa /usr/bin, joista esimerkkinä firefox.

Alla olevassa listassa on kansion /bin vähimmäissisältö. Toimivassa järjestelmässä kansiossa saattaa olla paljon muutakin, koska esimerkiksi Linuxin jakeluversiot käyttävät järjestelmässään paljon muitakin komentoja.

Command		Description
cat		Utility to concatenate files to standard output
chgrp		Utility to change file group ownership
chmod		Utility to change file access permissions
chown		Utility to change file owner and group
cp		Utility to copy files and directories
date		Utility to print or set the system data and time
dd		Utility to convert and copy a file
df		Utility to report filesystem disk space usage
dmesg		Utility to print or control the kernel message buffer
echo		Utility to display a line of text
false		Utility to do nothing, unsuccessfully
hostname	Utility to show or set the system's host name
kill		Utility to send signals to processes
ln		Utility to make links between files
login		Utility to begin a session on the system
ls		Utility to list directory contents
mkdir		Utility to make directories
mknod		Utility to make block or character special files
more		Utility to page through text
mount		Utility to mount a filesystem
mv		Utility to move/rename files
ps		Utility to report process status
pwd		Utility to print name of current working directory
rm		Utility to remove files or directories
rmdir		Utility to remove empty directories
sed		The `sed' stream editor
sh		The Bourne command shell
stty		Utility to change and print terminal line settings
su		Utility to change user ID
sync		Utility to flush filesystem buffers
true		Utility to do nothing, successfully
umount		Utility to unmount file systems
uname		Utility to print system information

Linux on erittäin komentorivipainotteinen käyttöjärjestelmä, ja se näkyy lähes jokaisessa toiminnassa. Komentorivi ei hienostunut, mutta erittäin tehokas tapa hoitaa erilaisia toimenpiteitä järjestelmässä.


Sisällysluetteloon


Laitteistorajapinta

Laitteistotuen heikkous on ollut eräs Linuxin kompastuskivistä. Tämä on monesti kuultu väite, joka ei täysin pidä paikkaansa. Laitteistotuki on ollut puutteellista suuren yleisön laitteisiin, kuten esimerkiksi näytönohjaimiin ja äänikortteihin. Järjestelmän toiminnan kannalta oleellisin laitteisiin, kuten esimerkiksi verkkokortteihin ja levyasemiin, tuki on ollut erittäin hyvä. Ongelmalaitteiden osalta laitteistotuki on parantunut huomattavasti kehitetyn LSB-standardisoinnin myötä, jonka seurauksena ennen mahdollisiksi ongelmatapauksiksi mielletyt komponentit ovat saaneet ajurit. LSB:n tarkoituksena on yhtenäistää rajapinta laitteistovalmistajien ja Linuxin välillä.

Yhteistä kaikille laitteille on se, että lähes poikkeuksetta jokainen ajuri on osa kerneliä. Tästä syystä Linux ei käytä juurikaan sanaa ajuri, vaan yleisesti käytetään termiä moduuli. Linuxissa on siis vain moduuleita, jotka toimivat rajapintoina järjestelmään. Näytönohjaimen ajuri on täysin samanlainen komponentti järjestelmälle kuin esimerkiksi palomuuri. Jos siis jokin laite ei toimi, sille ei ole joko moduulia tai sen moduulia ei ole otettu käyttöön.

Moduuleja käsitellään komentorivipohjaisilla käskyillä, joista alla on listattu yleisimmät

lsmod — program to show the status of modules in the Linux Kernel
rmmod — simple program to remove a module from the Linux Kernel
insmod — simple program to insert a module into the Linux Kernel
modprobe — program to add and remove modules from the Linux Kernel

Edelliset käskyt suorittavat moduuleihin liittyviä toimenpiteitä järjestelmän ollessa käynnissä. Järjestelmää voidaan muokataa niin, että moduuli otetaan käyttöön jo käynnistysvaiheessa tai vasta tarvittaessa. Jos halutaan, että moduuli otetaan käyttöön järjestelmän käynnistyessä, voidaan asia tehdä kahdella eri tavalla. Ensimmäinen vaihtoehto on, että esitellään järjestelmälle tiettyyn tiedostoon kirjoittamalla, että ota tämä moduuli käyttöön. Toinen tapa on asettaa moduuli osaksi kerneliä, jolloin joudutaan suorittaa niin kutsuttu kernelin kääntö.

Suuntaus on usean vuoden ajan ollut se, että kernelistä tulee enemmän ja enemmän ensimmäisen vaihtoehdon kaltainen. Edut ovat merkittävät, sillä näin voidaan välttää monen käyttäjän hyvinkin vaativaksi kokema kääntöoperaatio. Toisekseen järjestelmää muokattavuus on jälleen äärimmäisen hyvä, sillä yksinkertaisilla tekstitiedostojen muokkaamisilla voidaan lyhentää esimerkiksi käynnistysaikaa huomattavasti. Järjestelmän käynnistymisen eräs oleellinen osa on moduulien lataaminen eli haetaan moduulit esimerkiksi kovalevyltä, ladataan muistiin ja otetaan osaksi järjestelmää. Toisaalta kernelin kääntötyökalut ovat parantuneet vuosien saatossa huomattavasti, jolloin kääntäminenkään ei ole täysin poissuljettava vaihtoehto.

Linuxin laitekanta saadaan selvitettyä käynnissä olevasta järjestelmästä esimerkiksi seuraavilla komennoilla, joilla saadaan selvitettyä laitteet sekä niiden käyttämät ajurit.

uname - print system information
lshw - list hardware
lspci - list all PCI devices
lsusb - list USB devices

Sisällysluetteloon


Hallinta ja ylläpito

Linuxin hallinnassa tärkeimmässä roolissa on komentorivi. Edellä jo mainittiin, että oletuksena järjestelmä käynnistää seitsemän terminaalia, joista graafinen käyttöliittymä varaa käyttöönsä yhden. Loppuihin kuuteen pääsee käsiksi painamalla kirjainyhdistelmää CTRL-ALT-F1, jonka jälkeen näytölle tulee terminaali numeroltaan yksi. Terminaalit ovat perua modeemiajalta, ja tästä syystä kaikille seitsemälle ei välttämättä löydy luonnollista tarvetta. Modeemien korvaajaksi on tullut normaalit TCP/IP-pohjaiset palvelin-asiakas-sovellukset, joista käytetyin on SSH. Yleisin SSH-palvelin on nimeltään openssh-server, joka löytyy lähes jokaiseen Linux-versioon. Sitä ei yleensä oletuksena asenneta, ja jos asennetaankin, sitä ei käynnistetä. Jos ssh otetaan käyttöön, tulee ensimmäisenä eteen tilanne, jossa pitää ottaa palomuuri käyttöön. Lähes poikkeuksetta jokaisessa Linuxissa palomuuri on käynnissä, mutta käytössä ei ole yhtään sääntöä. Sääntöjen käyttöönotto tapahtuu yksinkertaisimmillaan komennolla iptables, joka määritellään manuaalissa seuraavasti

iptables - administration tool for IPv4 packet filtering and NAT
ip6tables - IPv6 packet filter administration

Ennen minkään asian hallintaa, täytyy järjestelmän lähteä käyntiin. Järjestelmä käynnistyy aina tietylle ajotasolle. Tämä taso määritellään Linuxin jakeluversiosta riippuen tiettyyn tiedostoon, ja oletusajotaso on yleensä 2. Ajotasot näkyvät käyttäjän toiminnassa, kun järjestelmä käynnistetään, sammutetaan tai käynnistetään uudelleen. Käytännössä edelliset toimenpiteet käynnistetään ajotason muutoksella. Ajotasot on määritelty Linuxin manuaaleissa seuraavasti:

All scripts executed by the init system are located in /etc/init.d.
The directories /etc/rc?.d (? = S, 0 .. 6) contain relative links to
those scripts. These links are named S<2-digit-number><original-name>
or K<2-digit-number><original-name>.

If a scripts has the ".sh" suffix it is a bourne shell script and
MAY be handled in an optimized manner. The behaviour of executing the
script in an optimized way will not differ in any way from it being
forked and executed in the regular way.

The following runlevels are defined:

N       System bootup (NONE).
S       Single user mode (not to be switched to directly)
0       halt
1       single user mode
2 .. 5  multi user mode
6       reboot

Käyttäjällä on käytettävissä ajotasojen hallintaan seuraavat komennot

reboot, halt, poweroff - reboot or stop the system
telinit - change runlevel
runlevel - output previous and current runlevel
update-rc.d - install and remove System-V style init script links (Debian)
invoke-rc.d - executes System-V style init script actions (Debian)

Järjestelmä lähtee käyntiin, ja on käynnistymisen jälkeen tietyllä ajotasolla. Jo käynnistysvaiheessa moneen kansiossa /var/log olevaan lokitiedostoon on kirjoitettu tietoa käynnistymisestä. Kansiossa on useita lokitiedostoja, joista jokaiseen kirjoitetaan tietoa tietyistä tapahtumista ja ohjelmista. Lokitiedostot ovat käytännössä normaaleja tekstitiedostoja, joita voidaan katsella perustekstinkäsittelytyökaluilla. Lokitiedostoja kontrolloi ohjelman nimeltään syslogd, joka esitellään seuraavasti

sysklogd - Linux system logging utilities.

Mitä järjestelmässä tapahtuu parhaillaan, on kysymys joka ylläpidossa tulee vastaan päivittäin. Linux tarjoaa valtavasti erilaisia komentoja, joilla kokonaisuus hahmottuu niin, että järjestelmän toiminta saadaan normalisoitua. Alla lueteltu komennoista muutama

top - display Linux tasks
free - Display amount of free and used memory in the system
ps - report a snapshot of the current processes.
pstree - display a tree of processes
df - report file system disk space usage
du - estimate file space usage
strace - trace system calls and signals
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
iftop - display bandwidth usage on an interface by host
kill - send a signal to a process

Linuxissa kello ja siihen perustuva eri asioiden ajoittaminen on erittäin tärkeässä roolissa. Tähän on useita perusteluita, joista yksi on järjestelmän ylläpitotoimien ajoittaminen ruuhka-aikojen ulkopuolella. Toinen erittäin tärkeä asia on järjestelmän seurantaan liittyvä, sillä lokitiedoissa havaintoja kirjoitetaan aina kellonaika mukaan lukien. On äärimmäisen tärkeää, että järjestelmän kello on ajassa, jota voidaan verrata ylläpitäjän kelloon. Alla esitetty muutamia tyypillisä komentoja.

date - print or set the system date and time
ntpdate - set the date and time via NTP
cron - daemon to execute scheduled commands (Vixie Cron)
anacron - runs commands periodically

Sisällysluetteloon


Debian Lenny

Debian on saavuttanut luotettavuutensa johdosta vankan aseman erityisesti palvelinkäytössä. Syy luotettavuuteen piilee ohjelmien kehitysasteissa, sillä Debianiin otetaan mukaan vain ja ainoastaan ohjelmia, jotka ovat saavuttaneet Stable-asteen. Tämä tarkoittaa siis sitä, että Debianissa oleviin ohjelmiin tulee ainostaan turvallisuuspäivityksiä. Tästä syystä järjestelmän uudelleen käynnistämisen tarve on erittäin vähäinen.

Lähes täydellisen luotettavuuden haittapuolena on se, että ohjelmat eivät välttämättä ole viimeisintä ja uusinta versiota. Tämä siksi, että vakaalle versiolle ei ole julkaisuaikataulua. Vakaa versio julkaistaan vasta silloin, kun se on todellakin vakaa. Esimerkiksi tuorein vakaa versio (Lenny) julkaistiin 14.2.2009 ja edellinen julkaisu (Etch) tapahtui 8.4.2007. Etch-version ohjelmat ovat siis lähes kaksi vuotta vanhoja, mutta turvallisia.

Debianista on julkaistu monta erillistä ns. aliversiota, joista kuuluisin on ehkä Ubuntu. Ubuntusta on julkaistu oma server-versionsa ja sen asennusopastus löytyy täältä. Käytännössä ne ovat kuin Debianeita, joiden ohjelmat ovat Stable-, Testing- ja Unstable-tilassa. Tämä voi näkyä joidenkin ohjelmien "ei niin" luotettavana toimintana ja suurena määränä päivityksiä (Kaikki ohjelmathan saavuttavat ennen pitkää Stable-tilan). Käytännössä voin todeta, että työasemakäytössä näiden jakeluiden luotettavuus on täysin riittävä.

Perusasennus

Tässä materiaalissa on opastettu Debian asennus. Tässä asennuksessa asennetaan perusjärjestelmä ilman Graafista ympäristöä. Järjestelmä sopii erittäin hyvin moniin ympäristöihin ja erityisesti niihin, joissa suorituskyky on rajallinen sekä ylläpitäjän asiantuntemus vahva. Käytännössä kaikki asiat tehdään komentoriviltä, jota moni vierastaa. Komentorivi on monessakin asiassa (prosessien käsittely, järjestelmän hallinta..) huomattavasti graafista ympäristöä nopeampi.

KDE-työpöytä

Asennetaan graafinen työpöytäympäristö KDE.

apt-get install kdebase kde-i18n-fi

Gnome-työpöytä

Gnome on vastaava kuin KDE.

apt-get install gnome-desktop-environment

VirtualBoxin asiakaslisäosien asennus

Varmistetaan, että CD-levy on irroitettu asemasta. Tämä jälkeen muokataan tiedostoa /etc/fstab seuraavanlaiseksi.

debian:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/hda1       /               ext3    errors=remount-ro 0       1
/dev/hda5       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,exec,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Liitetään asiakaslisäosalevy, asennetaan vaaditut lisäpaketit.

debian:~# apt-get install build-essential linux-headers-2.6.26-2-686

Suoritetaan asiakaslisäosien asennus seuraavalla komennolla, jonka jälkeen käynnistetään kone uudestaa.

debian:~# /media/cdrom0/VBoxLinuxAdditions-x86.run



Sisällysluetteloon


Linux-palvelimen käyttö

Linux-palvelin pystyy tarjoaa valtavan määrän erilaisia palveluita käyttäjien saataville. Yleisimpiä ovat:

Yleisesti kaikki Linuxiin asennettavan palvelinohjelmistot ovat daemon-tyyppisiä eli käytännössä pyörivät järjestelmässä kenenkään mitään huomaamatta. Oleellisia asioita ovat:

  • Milloin ohjelma lähtee käyntiin?
  • Onko ohjelma käynnissä?
  • Mitä ohjelma tekee?

Näiden lisäksi palvelimelle (oli Linux tai mikä tahansa) on olennaista:

  • suojaaminen (Palomuuri, UPS...)
  • valvominen (SNMP, tekstiviestit...)
  • ylläpito ja käyttö (SSH, VNC, Webmin..)

Linuxiin ja Debianiin löytyy valtavasti materiaalia netistä. Alla yksi parhaista

http://www.debian-administration.org/

Käyttäjät

Linuxissa käyttälogiikka on aina perustunut pääkäyttäjään (root) ja normaalikäyttäjään. Pääkäyttäjällä on aina oikeudet tehdä mitä vain, eli käytännössä poistamaan ja sekoittamaan koko kovalevyn sisällön. Konetta käytetään siis pääsääntöisesti normaalikäyttäjänä, jolloin vaarallisille käskyille tarvitaan aina pääkäyttäjä oikeudet. Tämä tapahtuu Debianissa komennolla su. Jokaisella käyttäjällä on aina käyttäjänumero (UID). Käyttäjänumerot on allokoitu niin, että numerot 0-999 ovat konetilejä ja 1000-29999 ovat käyttäjätilejä. Sama logiikka pätee ryhmänumeroinnissa (GID). Konetilit on tarkoitettu koneella olevien ohjelmien käyttöön ja käyttäjätilit nimensä mukaisesti normaalikäyttäjien käyttöön.

Käyttäjätietojen hallintaan on käytettävissä useita eri komentoja. Käytännössä näillä komennoilla hallitaan kolmea tiedostoa, jotka kaikki ovat kansiossa /etc. Nämä tiedostot ovat passwd, group ja shadow. passwd sisältää käyttäjätiedot, group tiedot ryhmistä sekä niiden jäsenistä ja shadow käyttäjien salasanat. Koska käyttäjätiedot ovat tiedostoissa, niiden vaihtaminen normaaleilla tekstinkäsittelytyökaluilla on helppoa.

Seuraavilla komennoilla pyritään valaisemaan tilien hallintaan. Tarkoituksena on, että jokaisen komennon jälkeen katsotaan edellisessä kerrotut kolme tiedostoa.

cat /etc/passwd
cat /etc/group
cat /etc/shadow

adduser orvokki
adduser --group mansikki
adduser --ingroup mansikki leivokki
adduser --system --no-create-home --group ohjelma

deluser orvokki
deluser leivokki
delgroup mansikki
deluser ohjelma

rm -R /home/orvokki
rm -R /home/leivokki

Perusjärjestelmässä jokaiselle kansiolle ja tiedostolle määritetään omistaja ja ryhmä, sekä niiden oikeudet. Lisäksi otetaan kantaa siihen, että mitkä ovat muiden käyttäjien oikeudet. Seuraavassa on esimerkkejä oikeuksien muokkaamisesta.

cd /var
mkdir testikansio
touch testitiedosto
ls -l
ls -lan

chmod a-rwx,u+r testitiedosto
chmod 0700 testikansio
ls -lan

chown 2000 testitiedosto
chgrp 2000 testitiedosto
ls -lan

chown root:root testitiedosto
mkdir testikansio/alikansio
chgrp -R 2000 testikansio
cd testikansio
ls -lan

Ajotasot ja käynnistys-skriptit

Linux käynnistyy aina tiettyy ajotasoon. Ajotasoon on yhdistetty tietty kansio, johon linkitetään ohjelman ns. käynnistys-skripti. Debianissa /etc-kansiossa on tiedosto nimeltä inittab, joka määrää käynnistystason (yleensä 2). Myohemmin on esimerkki apache-palvelinohjelmiston käynnistysskriptistä, jonka todellinen sijainti on kansiossa /etc/init.d. Jos halutaan, että ohjelma lähtee järjestelmän käynnistyessä käyntiin, täytyy tehdä kyseisen käynnistystason kansioon halutun ohjelman esittely. Tämä esittely voidaan tehdä normaalina tiedostona, tai käyttää yleistä tapaa, joka on symbolinen linkitys. Tähän eri jakeluversiot tarjoavat erilaisia työkaluja, ja Debianin tarjoamat on esitelty alla.

runlevel - output previous and current runlevel
telinit - change runlevel
update-rc.d - install and remove System-V style init script links
invoke-rc.d - executes System-V style init script actions

Ajotasot ovat lyhykäisyydessään seuraavat:

0       halt
1       single user mode
2 .. 5  multi user mode
6       reboot

Ajotasoihin yhdistetään aina prioriteetti. Tämä tarkoittaa sitä, että missä vaiheessa järjestelmän käynnistyessä ohjelma käynnistetään (tai sammutetaan). Prioriteetti lähtee numerosta 0 ja nousee siitä ylöspäin. Mitä suurempi prioriteettinumero on, sitä myöhemmäksi käynnistys/sammutus ajoitetaan.

Otetaan esimerkki. Kansiossa /etc/init.d on alla oleva käynnistysskripti.

 
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop apache2 web server
### END INIT INFO
#
# apache2		This init.d script is used to start apache2.
#			It basically just calls apache2ctl.

Jos halutaan, että ohjelma lähtee koneen käynnistyessä käyntiin, annetaan seuraava komento

update-rc.d apache2 defaults

Ja poisto tapahtuu komennolla

update-rc.d -f apache2 remove

Jos halutaan, että ohjelma lähtee käyntiin vain tietyllä tasossa, annetaan seuraava komento. Komennolla apache käynnistyy vasta ajotasolla 3.

update-rc.d apache2 start 30 3 . stop 70 0 1 6 .

Käynnistysskriptiä käytettään ohjelman uudelleen käynnistämiseen. Eräs yleisimmistä tilanteista on se, että ohjelman konfiguraatiotiedostoja muutetaan ja ohjelma käynnistetään uudestaan.

Prosessit

Jokainen ohjelma luo käynnistyessään uuden prosessin, joka saa tietyn numeron. Prosessien hallintaan Debian tarjoaa monia käteviä työkaluja, joita alla muutama.

ps - report a snapshot of the current processes.
pstree - display a tree of processes
top - display Linux tasks
free - Display amount of free and used memory in the system
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
ss - another utility to investigate sockets

Prosessien käsittelyssä käytetään /etc/init.d-kansion skriptejä sekä kill, killall' ja xkill-komentoja

Esimerkkejä ps-komemnnosta:


Prosessilistaus, jossa kaikki prosessit

ville@ville-laptop:/$ ps xau
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2844  1688 ?        Ss   08:12   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   08:12   0:00 [kthreadd]
bind      4993  0.0  0.7  35484  7828 ?        Ssl  08:12   0:00 /usr/sbin/named -u bind
openldap  5221  0.0  0.4  26156  4688 ?        Ssl  08:12   0:00 /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf
dovecot   5632  0.0  0.1   3484  1556 ?        S    08:12   0:00 pop3-login
dovecot   5637  0.0  0.1   3492  1564 ?        S    08:12   0:00 imap-login
daemon    5780  0.0  0.0   1984   424 ?        Ss   08:12   0:00 /usr/sbin/atd
root      5796  0.0  0.0   2104   892 ?        Ss   08:12   0:00 /usr/sbin/cron
www-data  5956  0.0  1.8  36984 18720 ?        S    08:12   0:04 /usr/sbin/apache2 -k start

Tulostaa prosessilistauksen, jossa ylimmäisenä on eniten prosessoria käyttävä

ville@ville-laptop:/$ ps -eo pcpu,pid,user,args | sort -r -k1
%CPU   PID USER     COMMAND
 2.5  8860 ville    vlc
 2.4 14420 ville    /usr/lib/firefox-3.0.3/firefox
 1.8  5726 root     /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
 0.8 22151 ville    [ld-linux.so.2] <defunct>
 0.5  6213 ville    /usr/bin/pulseaudio --log-target=syslog
 0.3  4767 root     [kondemand/0]
 0.3 21978 ville    gnome-terminal
 0.2  6419 ville    /usr/lib/gnome-applets/geyes_applet2 --oaf-activate-iid=OAFIID:GNOME_GeyesApplet_Factory --oaf-ior-fd=30
 0.1 16911 ville    [ld-linux.so.2] <defunct>
 0.0  8227 root     /usr/sbin/smbd -D

Esimerkki pstree-komennosta


Prosessilistan tulostus

ville@ville-laptop:/$ pstree -p
init(1)─┬─NetworkManager(4926)───{NetworkManager}(5660)
        ├─NetworkManagerD(4940)
        ├─SystemToolsBack(24261)
        ├─acpid(4722)
        ├─apache2(5844)─┬─apache2(5956)
        │               ├─apache2(5958)
        │               ├─apache2(5959)
        │               ├─apache2(5960)
        │               ├─apache2(5961)
        │               ├─apache2(14617)
        │               ├─apache2(14619)
        │               ├─apache2(14631)
        │               ├─apache2(14632)
        │               └─apache2(14633)
        ├─atd(5780)
        ├─avahi-daemon(5056)───avahi-daemon(5057)

Lokit

Järjestelmä käyttää yleiseen toimintaan useita lokitiedostoja. Ohjelmat kirjoittavat sille määrätyn lokitason mukaisesti asioita järjestelmän käyttämiin lokitiedostoihin tai ohjelman konfiguraatiotiedostoissa erikseen määrättyihin tiedostoihin. Lokien seuraaminen on palvelimen ylläpidon kannalta eräs keskeisimmistä asioista ja tämä asia huomoiden on kehitetty Syslog. Alla esimerkkipätkä /var/log/daemon.log-tiedostosta:

Sep 26 11:47:20 ville-laptop mysqld_safe[5190]: started
Sep 26 11:47:20 ville-laptop mysqld[5194]: 080926 11:47:20  InnoDB: Started; log sequence number 0 20839922
Sep 26 11:47:20 ville-laptop mysqld[5194]: 080926 11:47:20 [Note] /usr/sbin/mysqld: ready for connections.
Sep 26 11:47:20 ville-laptop mysqld[5194]: Version: '5.0.51a-3ubuntu5.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
Sep 26 11:47:21 ville-laptop dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5232]: Upgrading MySQL tables if necessary.
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5237]: Looking for 'mysql' in: /usr/bin/mysql
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5237]: Looking for 'mysqlcheck' in: /usr/bin/mysqlcheck
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5237]: This installation of MySQL is already upgraded to 5.0.51a, use --force if...
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5275]: Checking for insecure root accounts.
Sep 26 11:47:21 ville-laptop /etc/mysql/debian-start[5279]: Checking for crashed MySQL tables.

Lokit ovat normaaleja teksitiedostoja, joita voidaan katsella normaaleilla työkaluilla. Alla muutama esimerkki:


Tulostaa lokitiedoston komentoriville tiedoston loppuun saakka.

ville@ville-laptop:/$ cat /var/log/daemon.log
Nov 13 09:12:36 ville-laptop named[4993]: listening on IPv4 interface eth0, 213.250.106.106#53
Nov 13 09:21:56 ville-laptop dhclient: DHCPREQUEST of <null address> on eth0 to 213.250.106.254 port 67
Nov 13 09:21:56 ville-laptop dhclient: DHCPACK of 213.250.106.106 from 213.250.106.254

Tulostaa tiedoston, mutta näyttää vain ne rivit, joissa on sana eth

ville@ville-laptop:/$ cat /var/log/dmesg | grep eth
[    6.586852] eth0: Tigon3 [partno(BCM95751M) rev 4101 PHY(5750)] (PCI Express) 10/100/1000Base-T Ethernet 00:0a:e4:c0:ba:d1
[    6.586860] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] WireSpeed[1] TSOcap[1]
[    6.586863] eth0: dma_rwctrl[76180000] dma_mask[64-bit]
[    7.613784] Driver 'sd' needs updating - please use bus_type methods
[    7.613945]  sda:<4>Driver 'sr' needs updating - please use bus_type methods
[   13.584663] tg3: eth0: Link is up at 100 Mbps, full duplex.
[   13.584668] tg3: eth0: Flow control is off for TX and off for RX.

TUlostaa tiedoston kymmenen viimeistä sivua

ville@ville-laptop:/$ tail /var/log/syslog
Nov 13 12:50:01 ville-laptop /USR/SBIN/CRON[20747]: (www-data) CMD ([ -x /usr/lib/cgi-bin/awstats.pl -a -f ....
Nov 13 13:00:01 ville-laptop /USR/SBIN/CRON[21151]: (www-data) CMD ([ -x /usr/lib/cgi-bin/awstats.pl -a -f ....
Nov 13 13:09:01 ville-laptop /USR/SBIN/CRON[21513]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] ....
Nov 13 13:09:55 ville-laptop dhclient: DHCPREQUEST of <null address> on eth0 to 213.250.106.254 port 67
Nov 13 13:09:55 ville-laptop dhclient: DHCPACK of 213.250.106.106 from 213.250.106.254
Nov 13 13:09:55 ville-laptop dhclient: bound to 213.250.106.106 -- renewal in 4551 seconds.
Nov 13 13:10:01 ville-laptop /USR/SBIN/CRON[21573]: (www-data) CMD ([ -x /usr/lib/cgi-bin/awstats.pl -a -f ....
Nov 13 13:12:42 ville-laptop slapd[5221]: bdb(dc=nodomain): PANIC: fatal region error detected; run recovery 
Nov 13 13:17:01 ville-laptop /USR/SBIN/CRON[21868]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Nov 13 13:20:01 ville-laptop /USR/SBIN/CRON[22029]: (www-data) CMD ([ -x /usr/lib/cgi-bin/awstats.pl -a -f ....

Tulostaa tiedoston kymmenen viimeistä sivua ja jättää tiedoston auki. Lopetetaan painamalla CTRL-C

ville@ville-laptop:/$ tail -f /var/log/auth.log
Nov 13 13:09:01 ville-laptop CRON[21512]: pam_unix(cron:session): session opened for user root by (uid=0)
Nov 13 13:09:01 ville-laptop CRON[21512]: pam_unix(cron:session): session closed for user root
Nov 13 13:10:01 ville-laptop CRON[21572]: pam_unix(cron:session): session opened for user www-data by (uid=0)
Nov 13 13:10:01 ville-laptop CRON[21572]: pam_unix(cron:session): session closed for user www-data
Nov 13 13:17:01 ville-laptop CRON[21867]: pam_unix(cron:session): session opened for user root by (uid=0)
Nov 13 13:17:01 ville-laptop CRON[21867]: pam_unix(cron:session): session closed for user root
Nov 13 13:20:01 ville-laptop CRON[22028]: pam_unix(cron:session): session opened for user www-data by (uid=0)
Nov 13 13:20:01 ville-laptop CRON[22028]: pam_unix(cron:session): session closed for user www-data
Nov 13 13:30:01 ville-laptop CRON[22575]: pam_unix(cron:session): session opened for user www-data by (uid=0)
Nov 13 13:30:01 ville-laptop CRON[22575]: pam_unix(cron:session): session closed for user www-data

Mount

Linuxissa käyttäjälle ei näytetä perinteistä asematunnuksiin perustuvaa levynäkymää, vaan kaikki järjestelmässä olevat levyt ovat kansioita. Ulkoiset tietovarastot mountataan osaksi hakemistorakennetta, jolloin sitä voidaan käyttää kuten mitä tahansa kansiota. Tämä tapahtuu seuraavasti:

Asetetaan ulkoinen varasto koneelle, tässä tapauksessa toinen scsi-levy. Laite tunnetaan termillä /dev/sdb, joka saadaan selvitettyä esimerkiksi seuraavilla käskyillä

ville-debian:~# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00035993

Device    Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         993     7976241   83  Linux
/dev/sda2             994        1044      409657+   5  Extended
/dev/sda5             994        1044      409626   82  Linux swap / Solaris

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0008cd18

   Device Boot      Start         End      Blocks   Id  System
ville-debian:~# ls /dev | grep sd
sda
sda1
sda2
sda5
sdb
ville-debian:~#

Järjestelmässä on siis levy, jolla ei ole vielä yhtään osiota. Tämä voidaan tehdä seuraavasti:

ville-debian:~# fdisk /dev/sdb

The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044):
Using default value 1044

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Tämän jälkeen osio alustetaan ext3-tiedostojärjestelmäksi komennolla

mkfs.ext3 /dev/sdb1

Tämän jälkeen tehdään kansio ja liitetään varasto siihen, jonka jälkeen levy on osa hakemistorakennetta.

mkdir /mnt/varasto1
mount /dev/sdb1 -t ext3 /mnt/varasto1

Levy saadaan irroitettua seuraavalla käskyllä

cd
umount /mnt/varasto1

Jos halutaan, että levy on käytössä myös käynnistämisen jälkeen, pitää muokata tiedostoa fstab kansiossa /etc. Lisätään tiedostoon seuraava rivi:

/dev/sdb1	/mnt/varasto1	ext3	defaults	0	0

Käynnistetään järjestelmä uudestaan ja varmistetaan toiminta. Järjestelmän toimintaa voidaan testata myös ilman uudelleen käynnistämistä seuraavilla komennoilla

mount -a
cat /etc/mtab

Levyn ollessa osa kansiorakennetta tiedostojen siirtäminen, kopiointi ja varmistaminen on helppoa, koska voidaan käyttää samoja komentoja, joita järjestelmän sisäisessä käytössä käytetään.

Verkkoasetukset

Linux käyttää pääsääntöisesti seuraavia komentoja ja tiedostoja verkkoasetuksiin ja niiden määrittämiseen.

#Verkkokorttien ja MAC-osoitteiden määritys
cat /etc/udev/rules.d/z25_persistent-net.rules

Esimerkki

# PCI device 0x14e4:0x167d (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0a:e4:c0:ba:d1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x4224 (ipw2200)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:12:f0:b2:0e:40", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Järjestelmään kytketyt verkkokortit

cat /proc/net/dev

Esimerkki

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 1344977    6949    0    0    0     0          0         0  1344977    6949    0    0    0     0       0          0
 irda0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  eth1:       0    5457    0    0    0     0          0         0        0     946    0    0    0     0       1          0
  eth0: 4458513    7836    0    0    0     0          0        14   914975    4080    0    0    0     0       0          0 

Verkkoliitäntöjen määritykset

cat /etc/network/interfaces

Esimerkki

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:1
iface eth0:1 inet static
	address 213.250.105.76
	netmask 255.255.255.128

Verkkoliitäntöjen toimet

ifdown ethX

Esimerkki

root@ville-laptop:~# ifdown eth0
RTNETLINK answers: No such process
There is already a pid file /var/run/dhclient.eth0.pid with pid 27518
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.0.6
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   Socket/fallback
DHCPRELEASE on eth0 to 213.250.105.126 port 67
root@ville-laptop:~# 

ifup ethX

Esimerkki

root@ville-laptop:~# ifup eth0
There is already a pid file /var/run/dhclient.pid with pid 7830
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.0.6
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/ 

Listening on LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   Socket/fallback
DHCPREQUEST of 213.250.106.106 on eth0 to 255.255.255.255 port 67
DHCPACK of 213.250.105.94 from 213.250.105.126
bound to 213.250.105.94 -- renewal in 5520 seconds.
root@ville-laptop:~#

dhclient ethX

Esimerkki

root@ville-laptop:~# dhclient eth0
There is already a pid file /var/run/dhclient.pid with pid 7830
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.0.6
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   LPF/eth0/00:0a:e4:c0:ba:d1
Sending on   Socket/fallback
DHCPREQUEST of 213.250.106.106 on eth0 to 255.255.255.255 port 67
DHCPACK of 213.250.105.94 from 213.250.105.126
bound to 213.250.105.94 -- renewal in 5520 seconds.
root@ville-laptop:~#

cat /etc/resolv.conf

Esimerkki

ville@ville-laptop:~$ cat /etc/resolv.conf
search syo.fi
nameserver 213.250.105.3
nameserver 213.250.106.4
ville@ville-laptop:~$ 

Lisää aiheesta täältä ja muualta netistä.

Komentorivi, ajastus ja putkitus

Linuxin komentorivi tarjoaa loistavat mahdollisuudet mitä erilaisimpiin järjestelmiin. Ohjeita ja oppaita löytyy verkosta pilvin pimein. Alla esimerkki, jossa kahden minuutin välein pingataan osoitetta www.google.fi. Vastaus ohjataan tiedostoon /var/log/pingtest.

root@ville-ibm:/etc/cron.d# cat pingtest 
*/2 * * * *	root	( /bin/echo -ne "$(date +\%F\ \%T)\t\t" ; /bin/ping -c1 www.google.fi -W1 | /bin/grep 64 ) >> /var/log/pingtest 2>&1;
root@ville-ibm:/etc/cron.d# tail -f /var/log/pingtest 
2010-01-20 22:50:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=103 ms
2010-01-20 22:52:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=94.2 ms
2010-01-20 22:54:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=59.5 ms
2010-01-20 22:56:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=63.7 ms
2010-01-20 22:58:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=57.3 ms
2010-01-20 23:00:01		64 bytes from ey-in-f104.1e100.net (74.125.79.104): icmp_seq=1 ttl=47 time=65.4 ms
2010-01-20 23:02:01		64 bytes from ey-in-f104.1e100.net (74.125.79.104): icmp_seq=1 ttl=47 time=61.1 ms
2010-01-20 23:04:01		64 bytes from ey-in-f147.1e100.net (74.125.79.147): icmp_seq=1 ttl=47 time=55.4 ms

Yleisesti käytetty lokirivin aikaleima tulee komennolla date "+%b %d %H:%M:%S"!

Sisällysluetteloon


Etähallinta

SSH

Palvelimen asennuksen jälkeen sitä pitää pystyä hallitsemaan. Tietysti hallintakäyttö voidaan tehdä paikallisena käyttäjänä, mutta vilpoisassa, meluisassa ja pimeässä konesalissa työskentely ei ole ehkä direktiivien mukaista. Tästä syystä Linuxissa ollaan erittäin hyvin otettu nämä asiat huomioon jo alunperinkin. Aikaisemmin on ollut käytössä monia yhteystapoja, joista Telnet on yksi esimerkki. Telnetin ongelma on turvattomuus, sillä kaikki tiedonsiirto on salaamatonta. Telnetin seuraajaksi tuli SSH, joka paransi monia ominaisuuksia.

SSH on ohjelma, jolla luodaan salattu yhteys kahden koneen/laitteen välille. SSH on yksi turvallisimmista protokollista ja tästä syystä erittäin käytetty erilaisissa yhteyksissä. Hyvänä esimerkkinä tietokoneiden ulkopuolella ovat kytkimet, palomuurit ja muut verkkolaitteet, jotka lähes poikkeuksetta tukevat SSHv2-yhteyksiä. Eräs yleisimmistä käyttökohteista on Windows-koneelta yhteys Putty-ohjelmalla Linux-koneen SSH-palvelimelle. Yhteyden kautta voidaan hallita palvelinta ja siirtää isoja massoja tietoa turvallisesti. Hyviä ohjelmia löytyy paljon, joista esimerkkinä WinSCP-ohjelma. Toinen yleinen käyttökohde on liikenteen tunnelointi SSH-yhteyden läpi. Tällainen liikenne voi olla vaikkapa VNC-, HTTP- tai SMTP-yhteys.

SSH perustuu RSA-salaukseen, joka on julkisen avaimeen käyttöön liittyvissä salauksissa ollut esikuva monille muille salauksille. RSA-salauksen erinomaisuus perustuu avainpariin, josta toinen avain on julkinen ja toinen salainen. Yhteyden muodostaja lähettää määränpäässä olevalle laitteelle julkisen avaimensa, jolla määränpäälaite salaa yhteyden muodostajalle lähettämänsä tiedot. Nämä tiedot ovat vain ja ainoastaan yhteyden muodostajan julkisen avaimen salaisella parilla avattavissa. SSHv1 havaittuja haavoittuvuuksia parantamaan on tehty versio 2, joka käyttää entistä tehokkaammin avaimiin perustuvaa salausta.

SSH-yhteys luodaan avainpareilla. Kun SSH-palvelin asennetaan, sille luodaa pari, joista toinen, eli yleinen, annetaan palvelimeen yhteyttä ottavalle osapuolelle, joka tallentaa sen tiedostoonsa. Linuxissa tämä tiedosto on nimeltään known_hosts ja se sijaitsee kotihakemistossa olevassa .ssh-kansiossa. Tämän jälkeen palvelin kysyy käyttäjän salasanan ja, jos se täsmää koneen tilien kanssa päästetään käyttäjä sisään. Toinen vaihtoehto sisäänkirjautumisessa on avaimiin perustuva tunnistautuminen. Luodaan avainpari, joista julkinen laitetaan palvelimen .ssh-kansioon tiedostoon authorized_keys. Yhteyden luonti vaiheessa SSH-palvelin salaa sisäänkirjautujan julkisella avaimella liikenteen ja, jos sisäänkirjautujalla on julkisen avaimen salainen pari, niin se pystyy liikenteen myös avaamaan.

SSH-yhteydessä on valtavasti hyvää, sillä yhteysohjelmat (palvelin ja client) vievät erittäin vähän resursseja, yhteys ei kuormita tietoliikenneyhteyksiä ja turvallisuus on oikein konfiguroituna huipussaan. SSH-yhteyden asennuksesta ja käytöstä löytyy valtavasti tietoa Internetistä. SSH-yhteyden käyttöönotto tapahtuu seuraavasti.

Asennetaan palvelinohjelma
debian-kde:~# apt-get install openssh-server
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu
Luetaan tilatiedot... Valmis
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  openssh-blacklist openssh-blacklist-extra
Ehdotetut paketit:
  ssh-askpass rssh molly-guard
Seuraavat UUDET paketit asennetaan:
  openssh-blacklist openssh-blacklist-extra openssh-server
0 päivitetty, 3 uutta asennusta, 0 poistettavaa ja 23 päivittämätöntä.
Noudettavaa arkistoa 4547kt.
Toiminnon jälkeen käytetään 9179k t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://mirror.syo.fi lenny/main openssh-blacklist 0.4.1 [2125kB]
Nouda:2 http://mirror.syo.fi lenny/main openssh-blacklist-extra 0.4.1 [2127kB]
Nouda:3 http://mirror.syo.fi lenny/main openssh-server 1:5.1p1-5 [295kB]
Noudettiin 4547kt ajassa 10s (429kt/s)
Esiräätälöidään paketteja...
Selecting previously deselected package openssh-blacklist.
(Reading database ... 41835 files and directories currently installed.)
Unpacking openssh-blacklist (from .../openssh-blacklist_0.4.1_all.deb) ...
Selecting previously deselected package openssh-blacklist-extra.
Unpacking openssh-blacklist-extra (from .../openssh-blacklist-extra_0.4.1_all.deb) ...
Selecting previously deselected package openssh-server.
Unpacking openssh-server (from .../openssh-server_1%3a5.1p1-5_i386.deb) ...
Processing triggers for man-db ...
Setting up openssh-blacklist (0.4.1) ...
Setting up openssh-blacklist-extra (0.4.1) ...
Setting up openssh-server (1:5.1p1-5) ...
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
debian-kde:~#

Palvelinohjelma on käynnissä ja sitä kautta voidaan ottaa etäyhteys koneeseen. Yhteys otetaan koneen IP-osoitteeseen käyttäen etäkoneella olevaa käyttäjätunnusta. Yhteys voidaan ottaa monella asiakasohjelmalla. Linux-koneissa SSH-asiakas on valmiina ja sen käytöstä seuraavassa esimerkki. Windows-ympäristöön löytyy esimerkiksi jo mainitut Putty ja WinSCP.

Otetaan yhteys root-käyttäjätunnuksella 
ville@ubuntu-home:~$ ssh root@192.168.1.162
The authenticity of host '192.168.1.162 (192.168.1.162)' can't be established.
RSA key fingerprint is 42:1c:4b:17:7b:d8:4b:41:02:94:53:6c:50:ae:90:02.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.162' (RSA) to the list of known hosts.
root@192.168.1.162's password: 
Linux debian-kde 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Nov  4 18:09:01 2009
debian-kde:~# id
uid=0(root) gid=0(root) ryhmät=0(root)
debian-kde:~# exit
logout
Connection to 192.168.1.162 closed.
ville@ubuntu-home:~$

Otetaan yhteys toisella käyttäjätunnuksella ja siirrytään pääkäyttäjäksi
ville@ubuntu-home:~$ ssh linux@192.168.1.162
linux@192.168.1.162's password: 
Linux debian-kde 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan  8 09:16:19 2010
linux@debian-kde:~$ id
uid=1000(linux) gid=1000(linux) ryhmät=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),1000(linux)
linux@debian-kde:~$ su
Salasana: 
debian-kde:/home/linux# id
uid=0(root) gid=0(root) ryhmät=0(root)
debian-kde:/home/linux# exit
exit 
linux@debian-kde:~$ exit
logout
Connection to 192.168.1.162 closed.
ville@ubuntu-home:~$

Mahdollistetaan kirjautuminen ilman salasanaa
linux@ubuntu-home:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linux/.ssh/id_rsa): 
Created directory '/home/linux/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/linux/.ssh/id_rsa.
Your public key has been saved in /home/linux/.ssh/id_rsa.pub.
The key fingerprint is:
38:22:a4:b0:a7:3a:ae:0c:1b:e1:f2:3b:9a:96:d0:b5 linux@ubuntu-home
linux@ubuntu-home:~$ scp .ssh/id_rsa.pub linux@192.168.1.162:
The authenticity of host '192.168.1.162 (192.168.1.162)' can't be established.
RSA key fingerprint is 42:1c:4b:17:7b:d8:4b:41:02:94:53:6c:50:ae:90:02.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.162' (RSA) to the list of known hosts.
linux@192.168.1.162's password: 
id_rsa.pub                                                                              100%  399     0.4KB/s   00:00    
linux@ubuntu-home:~$ ssh linux@192.168.1.162
linux@192.168.1.162's password: 
Linux debian-kde 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan  8 09:41:26 2010 from ville.local
linux@debian-kde:~$ ls
Desktop  id_rsa.pub
linux@debian-kde:~$ mkdir .ssh
linux@debian-kde:~$ cat id_rsa.pub >> .ssh/authorized_keys
linux@debian-kde:~$ exit
logout
Connection to 192.168.1.162 closed.
linux@ubuntu-home:~$ ssh linux@192.168.1.162
Linux debian-kde 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan  8 09:48:16 2010 from ville.local
linux@debian-kde:~$ 

Estetään pääkäyttäjän suorat yhteydenotot
debian-kde:~# id
uid=0(root) gid=0(root) ryhmät=0(root)
debian-kde:~# cd /etc/ssh/
debian-kde:/etc/ssh# ls
moduli  ssh_config  sshd_config  ssh_host_dsa_key  ssh_host_dsa_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub
debian-kde:/etc/ssh# cat sshd_config 
# Package generated configuration file
# See the sshd(8) manpage for details
----------
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes 
---------- 
debian-kde:/etc/ssh# /etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.
debian-kde:/etc/ssh# exit
logout
Connection to 192.168.1.162 closed.
ville@ubuntu-home:~$ ssh root@192.168.1.162
root@192.168.1.162's password: 
Permission denied, please try again.
root@192.168.1.162's password: 
Permission denied, please try again.
root@192.168.1.162's password: 
Permission denied (publickey,password).
ville@ubuntu-home:~$ ssh linux@192.168.1.162
linux@192.168.1.162's password: 
Linux debian-kde 2.6.26-2-686 #1 SMP Sat Oct 17 17:59:23 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan  8 09:49:28 2010 from ville.local
linux@debian-kde:~$

Tunneloidaan liikenne SSH-yhteyden kautta. Erittäin kätevä, kun pitää saada turvallinen yhteys sovelluksien välille
Käytännössä seuraavassa on tunneloitu porttiin 5900 ja osoitteeseen 192.168.1.162 menevä liikenne SSH-yhteyde läpi
Kun halutaan ottaa yhteys, tapahtuu se paikalliseen porttiin 5900, joka on avattu SSH-yhteyden aukaisun yhteydessä

linux@ubuntu-home:~$ netstat -lunet | grep 5900
linux@ubuntu-home:~$ ssh -L 5900:192.168.1.162:5900 192.168.1.162 -Nf
linux@ubuntu-home:~$ netstat -lunet | grep 5900
tcp        0      0 127.0.0.1:5900          0.0.0.0:*               LISTEN      1002       34023      
tcp6       0      0 ::1:5900                :::*                    LISTEN      1002       34024      
linux@ubuntu-home:~$

VNC

SSH on täysin komentorivipohjainen hallintatapa. Nykyisissä ympäristöissä, joissa usein on graafinen käyttöliittymä, voidaan käyttää sitä myös hallintaan. VNC on protokolla, jota käytetään edellä mainittuun. VNC on hyvä hallintatapa, mutta suurimapana ongelmana on resurssien (kaista) käyttö. Palvelin- ja asiakasohjelmia löytyy paljon. Linux ympäristöissä VNC on yleensä integroitu graafiseen käyttöliittymään eli käytännössä KDE- ja Gnome-liittymään.

VNC on hyvä ja kätevä etähallintatapa, mutta resurssisyöppö. Ubuntusta asiakasohjelma löytyy valikosta Sovellukset => Internet => Etätyöpöytien käyttö ja palvelinohjelma Järjestelmä => Asetukset => Etätyöpöytä

KSysguard

Ksysguard on erittäin kätevä työkalu Linux-ympäristöjen hallintaan. Ohjelman kaksi tärkeintä osaa on hallittavan koneen ksysguardd ja asiakaskoneen ksysguard. Ohjelman vahvuus on yksinkertaisuus. Ohjelma monitoroi linuxin omaa proc-tiedostojärjestelmää ja erilaisia sensoreita. Sensoreiden tarkoitus on monitoroida esimerkiksi prosessorin jännitteitä, josta esimerkki alla.

ville@ubuntu-home:~$ sensors
k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:  +16.0°C                                    
Core0 Temp:  +10.0°C                                    
Core1 Temp:  +15.0°C                                    
Core1 Temp:  +16.0°C                                    

it8716-isa-0290
Adapter: ISA adapter
VCore:       +1.36 V  (min =  +0.00 V, max =  +4.08 V)
VDDR:        +2.96 V  (min =  +0.00 V, max =  +4.08 V)
+3.3V:       +3.25 V  (min =  +0.00 V, max =  +4.08 V)
+5V:         +4.89 V  (min =  +0.00 V, max =  +6.85 V)
+12V:       +11.97 V  (min =  +0.00 V, max = +16.32 V)
in5:         +1.82 V  (min =  +0.00 V, max =  +4.08 V)
in6:         +1.18 V  (min =  +0.00 V, max =  +4.08 V)
5VSB:        +4.87 V  (min =  +0.00 V, max =  +6.85 V)
VBat:        +2.05 V
fan1:        991 RPM  (min =    0 RPM)
fan3:          0 RPM  (min =    0 RPM)
temp1:       +38.0°C  (low  =  -1.0°C, high = +127.0°C)  sensor = transistor
temp2:       +25.0°C  (low  =  -1.0°C, high = +127.0°C)  sensor = transistor
temp3:       +38.0°C  (low  =  -1.0°C, high = +127.0°C)  sensor = thermal diode
cpu0_vid:   +1.500 V

ville@ubuntu-home:~$

Proc-tiedostojärjestelmän tarkoitus on erittäin tärkeä. Se pitää listaa käyttöjärjestelmän tärkeimmistä asioista, joista esimerkkinä verkkoliittymien liikenteen määrä.

debian-kde:/proc/net# cat dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:    6040      92    0    0    0     0          0         0     6040      92    0    0    0     0       0          0
  eth0: 2587961    2360    0    0    0     0          0         0   136758    1798    0    0    0     0       0          0
  eth2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
 bond0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
silta1: 2552719    2349    0    0    0     0          0        23   105292    1583    0    0    0     0       0          0
vboxnet0:     0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
debian-kde:/proc/net#

Seuraavassa muutama esimerkkikuva ohjelman toiminnasta. Ohjelmalla on seurattu paikallista konetta sekä etäyhteyden kautta virtualisointipalvelinta.

Paikallisen koneen kuorma. Voidaan monitoroida vaikkapa prosessoria, muistin käyttöä ja verkkoliikennettä. Vasemmalta vedetään sensori, joka tuo halutun arvon.


Paikallisen koneen prosessit. Ohjelmalla voidaan hallita paikallisen koneen prosesseja eli ohjelmia. Voidaan seurata esimerkiksi, että mikä prosessi kuluttaa eniten resursseja.


Etäkoneen kuorma. Mitä voidaan tehdä paikalliselle koneelle, voidaan tehdä yhtä hyvin myös etäkoneelle. Etäyhteys muodostetaan SSH-tunnelin kautta.


Etäkoneen verkkoliikenne. Ohjelmalla voidaan tehdä omia työsivuja, jonne halutut sensorit asetetaan. Työsivu voi olla tarkoitettu vaikkapa verkkoliikenteen seuraamiseen.


Etäkoneen prosessien hallinta. Täysin vastaava kuin paikalliseen koneen.


Alla esimerkki VMHOST-kuorma työsivun määrittelystä. Tämä tapahtuu itse ohjelmalla, mutta työtilaa voidaan suunnitella myös ennakkoon alla olevan tiedoston tapaisesti.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE KSysGuardWorkSheet>
<WorkSheet rows="2" interval="2" columns="2" >
 <host port="-1" shell="ssh" name="vmhost" command="" />
 <display topBar="0" vColor="326429" title="CPU0 Load" bColor="3223601" graphStyle="0" class="FancyPlotter" row="0" unit="" hScale="1" column="0" showUnit="0" hLines="1" hCount="4" vLines="1" autoRange="0" min="0" max="100" hColor="326429" globalUpdate="1" pause="0" fontSize="9" labels="1" vScroll="1" vDistance="30" >
  <beam sensorName="cpu0/user" hostName="vmhost" color="1608191" sensorType="integer" />
  <beam sensorName="cpu0/sys" hostName="vmhost" color="16743688" sensorType="integer" />
  <beam sensorName="cpu0/nice" hostName="vmhost" color="16771600" sensorType="integer" />
 </display>
 <display topBar="0" vColor="326429" title="CPU1 Load" bColor="3223601" graphStyle="0" class="FancyPlotter" row="0" unit="" hScale="1" column="1" showUnit="0" hLines="1" hCount="4" vLines="1" autoRange="0" min="0" max="100" hColor="326429" globalUpdate="1" pause="0" fontSize="9" labels="1" vScroll="1" vDistance="30" >
  <beam sensorName="cpu1/user" hostName="vmhost" color="1608191" sensorType="integer" />
  <beam sensorName="cpu1/sys" hostName="vmhost" color="16743688" sensorType="integer" />
  <beam sensorName="cpu1/nice" hostName="vmhost" color="16771600" sensorType="integer" />
 </display>
 <display topBar="0" vColor="326429" title="Muistin käyttö" bColor="3223601" graphStyle="0" class="FancyPlotter" row="1" unit="" hScale="1" column="0" showUnit="0" hLines="1" hCount="4" vLines="1" autoRange="1" min="0" max="0" hColor="326429" globalUpdate="1" pause="0" fontSize="9" labels="1" vScroll="1" vDistance="30" >
  <beam sensorName="mem/physical/application" hostName="vmhost" color="1608191" sensorType="integer" />
  <beam sensorName="mem/physical/buf" hostName="vmhost" color="16743688" sensorType="integer" />
  <beam sensorName="mem/physical/cached" hostName="vmhost" color="16771600" sensorType="integer" />
 </display>
 <display topBar="0" vColor="326429" title="Levyn käyttö" bColor="3223601" graphStyle="0" class="FancyPlotter" row="1" unit="" hScale="1" column="1" showUnit="0" hLines="1" hCount="4" vLines="1" autoRange="1" min="0" max="0" hColor="326429" globalUpdate="1" pause="0" fontSize="9" labels="1" vScroll="1" vDistance="30" >
  <beam sensorName="disk/8:0/wblk" hostName="vmhost" color="3936511" sensorType="integer" />
  <beam sensorName="disk/8:0/rblk" hostName="vmhost" color="973882" sensorType="integer" />
  <beam sensorName="disk/8:16/wblk" hostName="vmhost" color="11928102" sensorType="integer" />
  <beam sensorName="disk/8:16/rblk" hostName="vmhost" color="16774171" sensorType="integer" />
 </display>
</WorkSheet>

KSysguard on todella monipuolinen ja toimiva ohjelma Linuxien hallintaan!

SNMP

SNMP on protokolla, jota käytetään verkon seurantaan ja hallintaan. Protokollan vahvuus on sen monikäyttöisyydessä ja keveydessä, sillä esimerkiksi lähes kaikki "paremmat" verkkolaitteetkin tukevat sitä. Yleisesti SNMP:tä käytetään monitoroimaan liikennettä ja laitteiden tärkeimpiä tietoja, kuten esimerkiksi prosessien määrää. Monitorointihjelmia on olemassa paljon erilaisia, joista yleisin on ehkä MRTG. Muita asiaan liittyviä linkkejä alla.

http://www.cacti.net/
http://munin.projects.linpro.no/
http://oss.oetiker.ch/rrdtool/

SNMP löytyy verkkolaitteiden lisäksi myös käyttöjärjestelmistä, kuten esimerkiksi Windowsista. Debianissa SNMP otetaan käyttöön seuraavan esimerkin mukaisesti.

Asennetaan SNMP-palvelinohjelma
lamp:~# apt-get install snmp snmpd
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu
Luetaan tilatiedot... Valmis
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  libperl5.10 libsensors3 libsnmp-base libsnmp15 libsysfs2 
Ehdotetut paketit:
  lm-sensors
Seuraavat UUDET paketit asennetaan:
  libperl5.10 libsensors3 libsnmp-base libsnmp15 libsysfs2 snmp snmpd
0 päivitetty, 7 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 5705kt.
Toiminnon jälkeen käytetään 11,0M t lisää levytilaa.
Haluatko jatkaa [K/e]? k
Nouda:1 http://mirror.syo.fi lenny/main libperl5.10 5.10.0-19lenny2 [1018B]
Nouda:2 http://mirror.syo.fi lenny/main libsysfs2 2.1.0-5 [28,9kB]
Nouda:3 http://mirror.syo.fi lenny/main libsensors3 1:2.10.7-1 [128kB]
Nouda:4 http://mirror.syo.fi lenny/main libsnmp-base 5.4.1~dfsg-12 [1369kB]
Nouda:5 http://mirror.syo.fi lenny/main libsnmp15 5.4.1~dfsg-12 [2174kB]
Nouda:6 http://mirror.syo.fi lenny/main snmp 5.4.1~dfsg-12 [1046kB]
Nouda:7 http://mirror.syo.fi lenny/main snmpd 5.4.1~dfsg-12 [958kB]
Noudettiin 5705kt ajassa 0s (17,3Mt/s)
Esiräätälöidään paketteja...
Selecting previously deselected package libperl5.10.
(Reading database ... 19182 files and directories currently installed.)
Unpacking libperl5.10 (from .../libperl5.10_5.10.0-19lenny2_amd64.deb) ...
Selecting previously deselected package libsysfs2.
Unpacking libsysfs2 (from .../libsysfs2_2.1.0-5_amd64.deb) ...
Selecting previously deselected package libsensors3.
Unpacking libsensors3 (from .../libsensors3_1%3a2.10.7-1_amd64.deb) ...
Selecting previously deselected package libsnmp-base.
Unpacking libsnmp-base (from .../libsnmp-base_5.4.1~dfsg-12_all.deb) ...
Selecting previously deselected package libsnmp15.
Unpacking libsnmp15 (from .../libsnmp15_5.4.1~dfsg-12_amd64.deb) ...
Selecting previously deselected package snmp.
Unpacking snmp (from .../snmp_5.4.1~dfsg-12_amd64.deb) ...
Selecting previously deselected package snmpd.
Unpacking snmpd (from .../snmpd_5.4.1~dfsg-12_amd64.deb) ...
Processing triggers for man-db ...
Setting up libperl5.10 (5.10.0-19lenny2) ...
Setting up libsysfs2 (2.1.0-5) ...
Setting up libsensors3 (1:2.10.7-1) ...
.udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation.

Creating config file /etc/sensors.conf with new version
Setting up libsnmp-base (5.4.1~dfsg-12) ...
Setting up libsnmp15 (5.4.1~dfsg-12) ...
Setting up snmp (5.4.1~dfsg-12) ...
Setting up snmpd (5.4.1~dfsg-12) ...
Starting network management services: snmpd.
lamp:~#   

Sallitaan readonly kyselyt muokkaamalla seuraavaa tiedostoa
lamp:~# cat /etc/snmp/snmpd.conf
###############################################################################
#
# EXAMPLE.conf:
#   An example configuration file for configuring the ucd-snmp snmpd agent.
#
###############################################################################

----------

#       sec.name  source          community
#com2sec paranoid  default         public
com2sec  readonly  default         public
#com2sec readwrite default         private

Mahdollistetaan ulkopuoliset kyselyt
lamp:~# netstat -luet | grep snmp
udp        0      0 localhost:snmp          *:*                                 root       18941
lamp:~# cat /etc/default/snmpd
# This file controls the activity of snmpd and snmptrapd

# MIB directories.  /usr/share/snmp/mibs is the default, but
# including it here avoids some strange problems.
export MIBDIRS=/usr/share/snmp/mibs

# snmpd control (yes means start daemon).
SNMPDRUN=yes

# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

# snmptrapd control (yes means start daemon).  As of net-snmp version
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
# can be run.  See snmpd.conf(5) for how to do this.
TRAPDRUN=no

# snmptrapd options (use syslog).
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid' 

# create symlink on Debian legacy location to official RFC path
SNMPDCOMPAT=yes
lamp:~# 
Alkuperäinen!
# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'

Muutettu!
# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

Käynnistetään SNMP-palvelinohjelma uudestaan ja varmistetaan toiminta
lamp:~# /etc/init.d/snmpd restart
Restarting network management services: snmpd.
lamp:~# netstat -luet | grep snmp
udp        0      0 *:snmp                  *:*                                 root       19967
lamp:~# snmpwalk -v 1 -c public localhost
SNMPv2-MIB::sysDescr.0 = STRING: Linux lamp 2.6.26-2-amd64 #1 SMP Thu Nov 5 02:23:12 UTC 2009 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8326) 0:01:23.26
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
SNMPv2-MIB::sysName.0 = STRING: lamp
----------
NOTIFICATION-LOG-MIB::nlmConfigGlobalEntryLimit.0 = Gauge32: 1000
NOTIFICATION-LOG-MIB::nlmConfigGlobalAgeOut.0 = Gauge32: 1440 minutes
NOTIFICATION-LOG-MIB::nlmStatsGlobalNotificationsLogged.0 = Counter32: 0 notifications
NOTIFICATION-LOG-MIB::nlmStatsGlobalNotificationsBumped.0 = Counter32: 0 notifications
lamp:~#  

Tehdään kyselyjä muista koneista
debian0:~# snmpwalk -v 2c -c public lamp.testiverkko.info .1.3.6.1.2.1.25.3
HOST-RESOURCES-MIB::hrDeviceIndex.768 = INTEGER: 768
HOST-RESOURCES-MIB::hrDeviceIndex.1025 = INTEGER: 1025
HOST-RESOURCES-MIB::hrDeviceIndex.1026 = INTEGER: 1026
HOST-RESOURCES-MIB::hrDeviceIndex.3072 = INTEGER: 3072
HOST-RESOURCES-MIB::hrDeviceType.768 = OID: HOST-RESOURCES-TYPES::hrDeviceProcessor
HOST-RESOURCES-MIB::hrDeviceType.1025 = OID: HOST-RESOURCES-TYPES::hrDeviceNetwork
HOST-RESOURCES-MIB::hrDeviceType.1026 = OID: HOST-RESOURCES-TYPES::hrDeviceNetwork
HOST-RESOURCES-MIB::hrDeviceType.3072 = OID: HOST-RESOURCES-TYPES::hrDeviceCoprocessor
HOST-RESOURCES-MIB::hrDeviceDescr.768 = STRING: GenuineIntel: QEMU Virtual CPU version 0.9.1
HOST-RESOURCES-MIB::hrDeviceDescr.1025 = STRING: network interface lo
HOST-RESOURCES-MIB::hrDeviceDescr.1026 = STRING: network interface eth0
HOST-RESOURCES-MIB::hrDeviceDescr.3072 = STRING: Guessing that there's a floating point co-processor
HOST-RESOURCES-MIB::hrDeviceID.768 = OID: SNMPv2-SMI::zeroDotZero
HOST-RESOURCES-MIB::hrDeviceID.1025 = OID: SNMPv2-SMI::zeroDotZero
HOST-RESOURCES-MIB::hrDeviceID.1026 = OID: SNMPv2-SMI::zeroDotZero
HOST-RESOURCES-MIB::hrDeviceID.3072 = OID: SNMPv2-SMI::zeroDotZero
HOST-RESOURCES-MIB::hrDeviceStatus.768 = INTEGER: running(2)
HOST-RESOURCES-MIB::hrDeviceStatus.1025 = INTEGER: running(2)
HOST-RESOURCES-MIB::hrDeviceStatus.1026 = INTEGER: running(2)
HOST-RESOURCES-MIB::hrDeviceErrors.1025 = Counter32: 0
HOST-RESOURCES-MIB::hrDeviceErrors.1026 = Counter32: 0
HOST-RESOURCES-MIB::hrProcessorFrwID.768 = OID: SNMPv2-SMI::zeroDotZero
HOST-RESOURCES-MIB::hrProcessorLoad.768 = INTEGER: 3
HOST-RESOURCES-MIB::hrNetworkIfIndex.1025 = INTEGER: 1
HOST-RESOURCES-MIB::hrNetworkIfIndex.1026 = INTEGER: 2
HOST-RESOURCES-MIB::hrFSIndex.1 = INTEGER: 1
HOST-RESOURCES-MIB::hrFSMountPoint.1 = STRING: "/"
HOST-RESOURCES-MIB::hrFSRemoteMountPoint.1 = ""
HOST-RESOURCES-MIB::hrFSType.1 = OID: HOST-RESOURCES-TYPES::hrFSLinuxExt2
HOST-RESOURCES-MIB::hrFSAccess.1 = INTEGER: readWrite(1)
HOST-RESOURCES-MIB::hrFSBootable.1 = INTEGER: true(1)
HOST-RESOURCES-MIB::hrFSStorageIndex.1 = INTEGER: 4
HOST-RESOURCES-MIB::hrFSLastFullBackupDate.1 = STRING: 0-1-1,0:0:0.0
HOST-RESOURCES-MIB::hrFSLastPartialBackupDate.1 = STRING: 0-1-1,0:0:0.0
debian0:~#



Sisällysluetteloon


NFS-palvelin

NFS on Unix- ja Linux-järjestelmissä suosittu verkon läpi toimiva tiedostojärjestelmä. NFS:n avulla voidaan suorittaa esimerkiksi varmuuskopiointia tai vaikkapa työaseman virtualisointia, niin että kaikki aseman tiedostot sijaitsevat verkossa. Debianissa NFS-palvelimen käyttöönotto tapahtuu seuraavasti.

Asennetaan palvelimeen NFS-palvelinohjelma

nas:~# apt-get install nfs-kernel-server

Asiakas koneella homma näyttää seuraavalta

Palvelin ennen NFS-serverin asennusta
www:~# rpcinfo -p 192.168.1.156
   ohjelmaversio proto  portti
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  37674  status
    100024    1   tcp  44924  status

Palvelimeen asennettu NFS-serveri
www:~# rpcinfo -p 192.168.1.156
   ohjelmaversio proto  portti
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  37674  status
    100024    1   tcp  44924  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  45301  nlockmgr
    100021    3   udp  45301  nlockmgr
    100021    4   udp  45301  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  41386  nlockmgr
    100021    3   tcp  41386  nlockmgr
    100021    4   tcp  41386  nlockmgr
    100005    1   udp  33885  mountd
    100005    1   tcp  51562  mountd
    100005    2   udp  33885  mountd
    100005    2   tcp  51562  mountd
    100005    3   udp  33885  mountd
    100005    3   tcp  51562  mountd
www:~# 

Asennuksen jälkeen palvelimelle tehdään kansio, joka annetaan WWW-palvelimen käyttöön.

nas:~# mkdir -p /srv/nfs/www-000
nas:~# chmod a+rwx /srv/nfs/www-000
nas:~# pico /etc/exports 
----
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
# 
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/srv/nfs/www-000  www(rw,sync,no_subtree_check,no_root_squash)
----
nas:~# exportfs -rv
exporting www:/srv/nfs/www-000
nas:~#

Laitetaan verkkoyhteyksiin liittyvät asiat kuntoon

nas:~# pico /etc/hosts
----
127.0.0.1       localhost

192.168.1.156   nas.testiverkko.info    nas
192.168.1.152   www
----
nas:~# ping www -c1
PING www (192.168.1.152) 56(84) bytes of data.
64 bytes from www (192.168.1.152): icmp_seq=1 ttl=64 time=7.77 ms

--- www ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.774/7.774/7.774/0.000 ms
nas:~# ip -4 addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.1.156/24 brd 255.255.255.255 scope global eth0
nas:~# 

Mountataan jaettu kansio asiakaskoneelle, ja tehdään kansioon tiedosto

www:~# mount 192.168.1.156:/srv/nfs/www-000 /mnt/varasto-000
www:~# cd /mnt/varasto-000/
www:/mnt/varasto-000# ls -la
yhteensä 8
drwxrwxrwx 2 root root 4096  3.9.2009 .
drwxr-xr-x 3 root root 4096  1.9. 19:20 ..
www:/mnt/varasto-000# touch test.txt
www:/mnt/varasto-000# 

Samaan aikaan palvelimella

nas:~# cd /srv/nfs/www-000/
nas:/srv/nfs/www-000# ls -la
yhteensä 8
drwxrwxrwx 2 root root 4096  3.9. 09:41 .
drwxr-xr-x 3 root root 4096  3.9. 08:46 ..
-rw-r--r-- 1 root root    0  3.9. 09:41 test.txt
nas:/srv/nfs/www-000# 

Seuraavaksi määritellään asiakaskoneelle mounttaaminen tapahtumaan jo käynnistysvaiheessa

www:~# pico /etc/hosts
----
127.0.0.1       localhost

192.168.1.152   www.testiverkko.info    www
192.168.1.156   nas

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
----
www:~# pico /etc/fstab
----
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/hda1       /               ext3    errors=remount-ro 0       1
/dev/hda5       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
nas:/srv/nfs/www-000    /mnt/varasto-000        nfs    defaults        0       0
----
www:~# umount 192.168.1.156:/srv/nfs/www-000
www:~# ping -c1 nas
PING nas (192.168.1.156) 56(84) bytes of data.
64 bytes from nas (192.168.1.156): icmp_seq=1 ttl=64 time=1.23 ms

--- nas ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.234/1.234/1.234/0.000 ms
www:~# pico /etc/fstab 
www:~# mount -a
www:~# 

Varmistetaan toiminta vielä käynnistämällä järjestelmä

www:~# reboot
----
www:~# cat /etc/mtab 
/dev/hda1 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
nas:/srv/nfs/www-000 /mnt/varasto-000 nfs rw,addr=192.168.1.156 0 0
www:~# 
Tässä oli siis NFS-palvelimen käyttöönoton alkeet. NFS on erittäin monipuolinen, mutta konfigurointi vaikeutuu tästä eteepäin mentäessä!


NFS-palvelimen turvallisuusparannuksia

Ensimmäisenä määritellään, että mistä osoitteista palvelukutsuja voidaan tehdä, eli alla on kielletty kaikki.

nas:/etc# pico hosts.deny
----
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.

# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

----
nas:/etc# invoke-rc.d nfs-common restart
Stopping NFS common utilities: idmapd statd.
Starting NFS common utilities: statd idmapd.
nas:/etc#


Asiakaskoneella homma näyttää seuraavalta

www:~# rpcinfo -p nas
   ohjelmaversio proto  portti
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  51204  status
    100024    1   tcp  49318  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  40264  nlockmgr
    100021    3   udp  40264  nlockmgr
    100021    4   udp  40264  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  33949  nlockmgr
    100021    3   tcp  33949  nlockmgr
    100021    4   tcp  33949  nlockmgr
    100005    1   udp  47517  mountd
    100005    1   tcp  44847  mountd
    100005    2   udp  47517  mountd
    100005    2   tcp  44847  mountd
    100005    3   udp  47517  mountd
    100005    3   tcp  44847  mountd

Käynnistämisen jälkeen

www:~# rpcinfo -p nas
Etäohjelmia ei ole rekisteröity.

Seuraavaksi sallitaan WWW-koneesta tulevat pyynnöt.

nas:/etc# pico hosts.allow 
---- 
# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
portmap: 192.168.1.152
lockd: 192.168.1.152
mountd: 192.168.1.152
rquotad: 192.168.1.152
statd: 192.168.1.152

----
nas:/etc# invoke-rc.d nfs-common restart
Stopping NFS common utilities: idmapd statd.
Starting NFS common utilities: statd idmapd.
nas:/etc# 

Tämän jälkeen homma toimii normaalisti. Seuraavana muokataan liittämisen asetuksia.

nas:/etc# pico exports 
----
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/srv/nfs/www-000        192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
----
nas:/etc# exportfs -rv
exporting 192.168.1.0/24:/srv/nfs/www-000
nas:/etc# 

Tämän jälkeen kansio on liitettävissä kyseisen aliverkon koneille

apache:~# mkdir /mnt/varasto-000
apache:~# mount 192.168.1.156:/srv/nfs/www-000 /mnt/varasto-000
apache:~# 
NFS-palvelimessa tietoturvaa voidaan parantaa lukemattomilla eri tavoilla! Itse NFS on oletusasetuksillakin turvallinen!

Sisällysluetteloon


Keskitetty lokipalvelin

Linuxin eittämätön vahvuus on sen muokattavuus erilaisiin tilanteisiin ja ympäristöihin. Seuraavassa toteutetaan palvelin, joka kerää keskitetysti lokitietoja Syslogia käyttäen. Mahdollisia käyttökohteita löytyy joka paikasta, sillä syslogia tukee lähes käyttöjärjestelmä ja verkkolaite. Debianissa homma hoituu seuraavasti:

Ensimmäiseksi pureudutaan palvelimeen ja sieltä tiedostoon /etc/rsyslog.conf. Tiedostoon tehdään alla olevat muutokset ja lisäykset. Nämä mahdollistavat sen, että ulkopuoliset voivat lähettää palvelimelle lokitietoja. Tämän lisäksi tehdään konekohtainen kansio, johon tallennetaan lähettävän koneen lokitiedot. Konekohtaiset tiedot tallentuvat siis yleisiin lokitiedostoihin ja lisäksi omaan kansioon.

nms:~# pico /etc/rsyslog.conf

----

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
 
----

# Templates
#
$template KoneKohtainen, "/var/log/%HOSTNAME%/logfile.log"

###############
#### RULES ####
###############

# Per host
*.*                             -?KoneKohtainen

Edellisen jälkeen palvelinohjelma käynnistetään uudestaan, ja näin palvelin on valmis.

nms:~# /etc/init.d/rsyslog restart
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.
nms:~#

Seuraavaksi siirrytään koneeseen, jonka toimintaa halutaan seurata. Ensiksi pitää kertoa koneelle lokipalvelimen nimi. Tämä tapahtuu tiedostossa /etc/hosts.

www:~# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       www.testiverkko.info  www

213.250.86.13   nms

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
www:~#

Tämän jälkeen siirrytään syslogin konfiguraatiotiedoston, johon tehdään alla oleva lisäys. Viimeisenä käynnistetään palvelinohjelma uudelleen.

www:~# cd /etc/
www:/etc# cat rsyslog.conf

----

###############
#### RULES ####
###############

*.*                             @nms

#
# First some standard log files.  Log by facility.
#

---- 

www:/etc# init.d/rsyslog restart
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.
www:/etc#

Lopputuloksena www-palvelin välittää lokitiedot lokipalvelimelle. Näin päästään tilanteeseen, jossa lokipalvelimelta voidaan selvittää, että mitä www-palvelimella on tapahtunut ja milloin. Alla esimerkki:

nms:~# cd /var/log/www/
nms:/var/log/www# tail -f logfile.log
Nov 16 16:38:39 www acpid: client connected from 2125[0:0]
Nov 16 16:38:40 www kernel: [  176.459086] mtrr: your processor doesn't support write-combining
Nov 16 16:38:40 www kernel: [  176.459487] mtrr: your processor doesn't support write-combining
Nov 16 16:38:50 www gdm[1794]: pam_unix(gdm:session): session opened for user linux by (uid=0)
Nov 16 16:38:51 www seahorse-agent[2232]: DNS-SD initialization failed: Daemon not running
Nov 16 16:41:48 www sshd[2303]: reverse mapping checking getaddrinfo for syo6018 [213.250.86.11] failed - POSSIBLE BREAK-IN ATTEMPT!
Nov 16 16:41:50 www sshd[2303]: Accepted password for root from 213.250.86.11 port 53925 ssh2
Nov 16 16:41:50 www sshd[2303]: pam_unix(sshd:session): session opened for user root by (uid=0)
Mitä, missä, milloin! Tietojärjestelmän hallinnan kannalta erittäin tärkeitä asioita! Linux on seurantapalvelimena mitä mainioin!

Lokitiedostojen katsomiseen löytyy monia hyviä sovelluksia, joista yksi on KSystemLog
Asennus Debianiin tapahtuu esimerkiksi komennolla apt-get install ksystemlog

Sisällysluetteloon


Varmuuskopiointiesimerkki

Linuxissa voidaan varmuuskopiointi toteuttaa usealla eri tavalla. Yksi parhaimmista on Rsync, joka huolehtii SSH-yhteyden läpi tapahtuvan kansio- ja tiedostorakenteen kopioinnista. Seuraavassa aiheesta esimerkki, jossa oletuksena on, että jokaisessa koneessa on asennettuna paketit openssh-server ja rsync. Tehdään ensimmäisenä SSH-yhteyteen käytettävä avainpari.

debian:~# mkdir .ssh
debian:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
f6:de:32:59:43:7f:49:0b:c2:78:bf:90:6a:31:0e:9d root@debian
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|          o      |
|         . +.. . |
|        S o.+.o o|
|       o E oo..o.|
|        o =o.... |
|         =+. .   |
|        . .o.    |
+-----------------+
debian:~# 

Siirretään avainparin julkinen avain kohdekoneella ja varmistetaan yhteyden toimivuus. Lopputuloksena on, että koneeseen pääse kirjautumaan ilman salasanaa.

debian:~# scp .ssh/id_rsa.pub root@192.168.1.160:/root/debian-avain
The authenticity of host '192.168.1.160 (192.168.1.160)' can't be established.
RSA key fingerprint is 94:09:a7:fc:7f:e4:2f:d2:66:b3:38:59:d6:2b:b7:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.160' (RSA) to the list of known hosts.
root@192.168.1.160's password: 
id_rsa.pub                                                          100%  393     0.4KB/s   00:00    
debian:~# ssh root@192.168.1.160
root@192.168.1.160's password: 
Linux www 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep  8 00:20:24 2009
www:~# 
www:~# ls
debian-avain
www:~# cd .ssh/
www:~/.ssh# ls
known_hosts
www:~/.ssh# cat /root/debian-avain > authorized_keys
www:~/.ssh# ls
authorized_keys  known_hosts
www:~/.ssh# exit
logout
Connection to 192.168.1.160 closed.
debian:~# ssh root@192.168.1.160
Linux www 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Sep  7 22:08:26 2009 from 192.168.1.117
www:~# 

Varmuuskopioidaan WWW-palvelimen kansion /srv/www sisältö seuraavalla komennolla.

debian:~# rsync -avz root@192.168.1.160:/srv/www/ /root/www-0/ 
receiving incremental file list
created directory /root/www-0
./
mediawiki-1.14.0/
mediawiki-1.14.0/AdminSettings.sample
mediawiki-1.14.0/COPYING
mediawiki-1.14.0/CREDITS
mediawiki-1.14.0/FAQ
----
wordpress/wp-includes/js/tinymce/utils/form_utils.js
wordpress/wp-includes/js/tinymce/utils/mclayer.js
wordpress/wp-includes/js/tinymce/utils/mctabs.js
wordpress/wp-includes/js/tinymce/utils/validate.js

sent 39032 bytes  received 12497368 bytes  455869.09 bytes/sec
total size is 42908719  speedup is 3.42
debian:~# ls
www-0

Ajoitetaan kopiointi tapahtumaan puolen tunnin välein. Varmistetaan, että tiedot kopioinnista tallennetaan lokitiedostoon.

debian:~# cd /etc/cron.d
debian:/etc/cron.d# echo "*/30 * * * * root rsync -avz root@192.168.1.160:/srv/www/ /root/www-0/  >> /var/log/rsync/www-0.log" > rsync-www-0
debian:/etc/cron.d# mkdir /var/log/rsync
debian:/etc/cron.d# touch /var/log/rsync/www-0.log
debian:/etc/cron.d# 

Pakataan kansio tiedostoksi kerran päivässä kolmelta yöllä. Huomaa. että bzip2-paketti on asennettu!

debian:/etc/cron.d# echo "0 3 * * * root tar -cjf /root/WWW-0-backup-files-$(date +\%y\%m\%d).tar.bz2 -C / root/www-0  > /dev/null" > backup-www0 
debian:/etc/cron.d# 
Edellä oli esitetty vain yksi tapa varmuuskopiointiin! Muita vaihtoehtoja on paljon, eli varmuuskopiointi ympäristön mukaan!

Sisällysluetteloon


Siirtonopeuden testaussovellus

Linux on äärettömän monipuolinen käyttöjärjestelmä. Saatavilla olevien ohjelmien määrä on niin valtava, että jokaiselle löytyy varmasti mieleisensä. Seuraavassa on toteutettu kätevä siirtonopeuden näyttävä sovellus. Tähän tarkoitukseen käytetään Iperf-ohjelmaa.

Aloitetaan sovelluksen rakentaminen asentamalla kahdelle koneelle kyseinen ohjelma

nas:~# apt-get install iperf
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu        
Luetaan tilatiedot... Valmis        
Seuraavat UUDET paketit asennetaan:
 iperf
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 10 päivittämätöntä.
Noudettavaa arkistoa 52,7kt.
Toiminnon jälkeen käytetään 156k t lisää levytilaa.
Nouda:1 http://213.250.106.7 lenny/main iperf 2.0.4-1 [52,7kB]
Noudettiin 52,7kt ajassa 0s (203kt/s)
Selecting previously deselected package iperf.
(Reading database ... 27002 files and directories currently installed.)
Unpacking iperf (from .../iperf_2.0.4-1_i386.deb) ...
Processing triggers for man-db ...
Setting up iperf (2.0.4-1) ...
nas:~# 
----
www:~# apt-get install iperf
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat UUDET paketit asennetaan:
  iperf
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 52,7kt.
Toiminnon jälkeen käytetään 156k t lisää levytilaa.
Nouda:1 http://ftp.fi.debian.org lenny/main iperf 2.0.4-1 [52,7kB]
Noudettiin 52,7kt ajassa 0s (135kt/s)
Selecting previously deselected package iperf.
(Reading database ... 20631 files and directories currently installed.)
Unpacking iperf (from .../iperf_2.0.4-1_i386.deb) ...
Processing triggers for man-db ...
Setting up iperf (2.0.4-1) ...
www:~# 

Käynnistetään ohjelma toisessa koneessa, ja otetaan yhteys toisella koneella.

nas:~# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.156 port 5001 connected with 192.168.1.152 port 35412
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec    544 MBytes    456 Mbits/sec


----
www:~# iperf -c nas
------------------------------------------------------------
Client connecting to nas, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.152 port 35412 connected with 192.168.1.156 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec    544 MBytes    456 Mbits/sec
www:~# 

Näin.. Nyt ei tarvi huolehtia muuta kuin siitä, että ohjelma lähtee käyntiin koneen käynnistyessä. Tämä voidaan tehdä monellakin tapaa, joista seuraavassa esitetty yksi:

Ohjelman manuaalista löytyy, että kun käynnistetään ohjelman komennolla iperf -sD, niin se suoritetaan taustalla. Testataan

Tässä UDP-serveri
nas:~# iperf -sD -u
Running Iperf Server as a daemon
The Iperf daemon process ID : 3013

Tässä TCP-serveri
nas:~# iperf -sD
Running Iperf Server as a daemon 
The Iperf daemon process ID : 3017
nas:~# 

Hyvä.. paitsi että käytännön testauksessa kävi ilmi daemon-moden toimimattomuus. Vika ilmenee prosessorin kuormittamisella, jolloin kyseiset prosessit haukkaavat koneesta tehoja. No.. Linuxin hienous on siinä, että vaihtoehtoisia ratkaisuja löytyy aina. Pitää vain valita pienimmän riesan tie. Käytetään tähän tarkoitukseen Linuxin taustaprosessi-ominaisuutta.

nas:~# iperf -s -u  2>&1 > /dev/null &
[1] 3167
nas:~# iperf -s 2>&1 > /dev/null &
[2] 3170
nas:~# 

Ohjelmat pyörivät taustalla, joten tämä on se mitä haetaankin. Lopuksi laitetaan ohjelmat käynnistymään koneen yhteydessä. Testataan lopuksi toiminta.

nas:~# pico /etc/rc.local 
----
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

iperf -s -u  2>&1 > /dev/null &
iperf -s 2>&1 > /dev/null &

exit 0
----
nas:~# reboot

Broadcast message from root@nas (pts/0) (Thu Sep  3 11:54:12 2009):

The system is going down for reboot NOW!
----
nas:~# ps xa
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [2]  
    2 ?        S<     0:00 [kthreadd]
----
 2066 ?        S<s    0:00 /usr/sbin/sshd
 2069 ?        S      0:00 iperf -s -u
 2073 ?        S      0:00 iperf -s
 2090 tty1     Ss+    0:00 /sbin/getty 38400 tty1
 2091 tty2     Ss+    0:00 /sbin/getty 38400 tty2
 2095 ?        S<s    0:00 sshd: root@pts/0 
 2098 pts/0    S<s    0:00 -bash
 2102 pts/0    R<+    0:00 ps xa
nas:~# 

Testataan toiminta asiakaskoneella.

www:~# iperf -c nas
------------------------------------------------------------
Client connecting to nas, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.152 port 35998 connected with 192.168.1.156 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec    563 MBytes    473 Mbits/sec
Tämä on vain yksi esimerkki käytännöllisestä ja tarpeellisesta sovelluksesta! Vastaavia esimerkkejä löytyy pilvin pimein!

Sisällysluetteloon


Klusterointi

Verkon käytön kasvaessa palveluiden saatavuus on yhä tärkeämmässä roolissa. Ajatellaampa vaikka puhelinliikennettä, joka siirtyy muutaman vuoden kuluessa täysin IP-pohjaisiksi. Tyypillisessä ratkaisussa puhelin ottaa yhteyden SIP-protokollalla palvelimeen, joka ohjaa puhelun oikeaan paikkaan. Puhelut eivät siis onnistu, jos palvelin on nurin. Tällä hetkellä palvelimien uptime-arvot ovat valitettavan huonot.

Klusteroinnin tarkoituksena on parantaa palveluiden saatavuutta ja käytettävyyttä. Saatavuutta parannetaan esimerkiksi korvaamalla vioittunut palvelin toimivalla. Käytettävyyden parantamisessa jaetaan palvelimien kuormaa niin, että palveluiden vasteajat pysyvät kohtuullisena. Luonnollisesti kyseisiä tapoja voidaan sekoittaa saatavilla olevien resurssien ja tarpeiden mukaan.

Seuraavassa käydään läpi perusklusterointia. Huom! Tässä vaiheessa ei oteta kantaa palvelimien kuormitukseen eli ei tehdä kuormantasausta! Oletuksena on, että käytössämme on seuraavat koneet:

Kone, jossa apache asennettuna. Nimi master ja IP-osoite 192.168.10.110
Kone, jossa apache asennettuna. Nimi slave ja IP-osoite 192.168.10.120
Klusteroitu IP-osoite 192.168.10.130

Asennetaan ensimmäiseksi molemmille koneille Heartbeat-ohjelma, jolla klusterointi toteutetaan.

apt-get install heartbeat-2

Asennuksen yhteydessä tulee virheilmoitus, että seuraava tiedosto puuttuu. Niinpä luodaan se molemmille koneille. Huom! ucast osoite:

gedit /etc/ha.d/ha.cf

Lisää tiedostoon alla oleva teksti.

logfacility daemon         # Lokitiedot daemon.log-tiedostoon
 
node master                # Klusterin ensisijainen palvelin
node slave                 # Klusterin toissijainen palvelin
 
keepalive 1                # Pollataan klusteria sekunnin välein
warntime 5                 # Varoitetaan palvelinta viiden sekunnin jälkeen
deadtime 10                # Todetaan palvelin kuolleeksi 10 sekunnin kuluttua
 
initdead 120               # Kuinka kauan odotetaan laitteen käynnistymistä
 
ucast eth0 192.168.10.120       # Klusterikaveri
ping 192.168.10.254        # Millä osoitteella tarkistetaan palvelimen ulkoyhteys
auto_failback on           # Siirrytään automaattisesti ensisijaiseen palvelimeen

Luodaan klusteriin yhteinen salausavain ja lisätään se leikepöydälle. Huomaa, että tämä tehdään vain toisella koneella. Tekemisen jälkeen kopioidaan vain luotu tiedosto.

apt-get install xsel
dd if=/dev/urandom count=4 2>/dev/null | openssl dgst -sha1 | xsel -b

Tehdään avaintiedosto

gedit /etc/ha.d/authkeys

auth 1
1 crc

Muokataan avaintiedoston oikeuksia.

chmod 600 /etc/ha.d/authkeys

Seuraavaksi pitää esitellä, että mitä palveluja on klusteroitu. Tämäkin molemmille koneille!

gedit /etc/ha.d/haresources
master   192.168.10.130  ssh

Muokataan hosts-tiedostoa sellaiseksi, että koneet tuntevat toisensa pelkän nimen perusteella. Molemmille koneille sama!

gedit /etc/hosts

192.168.10.110     master
192.168.10.120     slave

Kernelin asetuksia pitää muuttaa, että liikenne menee klusteriosoitteeseen. Molemmat koneet sama!

gedit /etc/sysctl.conf

kernel.core_uses_pid = 1

Otetaan kernelin asetus käyttöön alla olevalla komennolla.

sysctl -p

Käynnistä koneet uudestaan ja aloita testaaminen. Lyhykäisyydessään:

Jos pingaat klusteriosoitetta 192.168.10.130, yhtään pakettia ei katoa vaikka toinen kone on polvillaan

Sisällysluetteloon


Henkilökohtaiset työkalut