16. Tiedostojärjestelmät

Linux tukee valtaosaa PC:ssä käytettävistä eri tiedostojärjestelmistä. Eri tyyppiset levyt voidaan liittää (mount) eri kohtiin hakemistopuussa ja käsitellä niitä aivan kuten tavallisia hakemistoja. CD- ja levyasema eivät poikkea muista levyistä, eli nekin täytyy ensin liittää johonkin hakemistoon, että sisältöön päästään käsiksi. Eräs hienous Linuxissa on mahdollisuus käyttää ns. loopback deviceä, eli tiedostoihinkin voidaan luoda tiedostojärjestelmiä kuin levyille konsanaan. Seuraavassa luettelossa on tavallisimpia tiedostojärjestelmiä niillä nimillä, joita Linux niistä käyttää:

mount ja umount

mount on komento, jolla tiedostojärjestelmä liitetään hakemistopuuhun. Sille kerrotaan parametrin -t avulla ensin tiedostojärjestelmän tyyppi, sitten liitettävä laite ja viimeiseksi kohde, eli hakemisto, johon tiedostojärjestelmä liitetään. Pelkkä mount ilman parametreja antaa luettelon tällä hetkellä liitettynä olevista hakemistoista. Vain ylikäyttäjällä on tavallisesti oikeus liittää hakemistoja. Komento umount kumoaa liittämisen.
Esimerkkejä:

mount -t iso9660 /dev/hdb /mnt/cdrom
Liittää IDE-liitäntäisen CD-aseman hakemistoon /mnt/cdrom.

mount /mnt/floppy
Liittää levyaseman hakemistoon /mnt/floppy. Muita parametreja ei tarvittu, koska ne on jo valmiiksi asetettu tiedostossa /etc/fstab.

umount /mnt/floppy
Poistaa levykkeen hakemistopuusta. Huom! Linux ei kirjoita tietoja levykkeelle, ennen kuin komento umount annetaan. Levykettä ei saa siis ottaa suoraan pois tai tiedot eivät tallennu.

fstab

Hakemistossa /etc sijaitseva tiedosto fstab (file system table) on tärkeä tiedostojärjestelmien liittämisessä. Siihen voidaan valmiiksi määritellä levyjen tyypit, paikat, johon ne liitetään ja muita ominaisuuksia.
Esimerkki fstabin rivistä:

/dev/fd0        /mnt/floppy     msdos           noauto 0 0
Ensimmäisessä sarakkeessa kerrotaan liitettävän laitteen nimi, tässä tapauksessa levyasema. Sitten seuraavat kohdehakemisto ja tyyppi. Viimeisissä sarakkeissa on muita asetuksia, tässä noauto tarkoittaa, ettei levyasemaa liitetä käynnistyksen yhteydessä automaattisesti. Kiintolevyillä tässä kohdassa on yleensä defaults. Optio user mahdollistaa sen, että tavallinenkin käyttäjä voi liittää tiedostojärjestelmän. Jos käytetään useampia optioita, ne erotetaan pilkulla.

df ja du

Komennolla df näkee vapaan levytilan kaikilta asemilta. Komennolla du voi tutkia hakemistojen tai tiedostojen käyttämän tilan määrää. Parametrilla -c du laskee tiedostojen yhteisen koon.
Esimerkki:

du -c *.html
Näyttää ensin kaikkien html-loppuisten tiedostojen yksittäiset koot kilotavuina ja viimeisenä rivinä niiden yhteensä käyttämän tilan.

Verkkolevyjen liittäminen

Työaseman päässä liittäminen tapahtuu samalla tavalla kuin minkä tahansa tiedostojärjestelmän sillä erotuksella, että laitteeksi annetaan palvelin ja sen hakemisto. Usein käytetyt verkkolevyt voidaan laittaa niinikään /etc/fstab:iin.
Esimerkki:

mount -t nfs salumae.yok.utu.fi:/share /mnt/salumae
Liittää koneelta salumae.yok.utu.fi hakemiston /share oman koneen hakemistoon /mnt/salumae.

