6 Sisse- ja väljalogimine

See peatükk kirjeldab kasutaja sisse- või väljalogimisel toimuvat. Selgitatakse mitmete taustprotsesside interaktsioonide, logifailide ja konfigureerimisfailide teatud üksikasju.

6.1 Sisselogimine terminali kaudu

Joonis 6.1 näitab, kuidas toimub sisselogimine terminali kaudu. Kõigepealt teeb init kindlaks, kas on olemas programm getty terminaliühenduse või puldi jaoks. Getty jälgib terminali ja ootab, et kasutaja annaks märku oma valmisolekust sisse logida (see tähendab harilikult, et kasutaja peab klaviatuurilt midagi sisestama). Pärast kasutaja avastamist väljastab getty tervitusteate (salvestatud faili /etc/issue), nõuab kasutajanime ja lõpuks käivitab programmi login. Login saab parameetrina kasutajanime ja viipab kasutajalt parooli. Kui nimi ja parool sobivad, käivitab login kasutaja jaoks konfigureeritud kesta, vastasel juhul aga lihtsalt lõpetab protsessi (või pakub kasutajale siiski uue võimaluse kasutajanime ja parooli sissetamiseks). Programm init märkab protsessi lõppemist ja käivitab terminali jaoks uue getty. Pange tähele, et ainsa uue protsessi tekitas init (kasutades süsteemipöördust fork); getty ja login ainult asendavad protsessis jooksvat programmi (kasutades süsteemipöördust exec).


Joonis 6.1  Terminali kaudu sisselogimine — init, getty, login ja kesta interaktsioon

Jadaliinide puhul on vajalik eraldi programm kasutaja avastamiseks, kuna terminali aktiivsuse jälgimine võib olla (ja traditsiooniliselt on) keerukas. Getty kohaneb kiirusega ja ühenduse häälestusega, mis on eriti tähtis sissehelistamisega ühenduste puhul, kus parameetrid võivad kõnest kõnesse muutuda.

