Sisällysluettelo |
Linux on saavuttanut vahvan aseman palvelinkäytössä, eikä suotta. Suosioon on olemassa useita syitä, joista muutama on lueteltu alla.
Toisaalta Linux koetaan monessa mielessä epävarmaksi ratkaisuksi. Tähän vaikuttavia tekijöitä ovat:
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.
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ä.
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.
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.
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.
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.
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/
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.
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.
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 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ä.
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
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
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ä.
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.
Asennetaan graafinen työpöytäympäristö KDE.
apt-get install kdebase kde-i18n-fi
Gnome on vastaava kuin KDE.
apt-get install gnome-desktop-environment
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
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:
Näiden lisäksi palvelimelle (oli Linux tai mikä tahansa) on olennaista:
Linuxiin ja Debianiin löytyy valtavasti materiaalia netistä. Alla yksi parhaista
http://www.debian-administration.org/
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
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.
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)
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
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.
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ä.
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ä.
Palvelimen asennus tapahtuu alla olevalla komennolla.
apt-get install openssh-server
Oletuksena palvelin käynnistyy ja on valmis hyväksymään tulevat yhteydet. Palvelimen asetuksia pääsee säätämään /etc/ssh-hakemistossa olevasta sshd_config-tiedostosta. Vaihtoehtoja on hirvittävä määrä ja paras manuaali löytyy linuxista komennolla:
man sshd man sshd_config
Luonnollisesti myös Googlesta löytyy valtava määrä tietoa kyseisestä aiheesta.
Erittäin hyvä ohje löytyy tästä ja lisäesimerkkejä käydään tunneilla läpi.
Yksinkertaisimmillaan ssh-yhteys otetaan linuxissa seuraavalla komennolla
ssh koneen nimi tai IP-osoite ssh käyttäjä@koneen nimi tai IP-osoite
Tiedostojen kopiointi SSH-yhteyden läpi (Windowssissa WinSCP) tapahtuu seuraavasti
scp tiedosto koneen nimi tai IP-osoite:kohdehakemisto
Autentikointi perustuen pelkkään avaimeen tapahtuu seuraavasti
cd .ssh ssh-keygen -t rsa chmod 0500 id_rsa
Siirretään koneeseen, johon otetaan yhteyttä, luotu julkinen avain tiedostoon authorized_keys. Jos tiedostoa ei ole, se täytyy tehdä.
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ö. Eräs yleisimmistä ohjelmista RealVNC.
Webmin on selaimella toimiva ohjelmalla, jolla voidaan hallita lähes kaikkia linuxiin liittyviä asioita. Webmin tarjoaa rajapinnan erilaisiin sovelluksiin, kuten esimerkiksi DHCP-ohjelmaan. Webminillä voidaan esimerkiksi sulkea ja käynnistää ohjelmia, sekä tehdä muutoksia niiden toimintaan eli käytännössä muuttamaan konfiguraatiotiedostoja.
Webministä on monta mielipidettä, jonka luonnollisesti jokainen saa muodostaa itse, mutta koulutuksen tässä vaiheessa on mielestäni erittäin hyvä tutustua tähän työkaluun. Vahvuuksia Webminissä mielestäni on etähallittavuus, eli käytännössä ohjelmaa voidaan käyttää Internet-selaimella ajasta, paikasta ja käyttöjärjestelmästä riippumatta, ja keskitettävyys, eli voidaan keskitetysti hallita valtavaa määrä sovelluksia ja muita asioita, kuten käyttäjiä.
Webminin toiminta on perinteisen Linuximainen eli ohjelma käyttää toimintaansa tiedostoja ja muita yleisesti tuttuja komentoja. Webmin lukee ohjelman tilatietoa pid-tiedostoista, käyttää hallintaan /etc/init.d-kansion skriptejä ja muuttaa ohjelman toiminnallisuutta käsittelemällä konfiguraatiotiedostoja.
Webmin voidaan asentaa monella tapaa, mutta meidän tapauksessa käytetään valmista deb-pakettia. Asennus tapahtuu seuraavasti
Haetaan deb-paketti koneelle komennoilla
cd wget http://freefr.dl.sourceforge.net/sourceforge/webadmin/webmin_1.480_all.deb
Asennetaan sidospaketti, jotka tiedetään edellisen vaiheen ilmoituksesta
apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl
Asennetaan paketti koneelle
dpkg -i webmin_1.480_all.deb
Asennus on valmis ja voit siirtyä käyttämään ohjelmaa ottamalla yhteyden koneseen laittamalla selaimeen osoitteen (Vinkki! Selvität osoitteen käskyllä ifconfig)
http://koneen_nimi_tai_IP-osoite:10000
Sisäänkirjautumisruutu, johon laitetaan koneen pääkäyttäjän tunnus ja salasana
Webminin etusivu
Webminin käyttö tapahtuu Internet-selaimella. Tutustumme Webminin käyttöön, jos vain aikaa riittää.
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ä!
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!
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!
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!
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!
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 = 1Otetaan 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