Palvelimen päässäkään tehtävät toimenpiteet eivät ole kovin monimutkaisia. Jaettavat hakemistot luetellaan tiedostossa /etc/exports ja jaetaan verkkoon komennolla exportfs. Kaksi esimerkkiriviä tiedostosta exports:

/share      kameli.yok.utu.fi(ro) mummo.ton.tut.fi(rw)
Ensimmäisenä on jaettavan hakemiston nimi ja sitten välilyönnillä erotettuna koneet, joille hakemisto jaetaan. Kamelille annetaan vain lukuoikeudet, koneelle mummo luku- ja kirjoitusoikeudet. Tähteä (*) voidaan käyttää korvaamaan osa koneen nimestä, jos halutaan jakaa hakemisto paikallisverkon kaikille koneille, esim. *.ton.tut.fi.

/home       10.0.0.0/255.255.255.0(rw,all_squash)
Tässä jaetaan kaikille aliverkon 10.0.0.0 peitteen 255.255.255.0 koneille hakemisto /home. Näin voidaan menetellä, jos koneilla ei ole kiinteitä nimiä. Optio all_squash tarkoittaa, että asiakaskoneiden hakemistoon kirjoittamat tiedostot merkitään käyttäjän nobody omistamiksi. Käytännöllisempi on root_squash, joka tekee saman vain ylikäyttäjien tiedostoille.


17. Verkon ominaisuudet ja peruskomennot

Unix-ympäristössä käytetään perinteisesti TCP/IP-verkkoa ja sieltä se on levinnyt erityisesti internetin ansiosta yleisimmäksi verkkoprotokollaksi. Linux-kone on TCP/IP-verkossa kuin valas vedessä, se voi toimia distribuution mukana tulevilla ohjelmilla mm. WWW-, ftp-, levy-, tulostus- tai sähköpostipalvelimena, reitittimenä ja palomuurina. Mitään ulkopuolisia ja maksullisia ohjelmia ei välttämättä tarvita. Linuxin tuki verkkokorteille on laaja, PnP-tyyppiset kortit toimivat kylläkin vain, jos ne saa pois PnP-tilasta.

Pikakertauksena TCP/IP-verkosta kerrottakoon, että jokaisella laitteella on oma yksilöllinen neliosainen IP, kuten 193.166.89.1. IP voi olla kiinteä tai dynaaminen, jolloin se haetaan käynnistyksen yhteydessä DHCP- tai BOOTP-palvelimelta. Saman verkon laitteilla on sama aliverkon peite, jonka perusteella ne valikoivat vastaanottamansa sanomat. Aliverkon peite on neliosainen, esim. 255.255.255.0. Yhdyskäytävä on laite, jonka kautta liikenne kulkee toiseen verkkoon, vaikkapa internetiin. DNS- eli nimipalvelin on kone, jolta käydään kysymässä tekstimuodossa annetun koneen IP-osoite, jos sitä ei jo tiedetä.

Red Hatin graafisella työkalulla voi muokata verkon asetuksia melko hyvin, mutta kerrottakoon vielä muutama tiedosto, joita voi helposti muokata itsekin. Tiedostoon /etc/hosts voi itse määritellä lyhyitä nimiä lähiverkon koneiden IP-numeroille (samainen tiedosto on "lainattu" Windowsiinkin). /etc/resolv.conf liittyy nimiselvitykseen, sinne voi laittaa optiolla nameserver lisää nimipalvelimia. Saman hakemiston HOSTNAME-tiedosto sisältää koneen nimen. Muut verkon asetukset ovat hakemistossa /etc/sysconfig ja /etc/sysconfig/network-scripts.

ifconfig

Red Hatin asennus ja graafinen asetustyökalu pystyvät yleensä konfiguroimaan verkon toimivaksi. Jos tarvetta manuaaliseen säätämiseen on, se tapahtuu verkkokortin osalta komennolla ifconfig. Pelkkä ifconfig ilman parametreja näyttää tiedot verkkokorteista ja niiden tilasta. lo-niminen laite on oma kone (localhost) ja sen kautta voidaan käyttää oman koneen sisällä verkkopalveluja, vaikka koneessa ei olisi edes verkkokorttia. Ethernet-kortit näkyvät luettelossa nimillä eth0, eth1 jne. Modeemiyhteyksien nimet ovat ppp0, ppp1 jne.

