Tässä dokumentissa on tarkoitus käsitellä Linux-järjestelmää ja järjestelmän ylläpitoa. Koska eri Unix-järjestelmät poikkeavat melko paljon toisistaan on mahdotonta kirjoittaa yleispätevää kuvausta Unix-järjestelmän ylläpidosta, mutta monet asiat pätevät kuitenkin yleisemminkin.
Yleisesti järjestelmän ylläpitäjän tehtäviin kuuluu pitää järjestelmä toimivana, huolehtia tiedostojen varmuuskopioinnista (ja mahdollisesta tiedostojen palautuksesta), asentaa uudet sovellusohjelmat, uusien käyttäjätunnusten luonti ja turhien poisto jne.
Linuxin hakemistorakenne pyritään määrittämään ja yhdenmukaistamaan FSSTND:n (filesystem standard) avulla. Kyseinen standardi pyrkii määrittämään kuinka linuxin hakemistorakenne pitäisi järjestää. Tällä pyritään helpottamaan ohjelmien kehitystä ja ylläpitoa.
Linuxin tiedostojärjestelmä on tarkoitettu jaettavaksi pienempiin osiin joista kukin osa sijaitsee omalla levypartitiollaan. Hakemistorakenteen pääosat ovat: juuri /, /usr, /var ja /home -hakemistot. Jokaisella hakemistolla on oma tarkoituksensa ja hakemistorakenne on suunniteltu siten, että muutamat hakemistot voivat sijaita sellaisella laitteella johon on vain lukuoikeus. Esimerkiksi verkkolevyllä, jossa useammat linux-järjestelmät voivat jakaa saman hakemiston.
Kuva 1: Linuxin hakemistorakenne (katkoviiva tarkoittaa partitiorajoja)
Jokaisella linux-koneella on oma juurihakemisto, joka normaalisti
sijaitsee lokaalilla levyllä. Juurihakemisto voi olla myös
ramdisk tai se voi sijaita myös verkkolevyllä.
Juurihakemistossa sijaitsevat kaikki järjestelmän käynnistyksessä tarvittavat
tiedostot, siten että muut hakemistot voidaan mountata.
/usr hakemisto sisältää suoritettavat ohjelmat, kirjastot, manuaalisivut
ja muut normaalisti tarvittavat muuttumattomat tiedostot.
/usr hakemistossa ei normaalisti ole mitään tietylle koneelle
tarkoitettuja tiedostoja, eikä hakemistossa olevia tiedostoja
ole tarve muuttaa normaalikäytössä. Tämä mahdollistaa /usr
hakemiston jakamisen verkossa eri koneiden välillä.
/var hakemisto sisältää muuttuvia tiedostoja, kuten
tulostusjonot, mailjonot, lokitiedostot jne.
/home hakemisto sisältää käyttäjien kotihakemistot.
Kotihakemistojen erottaminen omaksi hakemistoksi helpottaa
varmuuskopiointia. Suuri /home hakemisto voidaan edelleen jakaa
useampaan eri partitioon.
Normaalisti juurihakemiston / sisältävä levypartitio kannattaa
pitää pienenä koska se sisältää järjestelmän käynnistämiseen tarvittavat
tiedostot ja pieni harvoin muuttuva tiedostojärjestelmä ei
korruptoidu helposti.
Juurihakemisto (/) itse ei yleensä sisällä mitään tiedostoja,
paitsi ehkä boot imagen.
/bin
/sbin
/etc
/root
/lib
/lib/modules
/dev
/tmp
/boot
/mnt
/proc
Lisätietoa proc(5)
/usr, /var, /home
Seuraavassa esitellään muutamia tärkeitä /etc hakemistossa olevia
tiedostoja ja alihakemistoja.
/etc/fstab tiedosto sisältää tiedot järjestelmässä olevista
tiedostojärjestelmistä.
/etc/motd (message of the day) tiedosto sisältää viestin joka
näytettään automaattisesti onnistuneen järjestelmään kirjoittautumisen jälkeen.
Tiedoston avulla järjestelmän ylläpitäjä voi kertoa esimerkiksi aioituista
huoltokatkoksista.
/etc/nsswitch.conf (Name Service Switch config file) Tiedostossa
määritellään millä tavalla eri palveluiden hakeminen toteutetaan. Katso
esimerkki alempana.
/etc/printcap tiedostossa on tiedot järjestelmään asennetuista
kirjoittimista.
/etc/profile Komentotulkkien bash ja ksh alustamiseen
tarkoitetut määritykset. Tiedosto suoritetaan vain sisäänkirjottautuessa
login shellille.
/etc/skel/ hakemistossa on tiedostot jotka on tarkotus kopioida
käyttäjän kotihakemistoon kun uusi käyttäjä luodaan
/etc/termcap tiedostossa listataan erityyppisten terminaalien ominaisuudet.
Esimerkki /etc/nsswitch.conf tiedostosta:
siis esimerkiksi salasanaa haetaan ensin tiedostosta, sitten käytetään
NIS+ palvelua ja viimeisenä NIS palvelua.
Kenttä [NOTFOUND=return] tarkoittaa että palvelun etsiminen lopetetaan
jos edellisessä kentässä määritelty tapa ei palauta mitään.
On kuitenkin huomattava, että jos edellisessä haussa tulee virhetilanne
(esim. NIS palvelin ei vastaa) jatketaan seuraavan kentän osoittamalla tavalla.
Linux-järjestelmän käynnistyessä ladataan aluksi ydin (kernel)
muistiin. Kun ydin on käynnistetty ja kaikki
tarvittavat laiteajurit ladattu jne. käynnistyy ensimmäinen
käyttäjätason prosessi eli init prosessi. Koska
init on ensimmäinen prosessi on sen PID (process ID) aina yksi.
Init prosessin käynnistyessä se hoitaa aluksi joitain ylläpidollisia
tehtäviä kuten tiedostojärjestelmän tarkistuksen, /tmp hakemiston
siivouksen, muutamien palvelujen käynnistyksen ja init myös käynnistää
jonkinlaisen login-prosessin (useimmiten getty) jokaiselle
terminaalille eli fyysiselle päätteelle ja virtuaalikonsolille
joilta käyttäjät voivat kirjoittautua sisään järjestelmään.
Järjestelmän toimiessa normaalisti käynnistää init aina
getty prosessin uudestaan terminaalille, jolta käyttäjä on kirjoittautunut
ulos. Init prosessin tehtävä on myös huolehtia niistä
prosesseista joiden vanhempi prosessi on kuollut ennenaikojaan.
Init prosessin käynnistyessä se lukee /etc/inittab
konfiguraatiotiedoston. Järjestelmän olessa käynnissä
init prosessi lukee /etc/inittab tiedoston uudestaan
jos se vastaanottaa HUP signaalin (esim. kill -HUP 1).
Itseasiassa sama toimenpide (kill -HUP daemon_pid)
toimii muillekin daemoni prosesseille
kun niiden konfigurointitiedostoa muutetaan.
/etc/inittab tiedosto koostuu riveistä joissa on
neljä kaksoispisteellä erottua kenttää:
(Tyhjät rivit ja '#'-merkillä alkavat rivit jätetään huomiotta.)
id:runlevels:action:prosess
id
runlevels
action
process
Esimerkiksi rivi
tarkoittaa, että käyttötasoilla 1, 2, 3, 4 ja 5 käynnistetään
/sbin/mingetty-prosessi terminaalille tty1 aina uudestaan
kun edellinen on kuollut.
Käyttötaso on init prosessin ja koko järjestelmän taso, joka
määrittää mitä palveluita on käytössä.
Käyttötasot
1.1.1 Juurihakemiston / osat
Komennot joita tarvitaan järjestelmän käynnistyksessä ja jotka
on tarkoitettu tavallisille käyttäjille.
Samoin kuin /bin mutta komentoja ei ole tarkoitettu tavallisille
käyttäjille. Komentojen käyttö voidaan sallia myös tavallisille
käyttäjille.
Järjestelmäkohtaiset konfiguraatiotiedostot
root käyttäjän kotihakemisto.
Juurihakemiston ohjelmien tarvitsemat jaetut kirjastotiedostot.
Ytimen ladattavat modulit.
Hakemisto /dev sisältää laitetiedostot kaikille eri laitteille.
Laitetiedostot luodaan järjestelmän asennuksen yhteydessä.
Myöhemmin niitä voidaan luoda /dev/MAKEDEV komentojonolla.
Tilapäistiedostot.
Järjestelmän käynnistäjän (bootstrap loader), esimerkiksi LILO, tarvitsemat
tiedostot. Ytimen kuva (tavallisesti vmlinuz)
pidetään yleensä /boot hakemistossa.
Tilapäiset "mount" hakemistot.
/proc tiedostojärjestelmä sisältää kuvitteellisen hakemistojärjestelmän
joka ei sijaitsee levyllä vaan ydin luo sen keskusmuistiin.
Sen tarkoituksena on antaa tietoa järjestelmän toiminnasta.
/usr, /var, /home hakemistot ovat eri tiedostojärjestelmien
"mount" hakemistoja.
1.1.2 /etc hakemisto
passwd: files nisplus nis
shadow: files nisplus nis
group: files nisplus nis
hosts: files nisplus nis dns
services: nisplus [NOTFOUND=return] files
networks: nisplus [NOTFOUND=return] files
protocols: nisplus [NOTFOUND=return] files
rpc: nisplus [NOTFOUND=return] files
1.2 Init prosessi
1.2.1 /etc/inittab tiedosto
Yksilöi rivin tiedostossa. getty riveille se kertoo terminaalin
jolla getty prosessi odottaa. Muille riveille id:n pitää
olla yksilöllinen (huomioi pituusrajoitus: 1-4 merkkiä).
Lista käyttötasoista, joilla annettu tapahtuma suoritetaan.
Kertoo, miten haluttu tapahtuma (tai prosessi) suoritetaan.
Määrittää prosessin joka suoritetaan.
1:12345:respawn:/sbin/mingetty tty1
1.2.2 Käyttötasot (runlevel)
0 | halt |
1 | Yhden käyttäjän tila (järjestelmän ylläpito) |
2-5 | Normaalit käyttäjätilat |
6 | Uudelleen käynnistys (reboot) |
/etc/inittab tiedostossa käyttötasot määritellään seuraavasti:
l3:3:wait:/etc/rc.d/rc 3
Ensimmäinen kenttä kertoo varsinaisen käyttötason. Toinen kenttä kertoo että ko. riviä käytetään tasolla kolme. Kolmas kenttä tarkoittaa, että neljännen kentän komento suoritetaan välittömästi, kun kyseinen taso käynnistyy ja init odottaa komennon suoritusta. /etc/rc.d/rc komento suorittaa tarvittavat komennot joilla käynnistetään tai lopetetaan palvelut käyttötasolla kolme.
Init prosessin käynnistyessä se hakee /etc/inittab tiedostosta riviä joka määrittää järjestelmän oletuskäyttötason. Kyseinen rivi on muotoa:
id:runlevel:initdefault:
Järjestelmän toimiessa, käyttötasoa voidaan muuttaa komennolla telinit.
Lisätietoa: init(8), telinit(8) ,inittab(5)
/etc/rc.d/ hakemiston ja sen alihakemistojen komentojonoilla määrätään mitä palveluita käynnistetään tai lopetetaan järjestelmän käynnistyessä tai käyttötasoa muutettaessa.
/etc/rc.d/ hakemistossa on jokaista käyttötasoa vastaava
alihakemisto
/etc/rc.d/rcX.d (X on 0,1,2,3,4,5 tai 6).
Näissä alihakemistoissa määrätään mitä palveluja kullekin
käyttötasolle käynnistetään. Kyseiset alihakemistot
sisältävät symbolisia linkkejä varsinaisiin palvelujen käynnistyskomentojonoihin
jotka sijaitsevat tavallisesti /etc/rc.d/init.d/
hakemistossa.
Se käynnistetäänkö vai lopetetaanko palvelu kyseiselle
käyttötasolle riipuu symbolisen linkin nimestä seuraavasti: Mikäli nimi
alkaa isolla s (S) kirjaimella palvelu käynnistetään
kyseiselle käyttötasolle. Mikäli nimi taasen alkaa
isolla k (K) kirjaimella palvelu lopetetaan kyseiselle käyttötasolle.
Kirjaimen S tai K jälkeen tuleva numero linkin nimessä kertoo
palvelun käynnistys- tai lopetusprioriteetin.
Palvelujen käynnistystä, lopetusta ja uusien palvelujen lisäystä voidaan hallita chkconfig komentorivityökalulla.
Lisätietoa: chkconfig(8), ntsysv(8), tksysv(8), runlevel(8)
Linux järjestelmä (kernel) käsittelee käyttäjiä yksikäsitteisen
kokonaisluvun, UID:n (user ID) avulla. Käyttäjän todellinen
käyttäjätunnus ja muu tieto käyttäjästä sijaitsee tiedostossa
/etc/passwd.
Käyttäjän luomiseksi linux järjestelmään on lisättävä tarvittava tieto
/etc/passwd tiedostoon ja luotava käyttäjälle kotihakemisto.
Yleensä linuxin mukana tulee ohjelma jolla käyttäjä voidaan lisätä
järjestelmään, esimerkiksi useradd tai adduser
(lisätietoa adduser(8)).
Tieto järjestelmässä olevista käyttäjistä sijaitsee /etc/passwd tekstitiedostossa. Tiedostossa on jokaista käyttäjää kohden yksi rivi jossa on seitsemän kaksoispisteellä erotettua kenttää:
Käyttäjän luominen ilman edellämainittuja apuohjelmia tapahtuu seuraavalla tavalla:
chown -R user /home/user
chmod -R 700 /home/user
Oletuksena kryptattu käyttäjän salasana sijaitsee /etc/passwd tiedoston toisessa kentässä. Usean käyttäjän järjestelmässä tämä ei ole kuitenkaan suositeltavaa koska /etc/passwd tiedostoon on oltava lukuoikeus maailmalla. Tällöin kuka tahansa saa tietoonsa kryptatut salasanat. Parempi tapa on ottaa käyttöön /etc/shadow tiedosto johon kryptatut salasanat sijoitetaan. /etc/shadow tiedostossa jokaiselle käyttäjälle on oma rivinsä joka koostuu yhdeksästä kaksoispisteellä erotetusta kentästä. /etc/shadow tiedosto voidaan ottaa käyttöön pwconv ohjelmalla. Lisätietoa shadow(5) ja pwconv(8)
Järjestelmässä jossa on paljon käyttäjiä ja rajallinen määrä levytilaa on syytä määritellä käyttäjän käytössä oleva levytila (quota). Levytilan käyttömääritys voi olla joko käyttäjäkohtainen tai ryhmäkohtainen ja se on tehtävä jokaiselle partitiolle erikseen.
Quota määritellään tiedostossa quota.user ja quota.qroup joiden pitää olle sen tiedostojärjestelmän juurihakemistossa jolle ne määrittävät quotan.
Quotan voi ottaa käyttöön seuraavalla tavalla: (olettaen että järjestelmän ytimessä (kernel) on quota tuki mukana ja järjestelmästä löytyvät tarvittavat ohjelmat)
Tiedostoon /etc/fstab quota määritellään seuraavasti:
/dev/hda2 /home ext2 defaults,usrquota,grpquota 1 1
Luodaan tiedostot quota.user ja quota.qroup esim komennolla:
touch quota.user quota.group
ja koska edellä luotuihin tiedostoihin pitää olla maailmalla lukuoikeus on hyvä antaa myös komento
chmod 644 quota.*
Quota voidaan laittaa tämän jälkeen päälle komennolla
quotaon -a
Tämän jälkeen käyttäjien quotaa voidaan editoida komennolla edquota jolle annetaan parametrina käyttäjätunnus.
Esimerkiksi komento
edquota mjev
avaa editorin vi johon tulee seuraavanlainen teksti:
Quotas for user mjev: /dev/hda1: blocks in use: 0, limits (soft = 0, hard = 0) inodes in use: 0, limits (soft = 0, hard = 0)
Käyttäjälle voidaan nyt määrittää quota muuttamalla soft ja hard parametrien arvoja (arvo 0 tarkoittaa rajoittamatonta quotaa).
HT. Miten laitetaan tämän jälkeen sama quota muillekin käyttäjille?
Parametri soft määrittää suurimman levytilan joka on käyttäjän käytössä. Kun myös aikaraja (grace period) on määritelty soft toimii rajana jonka ylityksen jälkeen käyttäjää varoitetaan quotan ylityksestä.
NFS mountatuille hakemistoille nfsd kutsuu rcp.rquotad demonia palvelinkoneella joka ilmoittaa quotan.
Lisätietoja quota(8), quotactl (2), edquota (8), quotacheck (8), quotaon (8), repquota (8)
Järjestelmän ylläpidossa on monia sellaisia asioita jotka tulee suorittaa säännöllisesti esimerkiksi varmuuskopiointi, /tmp hakemiston tyhjennys jne. Säännöllisesti suoritettavia tehtäviä tehtäviä varten linux järjestelmästä löytyy cron-demoni. Cron demoni etsii /var/spool/cron hakemistosta crontab tiedostoja jotka on nimetty käyttäjätunnusten mukaan. Löydetyt crontab tiedostot ladataan muistiin. Cron demoni etsii myös /etc/crontab konfiguraatiotiedostoa.
Minuutin välein cron demoni tutkii pitääkö jokin crontab tiedostoissa
määritetty komentojono suorittaa.
Cron tutkii myös minuutin välein onko
/var/spool/cron hakemistossa
olevat crontab tiedostot muuttuneet ja lataa muuttuneet crontab tiedostot
uudestaan muistiin samoin tutkitaan myös /etc/crontab tiedosto.
Suoritetuista komentojonoista lähetetään sähköposti viesti
kyseisen crontab tiedoston omistajalle tai crontab tiedostossa
määriteltyyn MAILTO muuttujan osoittamaan osoitteeseen.
crontab tiedostolla kerrotaan cron demonille milloin haluttu komento suoritetaan. crontab tiedosto koostuu ympäristömuuttuja määrittelyistä ja itse crontab rivistä.
Esimerkki crontab tiedostosta:
# Käytetään /bin/sh komentotulkkia komentojen suoritukseen SHELL=/bin/sh # Viesti 'mjev' osoitteeseen MAILTO=mjev # Suoritetaan 'cron.job' jokapaivä 5 minuuttia yli puolenyön 5 0 * * * $HOME/cron.job
Aikamäärittely koostuu seuraavista kentistä: (vasemmalta oikealle)
Kenttä | Sallitut arvot |
minuutti | 0-59 |
tunti | 0-23 |
kuukaudenpäivä | 1-31 |
kuukausi | 1-12 |
viikonpäivä | 0-6 (0 = sunnuntai) |
Kuhunkin kenttään voidaan laittaa myös (*), joka tarkoittaa kaikkia kyseisen kentän arvoja.
Kun crontab tiedosto on kirjoitettu se voidaan laittaa suorituslistalle käyttäen crontab komentoa.
Esimerkki:
crontab cron.job
Tietty komento voidaan ajastaa suoritettavaksi myöhemmin at:ta käyttäen. At on tarkoittu komentojen kertaluontoiseen suorittamiseen. (cron:a käytetään komentojen toistuvaan suoritukseen.) Haluttu kommento voidaan kirjoittaa joko suoraan komentoriville tai se voidaan lukea tiedostosta.
at komento on seuraavaa muotoa:
at [-V] [-q queue] [-f file] [-mldbv] TIME
Halutun komennon suoritusaika voidaan antaa monella tapaa. Tarkemmat kuvaukset löytyy tiedostosta /usr/doc/atXXXXX/timespec.
Esimerkiksi komento:
at -f my_at.job teatime
Tiedostossa my_at.job olevat komennot suoritetaan teeaikaan (kello 16:00)
Lisätietoja cron(8), crontab(1), crontab(5), at(1)
Lähes jokaisesta Unix järjestelmästä löytyy ns. ßuper-server" joka luo palveluiden tarvitsemat portit ja kuuntelee niitä kaikkia yhtäaikaa käyttäen select() systeemikutsua. Kun johonkin porttiin tulee kutsu ßuper-server" huomaa tämän ja käynnistää palvelijan joka on tarkoittu huolehtimaan kyseisen portin palvelusta.
Yleisesti käytetty ßuper-server" on inetd Internet demoni. Inetd käynnistetään järjestelmän käynnistyksen yhteydessä ja se lukee /etc/inetd.conf tiedoston, jossa kerrotaan mitä palveluita tarjotaan. Ulkoisten pelvelijoiden lisäksi inetd tarjoaa muutaman triviaalin sisäisen palvelun (siis hoitaa palvelun tarjoamisen itse). Tällaisia palveluita ovat esimerkiksi "chargen" (merkin generointi) ja "daytime" (kellonaika).
/etc/inetd.conf tiedosto muodostuu riveistä, jokainen palvelu on omalla rivillään. Merkillä # alkavat rivit ovat kommentteja. Rivi muodostuu seuraavista kentistä:
service name (service name) socket-tyyppi (socket type) protokolla (protocol) wait/nowait[.max] user[.group] palvelin ohjelma (server program) palvelin ohjelman argumentit (server program arguments)
service name Määrittää palvelunnimen. Palvelunnimi yhdistetään portin numeroon etsimällä palvelu /etc/services tiedostosta.
socket type Määrittää socketin tyypin. Tyyppi on joko stream, dgram raw, rdm tai seqpacket.
protocol
Nimeää siirtoprotokollan jota palvelu käyttää.
Protokollan nimi on löydyttävä
/etc/protocols tiedostosta.
wait/nowait Arvoa wait käytetään vain dgram socketeille, muille tulee määritellä arvoksi nowait.
user Määrittää käyttäjätunnuksen jolla palvelun tarjoava prosessi suoritetaan.
server program Palvelun tarjoavan ohjelman koko polku ja nimi. Sisäiset palvelut merkitään avainsanalla internal
server program arguments Palvelin ohjelmalle tarkoitetut argumentit. Alkaen argumentista argv[0] eli komennon nimestä
Seuraavassa muutama esimerkkirivi /etc/inetd.conf tiedostosta:
# inetd.conf echo stream tcp nowait root internal echo dgram udp wait root internal discard stream tcp nowait root internal discard dgram udp wait root internal daytime stream tcp nowait root internal daytime dgram udp wait root internal ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd gopher stream tcp nowait root /usr/sbin/tcpd gn
Verkkoon liitetyn linux-järjestelmän verkkoturvallisuutta on helppo parantaa kommentoimalla /etc/inetd.conf tiedostosta kaikki ne palvelut joita ei tarvita. Käytännössä pelkkänä työasemana käytettävän linux koneen /etc/inetd.conf tiedostosta voi kommentoida kaikki rivit (paitsi ehkä auth rivi), varsinkin jos käytettävissä on ssh ja sshd.
Lisätietoa inetd(8), protocols(5), services(5)
Verkkopalveluiden tarjoaminen aiheuttaa järjestelmälle aina turvallisuusriskejä. Verkon kautta tapahtuvia hyökkäyksiä järjestelmää kohtaan voidaan valvoa erilaisilla sovelluksilla. Voi myöskin olla että, tietty palvelu halutaan tarjota vain tiettyyn osaan verkkoa. Inetd ei suoraan tarjoa tähan mahdollisuutta.
Yksi tapa valvoa ja rajoittaa palvelujen käyttöä on tcpd eli niinsanottu "tcp-wrapper (daemon wrapper)". Kun jonkun TCP palvelun käyttöä halutaan valvoa tai rajoittaa käynnistetään tpcd palvelun sijasta. Tcpd kirjaa pyynnön syslog demonille ja tarkistaa onko pyynnön esittäjällä lupa käyttää pyytämäänsä palvelua ja vain jos tämä onnistuu, tcpd käynnistää todellisen palvelinohjelman.
Esimerkiksi telnet demonin käyttöä voidaan valvoa
määrittämällä
/etc/inetd.conf tiedostossa rivi:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
Käyttörajoitukset määritellään tiedostostoissa /etc/hosts.deny ja
/etc/hosts.allow. Pyynnön saapuessa tcpd hakee tiedostoista
/etc/hosts.allow ja /etc/hosts.deny (tässä järjestyksessä)
sekä palvelun nimeä että kutsun esittänyttä clientosoitetta.
Pyyntö hyväksytään jos se täsmää /etc/hosts.allow tiedostossa
olevaan määritykseen riippumatta /etc/hosts.deny tiedoston sisällöstä.
Mikäli pyyntö täsmää
/etc/hosts.deny olevan määrityksen kanssa
palvelua ei tarjota. Mikäli täsmäävää määritystä ei löydy kummastakaan
tiedostosta palvelu tarjotaan.
Lisätietoa tcpd(8), hosts.deny(5), hosts.allow(5).
Lähiverkossa on yleensä useita koneita jotka hoitavat eri tehtäviä ja lähes jatkuvasti joudutaan ottamaan interaktiivinen yhteys toiseen verkon Unix koneeseen tai suorittamaan tiettyjä komentoja toisessa koneessa ei-interaktiivisesti. Perinteisesti tämä tapahtuu esimerkiksi telnet tai rlogin ohjelmilla tai muilla ns. r komennoilla. Nämä ohjelmat eivät kuitenkaan tarjoa minkäänlaista suojausta muodostaessaan yhteyden koneiden välille. Myöskin käyttäjän autentikoinnissa antama salasana välitetään verkossa koneiden välillä sellaisena kuin se on kirjoitettu. Mikäli verkon liikennettä on mahdollista 'kuunnella' saadaan helpohkosti selville käyttäjien salasanoja.
Edellämainittujen perinteisten telnet ja rlogin ohjelmien sijasta voidaan käyttää ssh ohjelmaa (secure shell). Ssh ohjelman käyttö vaatii että koneessa johon yhteys otetaan on toiminnassa sshd (ssh demoni).
Sshd toimii siten, että jokaisella koneella on oma RSA-avain, jota käytettään koneen yksilöimiseen. Kun asiakas ottaa yhteyden palvelimeen, palvelin lähettää oman tunnusavaimensa (host key) ja palvelimen julkisen salausavaimen takaisin asiakasohjelmalle. Asiakas vertaa saatua tunnusavainta omaan tiedostoonsa tarkistaen, ettei avain ole muuttunut. Tämän jälkeen asiakas generoi 256 bittisen satunnaisluvun. Generoitu satunnaisluku kryptataan sekä 'host key':llä että palvelimen julkisella salausavaimella ja lähetetään sen jälkeen palvelimelle (kryptattuna). Palvelin pystyy purkamaan kryptauksen käyttämällä omaa ei-julkista salausavaintaan sekä 'host key':tä ja saa tuloksena kyseisen satunnaisluvun. Tämän jälkeen molemmat osapuolet alkavat käyttää kyseistä istuntoavainta kaiken istuntoon liittyvän kommunikaation kryptaamiseen.
Tämän jälkeen asiakas ja palvelin suorittavat istunnon autentikoinnin. Aluksi asiakas yrittää tehdä .rhosts autentikoinnin. Tätä tapaa ei luitenkaan suositella käytettäväksi siihen riittyvien riskien vuoksi. Toisena asiakas yrittää tehdä autentikoinnin joka perustuu yhdistettyyn .rhosts ja RSA autentikointiin. Kolmas tapa perustuu niinsanottuun julkiseen avaimeen. Neljäs tapa on käyttää TIS-autentikointi palvelinta. Mikäli kaikki muut tavat suorittaa autentikointi epäonnistuvat suoritetaan salasana-autentikointi. Tämä on kuitenkin turvallinen tapa koska verkossa liikkuva salasana kryptataan edellä mainitulla keinolla.
Lisätietoa ssh(8), sshd(8), ssh-keygen(1), ssh-agent(1), ssh-add(1), scp(1), make-ssh-known-hosts(1), rlogin(1), telnet(1)
Ftp (file transfer protocol) on tarkoitettu tiedostojen siirtoon verkossa olevien koneiden välillä. Esimerkiksi Linux järjestelmä voidaan asentaa koneelle ftp:tä käyttäen, jolloin asennukseen tarvitaan vain kaksi asennuslevykettä ja kiinteä verkkoyhteys. Asennus voidaan tehdä miltä ftp-palvelimelta vain (palvelimen ei siis tarvitse sijaita omassa lähiverkossa).
Lähes jokaisessa Unix-koneessa on vakiona ftp ohjelma (client) jolla tiedostoja voidaan siirtää. Mikäli halutaan että oman järjestelmän tiedostot ovat saatavissa ftp:llä on järjestelmään asennettava ftpd (ftp demoni). ftpd palvelu toimii inetd ja tcpd palveluiden kanssa.
Ftpd autentikoi käyttäjän neljän säännön mukaan:
Viimeisessä tapauksessa ftpd rajoittaa käyttäjän
oikeuksia suorittamalla
chroot komennon "ftp" käyttäjän
kotihakemistossa.
Jottei järjestelmän turvallisuutta vaaranneta on "ftp" käyttäjän
kotihakemiston rakentamiseen syytä kiinnittää erityistä huomiota.
Ainakin seuraavat seikat kannattaa tarkistaa:
Lisätietoja ftp(1), ftpd(8), ftpaccess(5), chroot(5)
Varmaankin suosituin linuxin käyttökohde on yhdessä Apache httpd-palvelijan kanssa WWW-palvelimena. Tämän yhdistelmän suosio perustuu siihen että molemmat, sekä Linux että Apache, ovat ilmaisia.
Httpd palvelimen toiminta määritellään konfiguraatiotiedostoissa, jotka sijaitsevat normaalisti palvelimen juurihakemiston (ServerRoot) alihakemistossa conf. Konfiguraatiotiedostot ovat
conf/httpd.conf conf/srm.conf conf/access.conf conf/mime.types
httpd.conf tiedostossa määritellään httpd palvelimen toiminta.
srm.conf tiedostossa määritellään asiakkaille tarjottavien dokumenttien spesifikaatiot.
access.conf tiedostossa määritellään mitä dokumentteja asiakkailla on oikeus saada ja mistä nämä dokumentit löytyvät.
mime.types tiedostossa voidaan määritellä dokumenttien mime tyypit.
Lisätietoa httpd(8), http://www.apache.org/
NFS on RCP:tä käyttävä palvelu, jonka avulla voidaan tarjota pääsy verkossa olevan järjestelmän tiedostoihin aivan kuin tiedostot sijaisisivat koneen lokaalilla levyllä.
NFS:n tarjoamia etuja ovat muunmuassa:
NFS hakemiston mounttaus tapahtuu samaan tapaan kuin minkä tahansa fyysisen laitteen. mount komennon syntaksi on seuraavanlainen:
mount -t nfs remote_host:/remote_dir local_dir
Tällöin mount yrittää kutsua mountd:a (mount demoni) remote_host koneessa RPC:tä käyttäen. Palvelin tarkistaa onko paikallisella koneella lupa mountata haluttu hakemisto. Mikäli hakemiston mounttaus onnistuu, palautetaan sen tiedostokuvaaja (file handle).
Kun tiedostoja käytetään NFS:n yli ydin (kernel) lähettää RPC kutsun nfsd:lle (NFS daemon) palvelin koneessa. Kutsu ottaa tiedosto kuvaajan, halutun tiedoston nimen ja käyttäjän UID:n sekä GID:n. Näiden avulla selvitetään käyttäjän oikeudet haluttuun tiedostoon. Koska käyttöoikeudet haluttuun tiedostoon tarkistetaan pelkästään numeeristen UID:n ja GID:n avulla on UID:n ja GID:n oltava samat molemmissa koneissa.
Ennenkuin NFS:ää voidaan käyttää on varmistettava että ydin (kernel) tukee NFS:ää. Uudemmissa järjestelmissä tämä voidaan tarkistaa esimerkiksi kommennolla
$ cat /proc/filesystems ext2 msdos nodev proc nodev nfs
Mikäli nfs puuttuu listasta on ydin (kernel) rakennettava uudestaan.
Mikäli halutaan että järjestelmä tarjoaa NFS palvelun muille koneille on järjestelmässä käynnistettävä nfsd ja mountd. RPC-pohjaisina niitä ei voi hallita inetd kautta. NFS- ja mount-palvelimet on käynnistettävä järjestelmän käynnistyksessä sen jälkeen kun portmap-demoni on käynnistetty.
Sen mitä hakemistoja nfsd tarjoaa mountattavaksi määritellään
/etc/exports tiedostossa. Oletuksena nfsd ei salli
minkään hakemiston mountausta.
/etc/exports tiedoston muoto on seuraava:
/dir hosts(options)
Esimerkki /etc/exports tiedostosta
/ jane.math.jyu.fi(ro,no_root_squash) /cdrom *.jyu.fi(ro) *.*.jyu.fi(ro) *.*.*.jyu.fi(ro) /spirs/1 *.math.jyu.fi(ro) *.math.public.jyu.fi(ro) *.it.jyu.fi(ro)
Lisätietoa nfs(5), exports(5) nfsd(8)
Isommissa verkkojärjestelmissä tulee usein vastaan tilanteita joissa eri koneiden hakemistoja käytetään ristiin toisissa koneissa NFS:n yli. Muutamat koneet saattavat olla kuitenkin osan aikaa poissa käytöstä, joten pysyvien NFS mounttien hallinta on työlästä. Asia voidaan hoitaa käyttämällä automount järjestelmää. Automount järjestelmässä tietyn hakemiston mounttaus hoidetaan automaattisesti kun hakemistossa olevia tiedostoja tarvitaan. Hakemiston mounttaus hoidetaan automount demonilla. Myöskin hakemistojen umounttaus tehdään automaattisesti mikäli hakemistossa olevia tiedostoja ei ole tarvittu tietyn ajan kuluessa. Linuxsissa on käytössä (ainakin) kaksi erilaista mahdollisuutta toteuttaa hakemistojen automaattinen mounttaus: AMD ja autofs.
AMD (automount daemon) toimii samaan tapaan kuin SunOS:n AMD ja se on toteutettu "käyttäjätilassa" eli se ei ole ydin (kernel) pohjainen järjestelmä. Ytimen ei välttämättä tarvitse olla tietoinen automounttauksesta jos hakemisto mountataan NFS:n yli käyttäen AMD demonia.
Toinen tapa hoitaa hakemistojen automaattinen mounttaus on autofs. Autofs systeemissä ydin tietää missä automount hakemistot ovat ja automount-ohjelma hoitaa hakemistojen mouttauksen.
Mikäli halutaan käyttää autofs systeemiä on ytimessä oltava tuki mukaan otettuna. (autofs tuen pitäisi olla vakaa ytimissä joiden versio numero on suurempi kuin 2.2.xx)
Autofs systeemi tarvitsee myös automount-ohjelman ja
konfiguraatiotiedostot
/etc/auto.master ja esim.
/etc/auto.misc.
Esimerkki /etc/auto.master tiedostosta:
/tmp_mnt /etc/auto.misc --timeout 60
Ensimmäinen kenttä kertoo mihin toisen kentän osoittamat mount hakemistot sijoitetaan (ensimmäinen kenttä ei siis ole kokonainen mount hakemisto). Kolmas kenttä kertoo että tiedostojärjestelmät yrittävät umountata itsensä 60 sekunnin kuluttua, jos ne eivät ole käytössä.
Esimerkki /etc/auto.misc tiedostosta:
sources -ro,soft,intr ftp.math.jyu.fi:/ftp/pub/linux cd -fstype=iso9660,ro :dev/cdrom zip -fstype=auto :dev/hdd4 floppy -fstype=vfat :dev/fd0
Ensimmäinen kenttä kertoo mount hakemiston. Tässä tapauksessa se olisi /tpm_mnt/cd jne. Toinen kenttä määrittää optiot. Kolmas kenttä määrittää mikä tiedostojärjestelmä mountataan. 'sources' on NFS mount ja : muissa tarkoittaa, että kyseessä on paikallinen laite.
Yksi järjestelmäylläpitäjän tärkeimmistä tehtävistä on tietojärjestelmien tiedostojen varmuuskopiointi. Varmuuskopiointi tulee suunnitella huolella. Suunnittelussa kannattaa kiinnittää huomioita ainakin minkälaiselle laitteelle varmuuskopiot tehdään, mitä työkalua käytetään, mitä tiedostoja halutaan varmistaa jne.
Varmuuskopiontimedian valintaan vaikuttaa ainakin sen luotettavuus, hinta, nopeus, saatavuus ja käytettävyys. Median luotettavuus on tärkeimpiä kriteereitä, koska rikkoutunut varmuuskopio on hyödytön. Usein varmuuskopioiden tulee myös säilyä useita vuosia. Mikäli varmuuskopiointi voidaan tehdä silloin kun koneen kuormitus muuten on vähäistä (esimerkiksi yöllä) ei varmuuskopiointisysteemin nopeudella ole niin suurta merkitystä. Varsinkin kun varmuuskopiointi hoidetaan yleensä siten ettei käyttäjän tarvitse sitä valvoa. Käyttettävyys on myöskin tärkeää varsinkon jos varmuuskopiointi suoritetaan usein. Myöskin tiedon palautuksen kannalta vaivaton käytettävyys on tärkeä.
Työkaluja varmuuskopioiden tekoon on useita. Perinteisesti käytetyjä ovat: tar, cpio ja dump. Myös paljon muita sekä kaupallisia että ilmaisia työkaluja on tarjolla.
tar ja cpio ovat käyttäjän kannalta lähes samanlaisia. Molemmilla voidaan kirjoittaa ja lukea tiedostoja nauhalta. Myöskin nykyisin linuxissa käytössä olevat tar ja cpio versiot kykenevät lukemaan erikoistiedostot oikein (esim laitetiedostot, symboliset linkit, pitkät tiedostonimet jne.)
Yksinkertaisin tapa varmuuskopiointiin on tehdä ensin täydellinen varmuuskopio (full backup) järjestelmästä (tai halutusta osasta järjestelmää) ja sen jälkeen varmuuskopioidaan vain muuttuneet tiedostot (incremental backup).
Esimerkiksi GNU tar ohjelmaa käyttäen tämä voidaan tehdä seuraavasti:
tar -cvf /dev/tape /home
Varmuuskopioinnin onnistuminen voidaan tarkistaa seuraavasti:
tar --compare -vf /dev/tape
Tämän jälkeen muuttuneet tiedostot voidaan varmuuskopioida komennolla:
tar -c --newer='Apr 18 1999' -f /dev/tape /home
Edellä kuvattu varmuuskopiointi tapa soveltuu hyvin pieniin järjestelmiin ja esimerkiksi kotona käytettävän mikron varmuuskopioiden tekemiseen.
Suurien järjestelmien varmuuskopiointiin kannattaa käyttää kuitenkin monitasoisia varmuuskopioita (multilevel backups). Yksinkertaisin tapa on siis käyttää kahta tasoa: täysi varmuuskopio ja siihen verrattuna muuttuneet tiedostot. Tätä samaa systeemiä voidaan kuitenkin laajentaa miten moneen tasoon tahansa.
Aluksi tehdään täydellinen varmuuskopioi (0-taso) ja 1-tason varmuuskopioa tehtäessä verrataan muuttuneet tiedostot 0-tasoon ja 2-tason varmuuskopiossa verrataan 1-tasoon jne.
Usean tason varmuuskopioinnin tarkoituksena on, että se mahdollistaa pidemmän varmuuskopiohistorian 'halvemmalla'.
Monitasoinen varmuuskopiointi on sisäänrakennettu dump ohjelmaan. tar ja cpio ohjelmiin se on toteutettava komentojonojen avulla.
Lisätietoja tar(1), cpio(1L), dump(8)
Unix järjestelmässä yleensä kaikki järjestelmän mukana tulleet ohjelmat sisältävät käyttöohjeen. Nämä käyttöohjeet on toteutettu ns. man-sivuina. Man sivuja voi selata man ohjelman avulla. Parametrinä ohjelmalle annetaan ohjelma jonka ohjeita halutaan. man ohjelma lukee oletuksena konfiguraatiotiedoston /etc/man.config. Tiedostossa määritellään mm. mistä hakemistoista man-sivuja oletuksena haetaan. Lisätietoa man(1)