ICT4TN021-3010 - Kurssiraportit

Linux palvelimet -kurssin tehtyjen tehtävien tehtäväsivu tehtävien tarkastajalle ja muille uteliaille.
- Juho Hakala

Pikalinkit:
H1
H2
H3

Harjoitus 1

Takaisin ylös

a) Tee oma Linux-livetikku. Kokeile sitä jossain muussa kuin koulun koneessa. Tämä kohta ei edellytä asentamista – jos kuitenkin asennat, ota ensin varmuuskopiot. Jos ehdit tehdä tikun jo tunnilla, voit poikkeuksellisesti raportoida muistin perusteella jälkikäteen, mutta muista silloin mainita muistinvaraisuudesta.

Tarvittavat asiat livetikun luomiseen:
Xubuntu: https://xubuntu.org/download
Rufus: https://rufus.ie/
USB 3.0 -muistitikku: esimerkiksi käyttämäni SanDisk Ultra USB 3.0 32GB

Latasin Xubuntu 18.04.3 AMD64 ISO -tiedoston Xubuntun nettisivuilta mirrorin kautta sekä Rufus-ohjelman. Avasin Rufuksen, tarkistin asennuksen kohdelaitteen olevan oikea (USB-tikkuni oli oletuksena valittu), painoin Boot Selection -otsikon alla olevaa SELECT-nappia ja valitsin äsken lataamani ISO-tiedoston. Annoin muiden asetusten olla oletusarvoisina ja painoin START-nappia. Parin minuutin jälkeen livetikku oli valmis.

Jotta pöytäkoneeni kykenisi käynnistämään USB-tikulta, BIOS kaipasi muutamia muutoksia.

Asuksen tukisivuilta löysin, että pitäisi kytkeä päälle (enable) CSM (Compatibility Support Module) sekä kytkeä pois päältä (disable) Secure Boot state. CSM:n kytkeminen päälle tapahtui helposti ohjeiden mukaisesti (Avataan BIOS -> Boot-välilehti -> CSM(Compatibility Support Module)-nappi -> Launch CSM -> Valitaan dropdown-menusta Enabled), mutta Secure Bootin pois kytkeminen tapahtuu uudemmassa BIOS-versiossa hieman eri tavalla.

Niinpä etsin käsiini toisen ohjeen, joka kertoi miten kyseinen toimenpide suoritetaan (Avataan BIOS -> Boot-välilehti -> Secure Boot -nappi -> OS Type -> Valitaan dropdown-menusta Other OS, sen jälkeen painetaan Key Management -nappia -> Save all Secure Boot variables -> Valitaan käytettävä USB-tikku valikosta -> Ok -> PK Management-nappi -> Delete Key -> Ok).

Tämän jälkeen voidaan avata BIOS -> Boot-välilehti -> Boot Override -otsikon alta löydetään nyt kaikki boottaus vaihtoehdot, käytettävä USB-tikku mukaan lukien.

Aloitin ISO-tiedoston ja Rufusin latailun 10:00. Livetikun tekemisen ja edellä eriteltyjen BIOS-seikkailujen jälkeen kello oli 10:40.

Käynnistys: BIOS:in kautta siis suoritin käynnistyksen ja homma lähti liikkeelle. Ensimmäisessä valikossa kyseltiin kokeilun ja asennuksen väliltä. Klikkasin Try Xubuntu -nappia. Hetken odottelun jälkeen työpöydän tuastakuva ilmestyi ruudulle, mutta ei muuta (kuvakkeita tai palkkeja). Hetken ihmeteltyäni tajusin käynnistää myös toisen koneeseen liitetyn näytön ja kas kummaa, sieltä se varsinainen työpöytä löytyikin. Hiiri liikkui näytöllä ja näppäimistökin toimi. Ääkkösetkin saatiin peliin setxkbmap fi -komennolla

b) Listaa testaamasi koneen rauta (‘sudo lshw -short -sanitize’).

c) Asenna kolme itsellesi uutta ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa.

1. Inkscape
Vektorigrafiikkatyökalu
sudo apt-get install inkscape
Ensimmäisellä yrityksellä error-viesti kertoi päivittämään ja työtä käskettyä ajoin komennon sudo apt-get update. Tämän jälkeen toisella yrityksellä inkscapen asennuskomento meni läpi ilman ongelmia.

"