ifconfigille annetaan ensimmäisenä parametrina verkkolaite, johon komento kohdistetaan. Komento up käynnistää verkkolaitteen ja down poistaa sen käytöstä. Komennoilla netmask ja inet asetetaan aliverkon peite ja IP-numero. Red Hatissa verkkokorttien käynnistämiseen on valmiina komentojonot ifup ja ifdown hakemistossa /etc/sysconfig/network-scripts. Niille annetaan parametrina vain laitteen nimi.
Esimerkkejä:

ifconfig eth0 up
Käynnistää ensimmäisen ethernet-kortin.

ifconfig eth1 inet 10.0.0.1 netmask 255.255.255.0
Asettaa verkkokortin eth1 IP-osoitteen ja aliverkon peitteen.

route

Komennolla route voidaan lisätä reittejä muihin koneisiin ja verkkoihin. Jos käytössä on yhdyskäytävä, sekin voidaan asettaa routella. Pelkkä route ilman parametreja kertoo käytössä olevat reitit. Komennolla add lisätään reitti, komennolla del voidaan reitti poistaa. Jos koneessa on useampi verkkokortti, voidaan reitin käyttämä kone tarvittaessa antaa dev-parametrilla. Route arvaa aliverkon kuitenkin yleensä oikein.
Esimerkkejä:

route add -net 10.0.0.0 netmask 255.255.255.0
Lisää reitin kaikkiin aliverkon 10.0.0.0 koneisiin, joiden peite on 255.255.255.0.

route add default gw 193.166.89.1 dev eth1
Lisää oletusyhdyskäytävän ja käyttää verkkokorttia eth1.

ping

ping on verkon toiminnan selvittämisen kannalta hyödyllinen komento. Se lähettää kohdekoneelle sanoman ja selvittää, onko se verkossa. Tulostus kertoo myös, kauanko sanoman kulku kesti. Ohjelma jatkaa toimintaansa kunnes se keskeytetään Control-C:llä.
Esimerkki komennosta ja tulosteesta:

ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=2.0 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=1.2 ms
Muita verkon manuaaliseen säätämiseen käytettäviä komentoja ovat mm. traceroute, joka näyttää tiedot koneiden välillä olevista reitittimistä, arp sekä ipfwadm. Näitä ei käsitellä tarkemmin, verkkotekniikasta on omat kurssinsa.


18. Tietoturva

Jokainen verkkoon kytkettävä laite on altis hyökkäyksille. Unix-koneissa vaara on erityisen konkreettinen, sillä ne tarjoavat yleensä verkkoon enemmän palveluja kuin muut järjestelmät. Red Hat ei ole ollut tässä suhteessa järin varovainen, vaan tavanomaisen asennuksen jälkeen verkkoon näkyy useita tarpeettomia ja tietoturvaa heikentäviä palveluita. Nyrkkisääntö palvelujen kanssa on se, että jätetään jäljelle vain ehdottomasti tarvittavat.

Salasanat

Käyttäjien helposti arvattavat, lapulle kirjoitetut tai olkapään yli kurkitut salasanat ovat yksinkertainen tapa päästä järjestelmään. Kun järjestelmään on päästy, on murtautujalla jo paljon vapaammat kädet. Tämän vuoksi koneeseen ei saa päästä edes alkujaan. Salasanattomia tunnuksia ei saa luoda ja käyttäjille pitää kertoa, millainen on hyvä salasana. Vähintään kahdeksan merkkiä, isoja ja pieniä kirjamia ja numeroita sekaisin on kohtuullisen hyvä. Salasanoja murtavat ohjelmat perustuvat sanastoihin ja yksinkertaisesti kaikkien yhdistelmien kokeiluun.