Kasutusel on programmide getty ja init mitu versiooni, kõigil oma head ja halvad küljed. Süsteemis olevate programmide versioone tuleks korralikult tundma õppida, aga ei sega ka teiste eksisteerivate versioonide teadmine (nende otsimiseks võite kasutada Linux Software Map'i). Kui sissehelistamisega ühendusi pole ette näha, ei tasu arvatavasti muretseda ka getty pärast (võimaluste poolest on parim mgetty), aga init on ikkagi oluline.

6.2 Sisselogimine võrgu kaudu

Kaks arvutit on samas võrgus tavaliselt ühendatud ühe füüsilise kaabliga. Kui nad suhtlevad läbi võrgu, siis arvutite programmid on ühendatud virtuaalühenduse kaudu, mida võiks ette kujutada mingit tüüpi kaablina. Seejuures omavad programmid virtuaalühenduse kummaski otsas monopoli oma kaablile. Kuna kaabel pole tegelik vaid kujuteldav, siis kummagi arvuti operatsioonisüsteemid võivad omada mitu virtuaalset ühendust üheskoos füüsilist kaablit kasutamas. Nii saavad mitmed programmid ainult üht kaablit kasutades samaaegselt suhelda, teadmata ja hoolimata teiste programmide suhtlusest. Isegi mitu arvutit võivad kasutada korraga ühte füüsilist kaablit — virtuaalühendused eksisteerivad kahe arvuti vahel ja teised arvutid ignoreerivad neisse mittepuutuvaid ühendusi.

See on keeruline ja tegelikkuse ületeoretiseeritud kirjeldus, aga toob siiski piisavalt esile tähtsa põhjuse, mille poolest võrgu sisselogimised erinevad tavalistest. Virtuaalühendused luuakse juhul, kui kaks programmi asuvad eri arvutites ja soovivad omavahel suhelda. Kuna põhimõtteliselt on võimalik sisse logida igast võrguarvutist igasse teise võrguarvutisse, leidub seal hiiglaslik arv potentsiaalseid virtuaalühendusi. Seetõttu pole praktiline käivitada programmi getty iga potentsiaalse sisselogimise jaoks.

Protsess inetd (vastab getty'le) töötleb kõiki võrgu sisselogimisi. Sissetuleva võrgulogimise avastamisel (st uue virtuaalühenduse avastamisel mõnda teise arvutisse) käivitab inetd selle konkreetse logimise töötlemiseks uue protsessi. Esialgne protsess säilib ja jätkab uute sisselogimiskatsete otsimist.

Tegelikult on olukord keerukam — eksisteerib rohkem kui üks sideprotokoll võrgulogimiste jaoks. Kaks tähtsaimat on telnet ja rlogin. Lisaks logimistele on olemas mitmeid teisi virtuaalühendusi (FTP, Gopher, HTTP ja muud võrguteenused). Eraldi protsessid konkreetset tüüpi ühenduste avastamiseks pole efektiivsed. Selle asemel kasutatakse üht jälgimisprotsessi (nimega inetd), mis suudab ära tunda ühenduse tüübi ja käivitada õige programmi.

6.3 Mida login teeb

Programm login hoolitseb kasutaja autentimise eest (st teeb kindlaks, et sisestatud kasutajanimi ja parool vastavad teineteisele) ja aktiveerib kasutaja esialgse keskkonna, häälestades kasutajale antud pääsuload ja käivitades ettenähtud kesta.

Esialgne häälestus väljastab faili /etc/motd/ sisu (lühike tervitusteade) ja kontrollib elektronposti (kas on lisandunud uusi sõnumeid). Need teated võib kõrvaldada, luues kasutaja kodukataloogi faili nimega .hushlogin.

Kui eksisteerib fail /etc/nologin, siis sisselogimine on blokeeritud. Selle faili loob reeglina shutdown või mõni teine analoogiline programm. Login kontrollib seda faili ja keeldub sisselogimisest, väljastades lisaks faili sisu terminalile.

Programm login salvestab kõik ebaõnnestunud sisselogimiskatsed süsteemi logifaili (programmi syslog abil). Peale selle salvestab ta ka kõik juure sisselogimised. Mõlemad failid võivad osutuda vägagi kasulikeks ebaseaduslike sissetungijate jälitamisel.

Hetkel sisselogitud kasutajad on kirjas failis /var/run/utmp. See fail eksisteerib ainult süsteemi järgmise taaskäivituseni või sulgemiseni (süsteemi alglaadimisel ta puhastatakse). Failis /var/run/utmp loetletakse kõik kasutajanimed koos kasutatava terminali (või võrguühenduse) nimega pluss teatud vajalik lisateave. Käsud who, w ja muud vaatavad failist utmp, kes on end parajasti arvutisse sisse loginud.

Kõik edukad sisselogimised salvestatakse faili /var/log/wtmp. See fail kasvab piiramatult ning teda peab regulaarselt tühjendama, näiteks iga nädal programmi cron kaasabil. Käsk last avab faili wtmp ja võimaldab jälgida arvutite kasutamist.

Mõlemad failid, nii utmp kui ka wtmp, on kahendvormingus ja kahjuks neid ilma spetsiaalsete programmideta uurida ei õnnestu.

6.4 Pääsukontroll

Kasutajate andmebaas paikneb traditsiooniliselt failis /etc/passwd. Mõned süsteemid kasutavad variparoole ja on tõstnud paroolid ka faili /etc/shadow. Mitme arvutiga ühiskasutussüsteemid rakendavad kasutajate andmebaasi salvestamiseks NIS-i või mõnda teist vahendit. Nad võivad ka andmebaasi automaatselt ühest kesksest asukohast kõigisse teistesse arvutitesse kopeerida.

Kasutajate andmebaas sisaldab peale paroolide veel teatud lisainformatsiooni kasutajate kohta: nende pärisnimed, kodukataloogid ja sisselogimiskestad. Mainitud lisateave peab olema tavaliselt avalik, et kõik saaksid seda vajaduse korral lugeda. Seetõttu on parool salvestatud krüpteeritult. Niisugusel meetodil on aga üks väga halb omadus: kõik, kellel on juurdepääs krüpteeritud paroolidele, saavad kasutada mitmeid dekrüptimismeetodeid ilma tegelikult arvutisse sisselogimata. Variparoolide abil üritatakse seda vältida — paroolid tõstetakse teise faili, mida saab lugeda ainult juur (parool on ikkagi salvestatud krüpteeritult). Variparoolide installeerimine võib olla keeruline, sest süsteem neid reeglina ei toeta.

Tihti antakse Linuxi tarnekomplektiga kaasa kõik vajalikud vahendid variparoolidele üleminekuks ja nende kasutamiseks. Variparoolid ei ole esialgselt kasutuses mõningate autorikaitseküsimuste ebaselguse tõttu, ise aga võib neid rakendada. Loodetavasti lahendatakse see probleem tulevikus. Programmid üleminekuks ühelt süsteemilt teisele ja tagasi on pwconv ja pwunconv, mis loovad failid nimedega upasswd ja ushadow. Endal tuleb hoolitseda selle eest, et teha originaalfailidest varukoopiad (juhuks kui miski ebaõnnestub), panna uued failinimed /etc/passwd ja /etc/shadow ning võtta ära lugemisõigus kõigilt kodeeritud paroole sisaldavatelt failidelt (endise /etc/passwd koopia ja kui seda on redigeeritud, siis veel eri nimedega varukoopiad kataloogis /etc).

Variparoolidega või ilma, tähtis on veenduda, et kõik süsteemi paroolid oleksid turvalised (st nende murdmine ei tohi olla hõlbus). Paroolide väljamõtlemine kasutajale võib keerukaks osutuda, sest parooliks ei kõlba näiteks oma nimi, oma kassi nimi, lemmiktegevuse nimetus, sünniaeg või sünnipäev, aadress ja palju muud, mida saab lihtsalt seostada kindla isikuga. Kohustuslikult peaks parool sisaldama suur- ja väiketähti ning muid klaviatuurimärke ja olema ka piisava pikkusega (vähemalt 6 märki). Programmi crack saab kasutada paroolide kräkkimiseks või murdmiseks katseotstarbel: kõik paroolid, mille crack oma meetodite abil ära arvab, pole turvalised. Programm passwd sunnib samuti kasutama teatud kindlaid reegleid parooli sisestamisel (liiga lihtsat või lühikest ei õnnestu sisestada). See võimalus on tõhusam, kuna paroolide kräkkimine nõuab üsna palju arvutamist.

Kõik arvutikasutajad on soovitav jaotada gruppidesse ehk kasutajarühmadesse, sest siis ei pea andma õigusi ja lube igale kasutajale eraldi vaid üks kord kogu kasutajagrupile. Uue kasutaja lisandumisel ei tohi unustada teda lisamast ka vastava kasutajagrupi koosseisu. Kasutajagrupi andmebaasi hoitakse failis /etc/group (variparoolidega süsteemides võib see olla /etc/shadow.group).

Juur ei saa reeglina enamikest terminalidest ja võrgust otse sisse logida, vaid ainult läbi nende terminalide, mis on kirjas failis /etc/securetty. See nõuab füüsilist juurdepääsu ühele neist terminalidest. Siiski on võimalik sisse logida läbi suvalise terminali tavalise kasutajana ning käsu su abil juureks hakata.

6.5 Kesta käivitamine

Kui interaktiivse sisselogimise kest käivitub, siis aktiveerib ta automaatselt ühe või mitu eelmääratletud faili. Erinevad kestad aktiveerivad eri faile.

Enamik kesti käivitab kõigepealt mingi üldfaili (näiteks Bourne, /bin/sh) ja tema tuletised käivitavad faili /etc/profile. Seejärel aktiveeritakse fail .profile kasutaja kodukataloogist. Fail /etc/profile lubab süsteemiülemal seada üldise kasutajakeskkonna, häälestades spetsiaalselt PATH-i koosseisu lisaks süsteemikataloogidele ka kohalikke käsukatalooge. Teisest küljest lubab .profile kasutajal kohandada keskkonda oma suva järgi, muutes vajaduse korral esialgset varianti.