Toiset tehtävät – loki, SSH-demoni ja lisää ohjelmien asennusta

Tehtävä 1

Tämän viikon ensimmäisenä tehtävänä on aiheuttaa lokiin kaksi eri tapahtumaa, joista toisen pitäisi olla onnistunut ja toisen joko epäonnistunut tai kielletty. Onnistuneen tapahtuman kandidaatiksi mieleeni tuli ensimmäiseksi normaali uusien päivitysten hakeminen apt-getin avulla, sillä virtuaalikoneeni ilmoitti saatavilla olevista päivityksistä kun kirjauduin sisään.

Kirjoitinkin siis terminaaliin komennon sudo apt-get update, ja salasanan syöttämisen jälkeen päivitykset asentuivat normaalisti. Lähdin seuraavaksi etsimään tekemistäni päivityksistä lokiin kirjattuja tietoja hakemistosta /var/log. Syslog-niminen tiedosto vaikutti lupaavimmalta, joten tutkin sen sisältöä komennolla less syslog ja menin lokitiedoston loppuun painamalla shift + g. En kuitenkaan ensisilmäyksellä löytänyt mitään päivityksiin viittaavaa, joten koitin vielä hakea relevantteja mainitoja komennolla grep -i update syslog. Sain vain seuraavanlaisen tuloksen:

Jan 27 19:28:11 helkera-VirtualBox anacron[6311]: Updated timestamp for job `cron.weekly' to 2019-01-27

Tämä ei kuitenkaan kuulostanut etsimältäni tiedolta, joten palasin tutkimaan, millaisia muita kansioita /var/log -hakemistosta löytyy ja kiinnitin huomiota kansioon nimeltä apt. Koska päivitykset tehdään APT:illa eli Automatic Packaging Toolilla, tuntui järkevältä, että päivityksiin liittyvät lokit saattaisivat sittenkin löytyä kyseisestä hakemistosta. Avattuani history.log -tiedoston löysin kyllä useampia mainintoja tänään tehdyistä päivityksistä, mutta lokissa mainitut ajat eivät täsmänneet vaan heittivät muutamalla tunnilla alaspäin.

Päivityksiä tehdessäni tunnistin päivitettävien ohjelmien nimet, mutta tässä lokitiedostossa mainitut nimet ovat minulle vieraita. Olettaisinkin siis, että päivittämäni ohjelmat kuuluvat lokin listaamiin paketteihin. En tosin osaa sanoa, mistä virheelliset ajat saattavat johtua. Muuten olisin valmis sanomaan, että aika-asetuksissa on jotain vikaa, mutta kohta vastaan tulevassa auth.logissa ajat taas jostain syystä täsmäävät.

Seuraavaksi vuorossa on epäonnistuneen tai kielletyn toimenpiteen tekeminen. Ensimmäiseksi mieleeni tuli, että voisin yrittää tehdä jotakin korotettuja käyttöoikeuksia vaativaa toimenpidettä ilman sudo-komentoa. Yritinkin asentaa Gimp-kuvankäsittelyohjelman ilman korotettuja käyttöoikeuksia, mikä ei oletetusti onnistunut.

Tämän jälkeen piti taas selvittää, minne kyseiseen tapahtumaan liittyvät lokitiedot oikein tallentuivat. En löytänyt syslog-tiedostosta mitään selkeästi aiheeseen liittyvää, joten päättelin, että nämäkin lokitiedot saattaisivat olla tallentuneet eri paikkaan samaan tapaan kuin edelliset päivityksiin liittyvät tiedot. Tämän artikkelin avulla päättelin, että koska tekemäni toimenpide liittyi käyttäjän autentikointiin, tietojen tulisi luultavasti löytyä auth.log -tiedostosta. Löysinkin muutaman lokirivin, jotka vaikuttivat vastaavan tekemääni operaatiota. Ne eivät kuitenkaan olleet erityisen informatiivisia, joten päätin tehdä toisen testin siinä toivossa, että lokiin tulostuisi jotain hieman yksityiskohtaisempaa. Yritin siis Gimpin asennusta uudestaan, mutta tällä kertaa käytin sudo-komentoa ja annoin virheellisen salasanan. Ja toden totta, lokiin ilmestyi uutta tietoa, jossa tällä kertaa mainittiin ”authentication failure”. Seuraavassa kuvassa ensimmäiset kaksi korostettua tapahtumaa liittyvät oletettavasti ensimmäiseen yritykseeni ja viimeisin korostettu rivi taas puolestaan virheelliseen salasanaan:

Kahdesta ensimmäisestä tapahtumasta ei mielestäni käy edes selkeästi ilmi, että olisi tapahtunut jonkinlainen ei-sallittu toiminto. Mutta aikaleimoja katsomalla näkyy ainakin, että root-käyttäjän sessio, joka oletettavasti liittyy asennukseen, suljetaan samalla sekunnilla kuin se avataan. En kyllä ole varma, minkä takia root-sessiota ylipäätäänsä yritetään avata kun en missään vaiheessa syöttänyt sudo-komentoa. Ehkä install-komento olettaa, että käyttäjä on syöttänyt sudo-tunnukset ja asennus loppuu heti, kun havaitaan, ettei näin ole?

Väärään salasanaan liittyvä autentikointivirhe on onneksi hieman yksiselitteisempi. Lokissa todetaan, ettei autentikointi onnistunut, ja ohessa on tiedot mm. siitä, mistä käyttäjästä on kyse. Pam_unix on moduuli, joka huolehtii salasanojen autentikoinnista. On vähän erikoista, että logname, eli sisäänkirjautuneen käyttäjän nimi on tyhjä. Uid on käyttäjälle annettava tunnistenumero. Minulla ilmeisesti helkera-tunnuksen uid on 1000 kun taas root-käyttäjän uid on yleensä 0, kuten ylemmillä riveillä näkyy. Euid ilmeisesti tulee sanoista effective user id, ja vaihtuu prosessien mukaan. Tty=/dev/pts/1 taas liittyy käytettävään terminaaliemulaattoriin. En ole varma, mistä userin ja hostin alussa olevat r-kirjaimet juontavat juurensa, ja tällä kertaa edes Googlesta ei tunnu löytyvän suoraa mainintaa asiasta.

Tehtävä 2

Seuraavana on vuorossa ns. SSH-demonin asennus. Demoni on nimenä sen verran hauska, että halusin ottaa selvää sen etymologiasta. Ilmeisesti termi juontaa juurensa ns. Maxwellin demonista, eli termodynamiikkaan liittyvästä ajatuskokeesta, jossa kuvitellaan, että demoni erottelee nopeita ja hitaita molekyylejä toisistaan. Tämän lisäksi kreikkalaisessa mytologiassa demoni on nähty taka-alalla toimivana hahmona, jolla ei ole erityistä preferenssiä hyvään tai pahaan. Demonilla tietotekniikassa tarkoitetaankin ohjelmaa, jota ajetaan taka-alalla, ja jota käyttäjä ei suoraan kontrolloi interaktiivisesti. (Lähde)

Ensitöikseni tein Google-haun hakusanoilla ”how to install ssh daemon on ubuntu 18.04” ja olin hieman pettynyt, kun tuloksissa ei puhuttukaan demoneista, vaan ihan vain servereistä. Lähdin kuitenkin ensimmäisen linkin takana olleita ohjeita seuraamalla yrittämään asennusta seuraavilla komennoilla:

$ sudo apt install tasksel

$ sudo tasksel install openssh-server

Asennuksen jälkeen annoin komennon

$ service ssh status

ja saatuani ohjeiden mukaiset tulosteet, päätin kokeilla opettajan ehdottamia komentoja.

Komennot ssh-copy-id, sshfs, scp ja git tarjosivat erilaisia käyttövinkkejä, mutta en ollut varma, mitä osaisin tai haluaisin yrittää. Tehtävään opettajamme on kirjoittanut vinkiksi ” Helpoin lienee scp: ‘scp foo.txt tero@example.com:’”, joten aloin miettiä, mihin kyseistä komentoa saatettaisiin käyttää. Tiesin, että scp on lyhenne sanoista secure copy, eli ilmeisesti tarkoituksena olisi siirtää vapaavalintainen tiedosto virtuaali-Xubuntultani jollekin muulle palvelimelle. Ensimmäisenä mieleeni tuli oma koulun myy-asemani, mutta en oikein ymmärtänyt, kuinka tiedonsiirto sinne onnistuisi. Sain kuitenkin vinkin Lauri Niiniskorvelta, minkä ansiosta sain siirrettyä tekstitiedoston palvelimelle kuvan osoittamalla tavalla. Siirron jälkeen otin terminaalin kautta myös SSH-yhteyden palvelimelle varmistaakseni, että siirtämäni tiedosto pääsi määränpäähänsä. Lopuksi annoin vielä komennon exit, jolloin palasin takaisin omalle virtuaalikoneelleni.

Tehtävä 3

Tämän viikon kolmas tehtävänanto on seuraavanlainen: ”Tee unelmien apt-get -komento: yksi komentorivi, joka asentaa suosikkiohjelmasi.”

En ole täysin varma, tarkoitetaanko tällä, että asennetaan yksi ohjelma, jonka install-komentoon sisällytetään ”yes”, joka normaalisti pitää syöttää asennuksen keskivaiheessa, vai että asennetaan useita eri ohjelmia samalla install-komennolla. Mikään ei tosin estä minua toteuttamasta molempia tulkintoja samassa apt-get -komennossa. Annoin siis komennon

$ sudo apt-get install gimp rhythmbox -y

, joka asensi kerralla sekä Gimp-kuvankäsittelyohjelman että Rhythmbox-musiikinkuunteluohjelman ilman että minua pyydettiin asennuksen aikana hyväksymään tietyt toimenpiteet.

Seuraavaksi testasin asentamiani ohjelmia, ja kumpikin vaikutti toimivan oletetulla tavalla, joskin VirtualBoxin ääni pätkii edelleen. Gimpin käyttäminen puolestaan oli näin Photoshopiin tottuneelle kyllä yllättävän vaikeaa!

Rhythmbox suoriutui myös korealaisista kirjaimista oikein hyvin.

Tehtävä 4

Seuraavaksi oli tarkoituksena asentaa vapaavalintaisia komentorivillä toimivia ohjelmia ja testata niitä. Pitkän googletuksen jälkeen valitsin kolme ohjelmaa, joista osa vaikutti hyödyllisiltä ja osa hieman vähemmän hyödyllisiltä, joskin epäilemättä kriittisen tärkeiltä!

Ohjelma 1 – Cowsay

Ensimmäiseksi asensin Cowsay:n komennolla

$ sudo apt-get install cowsay

, minkä jälkeen asensin myös fortunen komennolla

$ sudo apt-get install fortune

Näin jälkikäteen ajateltuna olisin voinut asentaa ohjelmat samalla komennolla, mutta tajusin vasta ensimmäisen asennuksen jälkeen, että saadakseni näiden ohjeiden esimerkkiä vastaavan tulosteen tarvitsisin myös fortunen. Mutta näiden askelten jälkeen kun kirjoitan terminaaliin komennon

$ fortune | cowsay

ruudulle tulostuu jotain maagista.

Lehmän voi myös halutessaan laittaa sanomaan, mitä itse haluaa, mutta tulevaisuusennusteita kertova lehmä miellyttää minua erityisesti.

Ohjelma 2 – ncmpcpp

Seuraavaksi ohjelmaksi valitsin erityisen tarttuvalla nimellä varustetun ohjelman, musiikinkuunteluun suunnitellun ncmpcpp:n. Tämän ohjelman asennus osoittautui hieman monimutkaisemmaksi kuin olisin odottanut, mutta löytämieni ohjeiden ja tämän Youtube-videon suosiollisella avustuksella sain hommat pyörimään.

Tiivistetysti sanottuna siis ensin asensin mpd:n (music player daemon!) komennolla

$ sudo apt-get install mpd

ja sen jälkeen asensin ncmpcpp:n (ilmeisesti lyhenne tulee sanoista NCurses Music Player Client Plus Plus) komennolla

$ sudo apt-get install ncmpcpp 

Tämän asennusprosessin jälkeen minun piti luoda kotihakemistooni kansiot .mpd ja .ncmpcpp. Molempien kansioiden sisälle luotiin config-tiedostot, joihin pastesin suoraan ohjeissa ehdotetun sisällön sillä erotuksella, että vaihdoin ncmpcpp:n config-tiedostoon musiikkikirjaston poluksi oman musiikkikansioni.

Ohjeissa neuvottiin myös lisäämään mpd-käyttäjätunnus sudo-komennolla, eikä minulla ollut pienintäkään aavistusta, miksi sellaista tarvittaisiin, saatikka sitten mistä sellaisin saisin. Päädyin siis jättämään kyseisen kohdan väliin. Asiaa selvittäessäni löysin yllä mainitsemani Youtube-videon, joka vaikutti jossain määrin selkeämmältä, joten siirryin noudattamaan siinä esitettyjä ohjeita. Config-tiedostojen jälkeen luotiin vielä mpd-kansioon muutama tiedosto, joita mpd:n toimiminen ilmeisesti edellyttää. Käyttämäni komento oli seuraavanlainen:

$ touch mpd.db mpd.log mpd.pid

Nähdäkseni tässä luodaan siis tietokanta, lokitiedosto ja tiedosto, jonne mpd:n käyttämä prosessi-id kirjataan.

Tämän jälkeen oli enää jäljellä ohjelman käynnistäminen komennolla ncmpcpp. Koska omat config-asetukseni olivat erilaiset kuin Youtube-videon kuvaajalla, oma soittimeni näytti hieman erilaiselta ja toimi eri komennoilla, mikä oli hieman hämmentävää. Esimerkiksi videossa mainittua help-ikkunaa en saanut auki millään. Aluksi en myöskään nähnyt kappaleitani ollenkaan, mutta u:ta (update) painettuani kappalelista tuli näkyviin. Tämän jälkeen pääsin itsekin navigoimaan listaa mukavasti nuolinäppäimillä ja kappaleet lähtivät soimaan enterillä.

Vaikka ncmpcpp:n (kuinkakohan monta vuotta tulee menemään siihen, että a) opin muistamaan tuon kirjainyhdistelmän ulkoa b) kykenen kirjoittamaan sen edes etäisen sujuvasti) asentaminen oli aikamoinen prosessi, sanoisin että se oli ehdottomasti kaiken vaivan arvoinen. Ncmpcpp on simppelin mutta söpön näköinen, vaikuttaa toimivan kivasti ja config-tiedostoa on helppo käydä muokkaamassa itse. Soittimessa on myös hieno visualisoija, jonka seuraavassa kuvassa avasin erilliseen ikkunaan, sillä halusin nähdä, miltä ohjelma näyttää ilman cool-retro-terminaalia.

Ohjelma 3 – htop

Seuraava ohjelma listallani on htop, jota käytetään prosessien tarkkailuun. Sen asentamiseen liittyvät ohjeet löysin täältä. Aloitin kirjoittamalla terminaaliin seuraavan komennon:

$ sudo apt-get install htop

Asennuksen jälkeen ohjelman sai pyörimään komennolla htop.

Prosesseja saa yläpalkista lajiteltua kätevästi esimerkiksi käyttäjien perusteella, kuormittavuuden mukaan tai sen perusteella, kuinka kauan prosessi on ollut käynnissä. Kun tein selvitystyötä siitä, mitä ohjelmia haluaisin ladata, Ubuntun foorumeilla muistaakseni kehuttiin tätä ohjelmaa siitä, että sen avulla on helppo tappaa kerralla useita eri prosesseja. Ei mitenkään erityisen kriittinen ominaisuus minulle, mutta hyvähän se on olla olemassa.

Siinä olivatkin tämän viikon raportoitavat tehtävät. Tehtävänämme oli myös opetella erilaisia yleisiä terminaalikomentoja ulkoa, ja suurimman osan niistä jo muistakin melko hyvin, mutta muutamia harvemmin käyttämiäni komentoja joutuisin ehkä äkkiseltään hieman miettimään. Esimerkiksi komentoja cp (copy), mv (move), ja rm (remove) en ole käyttänyt muuta kuin harjoituksen vuoksi muutaman kerran, kun taas erilaiset luonti-, navigointi- ja asennuskomennot ovat olleet tähän mennessä hyvin olennaisia jos jonkinlaisessa puuhailussa.

Tietoa kirjoittajasta

Noora Huttunen

Opiskelen ohjelmistotuotantoa Haaga-Helian tietojenkäsittelylinjalla.