2. Planner
Projektin hallintaohjelma
sudo apt-get install planner
Asennus meni läpi ilman ongelmia.



3. Calibre
E-kirjojen hallintaohjelma
Kokeilin ohjelman asennusta Software-ohjelman kautta ilman terminaalia. Hakupalkkiin kirjasin haluamani ohjelman ja sen sivulla klikkasin Install-nappia. Ohjelman asennettua itsensä se aukeni ilman ongelmia.



d) Mitä lisenssiä kukin näistä ohjelmista käyttää? Selitä lyhyesti, mitä oikeuksia ja velvolisuuksia tuosta lisenssistä seuraa.

Kaikki kolme käyttä GNU GPL -lisenssiä. Inkscape: v2, Planner: v2 or later, Calibre: v3.
GNU GPL -lisenssi antaa jokaiselle oikeuden käyttää, muokata, kopioida ja jakaa koodia eteenpäin, mutta velvoittaa jokaista julkaisemaan mahdolliset uudet tuotokset samaa lisenssiä käyttäen.

Lähteet lisensseille:
https://inkscape.org/about/license/
https://directory.fsf.org/wiki/Planner#tab=Details
https://github.com/kovidgoyal/calibre/blob/master/LICENSE

e) Listaa käyttämäsi ohjelmat (esim. MS Word), kunkin ohjelman käyttötarkoitus (esim. Tekstinkäsittely) ja vastaava vapaa Linux-ohjelma (esim. LibreOffice Writer). Jos johonkin tarkoitukseen ei löydy vapaata Linux-ohjelmaa, listaa sekin. (Päivitetty: korjasin tämän kohdan tunnuskirjaimen d->e)

Windows Kuvaus Linux
Microsoft Office Tekstinkäsittely, esitysten ja taulukkojen teko LibreOffice
Paint.net Kuvankäsittely, piirtotyökalu GIMP
Firefox, Chrome Selain Firefox
VS Code Koodieditori VS Code
Steam Pelaaminen Steam

Lähteet (osa lähteistä ripoteltu raporttiin, mutta tässä listattuna kaikki kootusti):
http://terokarvinen.com/2020/aikataulu-linux-palvelimet-ict4tn021-3010-torstai-aamu-alkukevat-2020-5-op
https://xubuntu.org/download
https://rufus.ie/
https://www.asus.com/support/FAQ/1013017/
https://www.techjunkie.com/disable-secure-boot-asus/
https://www.gnu.org/licenses/licenses.html
https://inkscape.org/
https://inkscape.org/about/license/
https://wiki.gnome.org/Apps/Planner
https://directory.fsf.org/wiki/Planner#tab=Details
https://calibre-ebook.com/
https://github.com/kovidgoyal/calibre/blob/master/LICENSE

Harjoitus 2

Takaisin ylös

a) Aiheuta lokiin kaksi eri tapahtumaa: yksi esimerkki onnistuneesta ja yksi esimerkki epäonnistuneesta tai kielletystä toimenpiteestä. Analysoi rivit yksityiskohtaisesti.

Lokitiedostot löydetään "/var/log/"-hakemistosta. Käytetään komentoa "cd /var/log/", tarkistetaan sijaintimme komennolla "pwd", ja komennolla "ls" nähdään kaikki kansiosta löytyvä sisältö (tiedostot, kansiot, muut).



Komennolla "tail -f syslog" voidaan tarkastella syslogin kymmentä viimeistä riviä ja nähdään tulevat muutokset reaaliaikaisesti.



Sain tehtyä syslogiin onnistuneen tapahtuman katkaisemalla ja yhdistämällä takaisin internettiin. Tämä toimenpide loi pitkän pätkän rivejä syslogiin ja lopputuloksena kone pääsi takaisin kiinni verkkoon.



Epäonnistunut tapahtuma voidaan saada aikaan esimerkiksi yrittämällä kirjautua SSH-yhteyden kautta väärillä tunnuksilla. Niinpä siis asennan SSH:n ensin päivittämällä pakettilistat "sudo apt-get update"-komennolla ja sitten "sudo apt-get -y install ssh". Seuraavaksi käyttämäni SSH-komennot löysin täältä. Jotta yhdistämäminen onnistuu, tulee tietää yhdistettävältä koneelta käyttäjänimi ja osoite (IP). "whoami"-komento kertoo käyttäjänimemme olevan xubuntu ja "hostname -I"-komento kertoo IP-osoitteeksemme 192.168.0.9. Nämä mielessä pitäen yritetään ottaa yhteyttä oikeaan osoitteeseen, mutta väärällä käyttäjänimellä. Komennolla "ssh pekka@192.168.0.9" yritetään ottaa yhteyttä ja vastaan tulee salasanan kyselijä. Painetaan Enter-nappia jokaiseen kyselyyn ja kolmannen kerran jälkeen yhteys katkeaa. Nyt voidaan mennä tarkastelemaan "auth.log"-tiedostoa, johon epäonnistunut kirjautumisyrityksemme pitäisi olla tallentunut. Ja niin se on sinne tallentunutkin, "Failed password for invalid user".