Uudehko parannus tietoturvaan salasanojen osalta ovat varjosalasanat (shadow passwords). Normaalisti /etc/passwd on kaikkien luettavissa ja jos murtautuja saa sen käsiinsä, saattaa salasanoja selvitä murto-ohjelmilla. Komennolla pwconv otetaan käyttöön varjosalasanat, jotka sijoitetaan tiedostoon /etc/shadow. Tähän tiedostoon ei ole oikeuksia kuin ylikäyttäjällä. Käyttäjien luomiseen ja passwd-komentoon toiminto ei vaikuta mitenkään.

inetd.conf

Hakemistossa /etc sijaitseva inetd.conf määrää suuresta osasta perinteisiä verkkopalveluja. Red Hatin asennuksen jälkeen kaikki on oletusarvoisesti päällä. Esim. hyödylliset ftp- ja telnet-palvelut ovat kuitenkin tietoturvan kannalta uhkia, sillä niitä käytettäessä salasanat lähetetään suojaamattomina verkossa. finger-palvelu taas mahdollistaa koneella olevien käyttäjien seurannan, eikä sekään ole toivottavaa. Kaikki palvelut voi ottaa pois päältä lisäämällä rivin alkuun risuaidan (#) eli kommenttimerkin. Tämän jälkeen vaaditaan vielä inetd-demonin uudelleenkäynnistys joko HUP-signaalilla tai yksinkertaisesti käynnistämällä kone. Telnet- ja ftp-yhteydet voi korvata seuraavassa luvussa esitellyillä SSH-perheen ohjelmilla.

hosts.allow ja hosts.deny

Tiedostot /etc/hosts.allow ja /etc/hosts.deny ovat tietoturvan kannalta hyödyllisiä, sillä niiden avulla voidaan rajoittaa verkosta koneelle pääsyä. hosts.deny sisältää tiedot, mistä osoitteista pääsy kielletään ja hosts.allow vastaavasti mistä pääsee sisään. allow ylittää tärkeysjärjestyksessä denyn.
Esimerkkirivi hosts.deny -tiedostosta:

ALL: ALL except 10.0.0.0/255.255.255.0
Ensimmäinen ALL tarkoittaa, että kielletään yhteydenotot kaikilla palveluilla, toinen ALL kieltää pääsyn kaikkialta verkosta. Viimeiseksi sääntöön tehdään kuitenkin poikkeus aliverkon 10.0.0.0 koneille, joiden peite on 255.255.255.0.

Ohjelmat

Ohjelmatiedoston ominaisuuksiin lisätty s-bitti (ks. luku 7) mahdollistaa sen ajamisen ylikäyttäjän oikeuksilla. Joissakin tapauksissa tämä on pakollista, että saadaan riittävät oikeudet laitteistoon. Harkitsematta ja ohjelmaa tuntematta bittiä ei saa asettaa, sillä seurauksena murtautuja voi ylikäyttäjän oikeuksilla tehdä vakavia tuhoja. Samoin kannattaa tarkoin harkita muidenkin tiedostojen ja erityisesti laitetiedostojen suojausbitit, omistajat ja ryhmät. Tavallinen käyttäjä tarvitsee kirjoitusoikeudet kotihakemistonsa lisäksi vain hakemistoon /tmp.

Ylikäyttäjän hakupolku on oletuksena asetettu siten, että oletushakemistossa olevia ohjelmia ei ajeta. Oletushakemistoa ei ole syytäkään lisätä polkuun, sillä jos oletushakemistossa onkin ns. troijalainen hevonen ja se ajetaan oikean komennon sijasta, seuraukset voivat olla tietoturvan kannalta kohtalokkaat.

Liittäminen

Levyjen liittämisen salliminen tavalliselle käyttäjälle on myös uhka tietoturvalle. Murtautuja voi nimittäin liittää järjestelmään oman levyn, jolla on SUID-ohjelmia ja päästä niiden avulla käsiksi joka paikkaan. DOS-tyyppisten asemien (kuten levyke) ja CD-aseman liittäminen voidaan sallia, sillä niiden tiedostoille ei SUID-ominaisuutta saa päälle. Ongelma on erityisen konkreettinen NFS-verkkolevyjen kanssa. Liittämällä levyjä vain turvallisiksi tiedetyistä paikoista ja käyttämällä root_squash-asetusta voidaan riskiä pienentää.

Lokitiedostot

Ylläpitäjän velvollisuus on seurata säännöllisesti hakemistoon /var/log kerääntyviä lokeja (myös poistaa niitä tilaa viemästä). Tiedostoon secure tallentuu tietoa järjestelmään otetuista yhteyksistä. Toinen tärkeä on xferlog, jossa on tietoa tiedonsiirroista.

Avoimet istunnot

Avoimeksi jäänyt istunto on aina tietoturvariski, erityisesti jos kyseessä on ylikäyttäjän istunto. Konsolin lukitseminen vlock-ohjelmalla ja X:n lukitseminen xlock-ohjelmalla auttaa tähän ongelmaan. X:n asetustiedostoon on syytä laittaa asetus DontZap päälle, ettei X:ää pääse tappamaan painamalla Control-Alt-Backspace. Komennon startx antaminen muodossa exec startx estää konsoliin palaamisen jos X:n tappaa. Ja kuten jo aiemmin mainittiin, ylikäyttäjä ei saa jatkuvasti käyttää konetta root-tunnuksella.

Päivitykset

Toisinaan demoneista, ohjelmista tai kirjastoista löydetään virheitä, jotka voivat aiheuttaa tietoturvaongelmia. WWW:n ja uutisryhmien seuraaminen on hyödyllistä, jos haluaa pitää järjestelmänsä tietoturvan hyvällä tasolla. Red Hatin WWW-sivuilta (http://www.redhat.com/) saa päivityksiä, jotka korjaavat tietoturva-aukkoja. Viruksista ei Linuxin kanssa ole sanottavasti ongelmaa, tiedostojen suojausten vuoksi virukset eivät pääse levittäytymään järjestelmään kunnolla.


19. Verkko-ohjelmia

telnet

telnet on perinteinen pääteohjelma, jolla voi muodostaa yhteyden toiseen koneeseen. Komennolle annetaan parametrina kohdekoneen nimi ja tarvittaessa portin numero. telnetin oletusportti on 23. Toinen perinteinen etäkäyttöön käytetty komento on rsh (remote shell).

ftp

ftp (file transfer program) on yleinen tapa siirtää tiedostoja koneesta toiseen. Red Hatin asennuskin voi tapahtua FTP:n yli. ftp:lle annetaan parametrina kohdekoneen nimi. Linuxin mukana tulee modernimpi versio nimeltä ncftp. Tavallisimpia ftp-komentoja:

SSH-perhe

Nykyään Data Fellowsin omistuksessa oleva SSH-perhe korvaa telnetin ja ftp:n sekä tarjoaa IP-porttien uudelleenohjauksen. Ohjelmien tärkein ominaisuus on yhdeyden kryptaaminen, mikä on tärkeää tietoturvan kannalta. Yhteys voidaan myös pakata, mikä voi nopeuttaa huomattavasti hitailla siirtoyhteyksillä. SSH-perheeseen kuuluvat mm. palvelimella ajettava sshd, pääteyhteyksiin käytettävä ssh ja tiedostojen koneiden välillä kopiointiin käytettävä scp (secure copy). ssh:sta on myös Windows-versio.


20. Apachen perusasetukset

Linux-distribuutioiden mukana on jo pitkään seurannut Apache, maailman suosituin WWW-palvelinohjelma. Tällä hetkellä yli puolet internetin WWW-palvelimista käyttää Apachea. Apache on maksuton, monipuolinen, vakaa ja siitä on versiot kaikille Unixeille ja 32-bittiseen Windowsiin. WWW:n käyttämän HTTP-protokollan palvelusta huolehtii demoni nimeltä httpd. Jos asennuksessa valitsee Apachen asennettavaksi ja httpd:n automaattisesti käynnistettäväksi, on kone heti käynnistyttyään WWW-palvelin.

Apachen saa lopetettua katsomalla tiedostosta /var/run/httpd.pid sen prosessinumeron ja antamalla prosessille TERM-signaalin. Apachen voi käynnistää manuaalisesti ajamalla hakemistosta /usr/sbin komento httpd.



Kuva 20.1 Apachen osuus WWW-palvelimista Netcraftin tutkimuksen mukaan

Asetustiedostot

Perusasetukset riittävät hyvin pienimuotoiseen käyttöön, mutta vaativampiin tehtäviin Apachen asetustiedostoja voi joutua muokkaamaan. Asetustiedostot sijaitsevat hakemistossa /etc/httpd/conf. Asetustiedostot ovat melko itsedokumentoivia, Apachen WWW-sivulta (http://www.apache.org/) löytyy kattava dokumentaatio kaikista asetuksista. Apachen saa lukemaan asetustiedostot uusiksi antamalla sille signaalin HUP samalla tavalla kuin edellä esitetyssä tapauksessa annettiin TERM.

access.conf ja .htaccess

Tiedosto access.conf sisältää järjestelmänlaajuiset käyttöoikeudet. HTML-hakemistoihin voi laittaa tiedoston .htaccess, joka määrää paikallisen hakemiston oikeudet. Tagien <Directory> ja </Directory> väliin laitetaan yksittäistä hakemistoa koskevat asetukset, <File> ja </File> koskevat tiedostoja, jokerimerkit ovat sallittuja. Keskeisiä asetuksia ovat deny from, joka kieltää pääsyn sivuille, allow from, joka sallii pääsyn sivuille ja Options, jolla määrätään, mitä hakemistolla/tiedostoilla saa tehdä. deny ja allow kelpuuttavat parametrikseen aliverkon nimen, yksittäisen koneen nimen tai IP:n sekä useamman IP:n. Options voi olla mm. all, joka sallii kaiken, none, joka kieltää kaiken, ExecCGI, joka sallii CGI-skriptien ajon tai Indexes, joka sallii hakemiston sisällön tarkastelun. Yhdistelmät sallitaan myös.
Esimerkki:

<Directory /home/httpd/html>
    deny from all
    allow from .ton.tut.fi 127.0.0.1
    Options ExecCGI Indexes
</Directory>
Ensin kielletään kaikilta pääsy hakemistoon /home/httpd/html, sitten sallitaan pääsy koneille, joidenka toimialue on .ton.tut.fi sekä koneelle 127.0.0.1. Seuraavaksi annetaan oikeus suorittaa CGI-skriptejä ja katsoa hakemiston sisältö.

srm.conf

Tiedostossa srm.conf määritellään useita tärkeitä Apachen asetuksia. Asetukset voisi antaa myös httpd.conf-tiedostossa, mutta on parempi noudattaa Apachen antamaa jakoa. Tärkeimpiä tämän tiedoston avulla säädettäviä asetuksia ovat:

httpd.conf

httpd.conf sisältää tärkeitä Apachen toimintaan vaikuttavia asetuksia. Tärkeimpiä httpd.conf-tiedoston kautta säädettäviä ominaisuuksia ovat:

Cache-rivien edestä kommenttimerkit poistamalla Apache saadaan toimimaan myös WWW-cachena, eli tallentamaan paikalliseksi usein haetut sivut. Tällainen järjestely nopeuttaa usein käytettyjen sivujen hakemista, sillä ne voidaan ladata nopeasti lähiverkosta eikä jokaiselle käyttäjälle erikseen internetistä. Proxy-asetuksen on oltava päällä ja lähiverkon koneiden selaimiin on asetettava välityspalvelimen käyttö päälle.

Perusasetuksillaan Apache ei suorita CGI-skriptejä. Tiedostossa httpd.conf pitää ladata CGI-moduuli ja srm.conf -tiedostosta pitää poistaa kommenttimerkki riviltä

AddHandler cgi-script .cgi