b) Vapaaehtoinen kohta, ei ole opetettu vielä: Asenna SSH-demoni. Kokeile omalla ssh-palvelimellasi jotain seuraavista: ssh-copy-id, sshfs, scp tai git. (Helpoin lienee scp: ‘scp foo.txt tero@example.com:’)

SSH asennettiin jo edellisessä kohdassa, joten sitä ei tarvitse uudestaan tehdä. Niinpä voidaankin suoraan yrittää ottaa yhteyttä oikeasti tällä kertaa. Ennen tätä tulee luoda käyttäjällemme oma salanana, joka voidaan tehdä komennolla "sudo passwd xubuntu". Tämän jälkeen komennolla "ssh zubuntu@192.168.0.9" otetaan yhteys itseemme.



Navigoidaan työpöydälle komennolla "cd Desktop" ja luodaan Desktop-hakemistoon nanolla testitarkoituksessa "teksti.txt"-tiedosto, joka sen jälkeen kopioidaan scp-komennolla. "scp teksti.txt xubuntu@192.168.0.9"-komento tekee tekstitiedostosta kopion.

c) Tee unelmien apt-get -komento: yksi komentorivi, joka asentaa suosikkiohjelmasi.

Komennolla "sudo apt-get -y install firefox" voi asentaa itselleen internet-selaimen, jolla voi selata internettiä.

d) Asenna komentokehotteen paketinhallinnasta kolme itsellesi uutta komentorivillä toimivaa ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa.

"apt-cache search"-komennolla on helppo etsiä ohjelmia erilaisiin käyttötarkoituksiin.

1. Nsnake
sudo apt-get -y -install nsnake
Komentorivillä toimiva snake-peli.



2. Genius
sudo apt-get -y -install genius
Yleishyödyllinen laskin



3. Pyjoke
sudo apt-get -y -install pyjoke
Ohjelma satunnaisesti kertoo ohjelmointiin liittyviä vitsejä.

Lähteet:
http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/
https://www.ssh.com/ssh/command
https://www.ssh.com/ssh/scp

Harjoitus 3

Takaisin ylös

Tehtävät löytyvät täältä.

a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.

Jos Apachea ei ole vielä asennettuna ja selaimella mennään osoitteeseen localhost, tulee vastaan seuraavanlainen ilmoitus:



Ja koska haluamme saada jotain katseltavaa tälle sivulle, asennamme Apache web-palvelimen, joka onnistuu komennolla "sudo apt-get install -y apache2". Asennuksen jälkeen äskeinen localhost-sivu näyttää Apachen oletussivun:



Jotta voisimme luoda käyttäjäkohtaisen kotisivun (localhost/~xubuntu), luomme ensin kotihakemistoon (/home/xubuntu) "public_html"-kansion, jonka sisälle tehdään yksinkertainen demosivu nimeltään "index.html".



Tämän jälkeen otamme käyttöön userdir-moduulin komennolla "sudo a2enmod userdir", mutta muutokset tulevat voimaan vasta, kun käynnistämme Apachen uudelleen komennolla "sudo systemctl restart apache2". Nyt osoitteessa localhost/~xubuntu (mikäli käyttäjänimesi ei ole xubuntu, korvaa se oikealla) komeilee yksinkertainen testisivumme.



Koska käytössä on potentiaalisesti kaikelle maailmalle esiteltävä sivusto, otetaan myös palomuuri käyttöön komennolla "sudo ufw enable" ja avataan yksi portti mahdolliselle liikenteelle komennolla "sudo ufw allow 80/tcp".

b) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.

Apachen lokitiedostot sijaitsevat "/var/log/apache2"-kansiossa, joista "access.log"-tiedosto pitää sisällään tiedon erilaisista Apachen saamista pyynnöistä.



Esimerkki onnistuneesta sivulatauksesta. Tarkat tiedot rivin sisällöstä löytyy Apachen sivuilta.

127.0.0.1 - - [11/Feb/2020:18:06:02 +0000] "GET /~xubuntu/ HTTP/1.1" 200 491 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Riviltä käy ilmi:
pyynnön lähettäjän IP-osoite,
"RFC 1413" -identiteetti (Apachen sivuilta käy ilmi, että tämä tieto oletusarvoisesti jätetään selvittämättä ja siksi se näkyy pelkkänä viivana),
pyynnön lähettäjän "userid" (koska testisivu ei ole salasanasuojattu, näkyy lokissa pelkkä viiva),
kellonaika ja aikavyöhyke,
pyynnön tyyppi (GET),
pyydetty asia (/~xubuntu/),
käytetty protokolla (HTTP/1.1),
palvelimen lähettämä status (200 eli onnistunut),
palvelimen palauttaman asian koko, miltä sivun kautta pyyntö lähetetty (näyttää viivaa, sillä ei tultu toiselta sivulta),
tietoja käyttäjästä: käytetty selain, käyttöjärjestelmä, selainmoottori (Gecko), selain versio.

Esimerkki epäonnistuneesta sivulatauksesta:

127.0.0.1 - - [11/Feb/2020:18:09:23 +0000] "GET /~kubuntu/ HTTP/1.1" 404 488 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Lokirivi sisältää samat asiat kuin onnistunut pyyntö, mutta koska pyydettyä asiaa ("/~kubuntu/") ei ole olemassa, palvelin palauttaa statuskoodin 404 (Not Found).

d) Tee virhe johonkin Apachen asetustiedostoon, etsi ja analysoi tuo rivi. Etsimiseen sopivat esimerkiksi Apachen omat lokit, syslog sekä ‘apache2ctl configtest’.

Apachen asetustiedostot löytyvät kansiosta "/etc/apache". Avataan "apache2.conf"-tiedosto komennolla "sudoedit apache2.conf" ja testimielessä pyritään aiheuttamaan virhe. Poistetaan ensimmäisen rivin kommenttimerkintä "#", jolloin ensimmäisen rivin tekstistä tulee osa ajettavia asetuksia. Tallennetaan muutokset ja yritetään käynnistää Apache uudelleen komennolla "sudo systemctl restart apache2".



"Job for apache2.service failed because the control process exited with error code" -virheilmoitus ei vielä hirveästi kerro tapahtumasta, joten katsotaan muualta. Komento "sudo apache2ctl configtest" paljastaa ongelman olevan juuri muokkaamamme "apache2.conf"-tiedoston ensimmäisellä rivillä.



Vaikka komento osasikin jo kertoa, että rivillä yksi "This" ei ole pätevä komento ja tiedämme, missä vika on, katsetaan vielä mitä eri lokit sanovat. Viimeisellä rivillä ehdotetaan katsomaan Apachen error-lokia, joten tehdään näin. "/var/log/apache2"-kansiosta löytyy "error.log"-tiedosto, josta löytyy yhden rivin verran tietoa:

[Tue Feb 11 19:00:26.924448 2020] [mpm_event:notice] [pid 6410:tid 139639274970048] AH00491: caught SIGTERM, shutting down

Apachen sivut kertovat, että ensimmäinen osa rivistä kertoo tapahtuma-ajan, toinen viestin tuottava moduuli (mpm_event) ja sen taso (notice), kolmas osa kertoo prosessin (process) ja langan (thread) ID:t ja viimeisenä tulee itse virheilmoitus, joka tässä tapauksessa kertoo, että Apache sai SIGTERM-signaalin ja sulkee itsensä. Ei hirveästi kerro asiasta. Seuraavaksi katsotaan, mitä "syslog" tietää asiasta.



Syslog kertoo saman asian kuin aiemmin tehty "configtest", mutta näyttää paljon tarkemmin vaiheet, joiden kautta Apache on sulkeutunut. Virhettä on pukannut niin sammuttaessa, että uudelleen käynnistäessä.

Näiden tietojen jälkeen voidaan käydä korjaamassa tekemämme testivirhe ja komennon "sudo systemctl restart apache2" jälkeen Apache toimii taas normaalisti.

i) Kuinka monta eri HTTP Status:ta (200, 404, 500…) saat aiheutettua lokeihin? Selitä, miten aiheutit tilanteet ja analysoi yksi rivi kustakin statuksesta.

HTTP-statuskoodit

127.0.0.1 - - [11/Feb/2020:18:05:27 +0000] "GET /~xubuntu/ HTTP/1.1" 200 489 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Onnistunut haku (200, OK), onnistuu hakemalla olemassaolevaa sivua, josta palautuu onnistuneesti tieto.

127.0.0.1 - - [11/Feb/2020:18:09:23 +0000] "GET /~kubuntu/ HTTP/1.1" 404 488 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Epäonnistunut haku (404, Not Found), onnistuu hakemalla sivua, jota ei ole olemassa. Tällöin takaisin tulee virhe 404.

127.0.0.1 - - [11/Feb/2020:18:05:27 +0000] "GET /~xubuntu HTTP/1.1" 301 572 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" 127.0.0.1 - - [11/Feb/2020:18:05:27 +0000] "GET /~xubuntu/ HTTP/1.1" 200 489 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Uudelleenohjautunut haku (301, Moved Permanently), hakemalla osoitetta, joka on pysyvästi muutettu. Vastauksena tulee uusi osoite. Tässä tapauksessa "/~xubuntu"-haku palauttaa oikean osoitteen, "/~xubuntu/".

127.0.0.1 - - [11/Feb/2020:18:55:16 +0000] "GET /icons/ubuntu-logo.png HTTP/1.1" 304 180 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

Palautuva vastaus (304, Not Modified) kertoo, että haettu kohde ei ole muuttunut, joten käyttäjä voi jatkaa aiemmin ladattua versiota välimuistista. Kyseinen logo-kuva löytyi jo välimuistista, joten sitä ei tarvinnut ladata uudelleen.

m) Vaihda Apachen oletussivu. Eli laita palvelimen etusivulla (ilman tildeä) näkyvä sivu niin, että alkuperäinen on jonkun käyttäjän kotihakemistossa ja voit muokata sitä ilman pääkäyttäjän oikeuksia.

Muuttaaksemme Apachen oletussivua, navigoidaan kansioon "/etc/apache/sites-available", johon luodaan uusi ".conf"-tiedosto kotihakemistossa (/home/xubuntu/public_html) olevalle sivustollemme. Komennolla "sudoedit testisivu.abc.conf" (korvaa "testisivu.abc" haluamallasi osoitteella) luodaan seuraavanlainen tiedosto:



Tämän jälkeen luotu asetustiedosto pitää ottaa käyttöön komennolla "sudo a2ensite testisivu.abc.conf" ja samalla poistetaan oletussivu pois käytöstä komennolla "sudo a2dissite 000-default.conf". Muutosten voimaan astumiseksi Apache tulee käynnistää uudelleen komennolla "sudo systemctl restart apache2". Tämän myötä osoitteella localhost, pääsemme katselemaan kotihakemistossa sijaitsevaa sivustoa.

n) Laita kaksi nimeä samaan IP-osoitteeseen. Voit simuloida nimipalvelun toimintaa /etc/hosts -tiedoston avulla. Eli niin, että samalla palvelimella osoitteella teronlenkkisivu.com tulee eri sisältö kuin osoitteella opipentest.com.

Luodaan a-kohdan ohjeiden mukaisesti kotihakemistoon (/home/xubuntu) toinen kansio ja siihen sivun sisältävä HTML-tiedosto sekä luodaan sille m-kohdan tavoin ".conf"-tiedosto seuraavanlaisesti:



Komennolla "sudo a2ensite toinentestisivu.abc.conf" lisäämme toisen testisivumme käytettävien sivujen joukkoon. Selvitetään oma IP-osoitteemme komennolla "hostname -I" ja sen jälkeen avaamme komennolla "sudoedit /etc/hosts", jonka avulla voimme ohjata tiettyä hostnamea hakevan haluamaamme IP-osoitteeseen eli tässä tapauksessa omaamme.



Tämän jälkeen komennolla "sudo systemctl restart apache2" käynnistetään Apache uudelleen ja sen jälkeen testisivumme avautuvat omilla osoitteillaan.

Lähteet:
http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/
https://httpd.apache.org/docs/2.4/logs.html
https://developer.mozilla.org/en-US/docs/Mozilla/Gecko
https://en.wikipedia.org/wiki/Signal_(IPC)#SIGTERM
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status