Ylös
Linux livetikku Komentokehote Apache2 Palvelin Flask Shell scriptit Harjoitus

Linux palvelimet

Linux Server Course - Linux palvelimet ict4tn021-3014 - alkukevät 2021.
Haaga-Helia ammattikorkeakoulu
ICT4TN021-3014 - Alkukevät 2021
Opettajana: Tero Karvinen.


Harjoitus 1 - Linux livetikku - 24.1.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Rufus, versio 3.13.1730

Tehtävä A

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.

Linuxin valinta ja lataus

Opettajan suosituksesta valitsemme 'Debian xfce nonfree' version. Ladataan 'debian-live-10.7.0-amd64-xfce+nonfree.iso' tiedosto sivustolta https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/

debian

Asennus

Muistitikkuna toimii 2014 ostettu 'DataTraveler 100 g2 16GB', vanhassa ja paljon käytetyssä tikussa on aina riski, että se ei kunnolla toimi. Muistitikusta tehdään buuttaustikku Rufus, https://rufus.ie/, ohjelman versio 3.13.1730 avulla. Rufus päälle ja aloitetaan, valitaan 'Device' tippuvalikosta muistitikku ja 'Boot selection' valikosta etukäteen ladattu debian .iso tiedosto.

Rufus

Asennuksen yhteydessä ohjelma kyselee kaikenlaista, vastataan kaikkeen OK ja YES.

Rufus

Ja näin tikku on valmis, seuraavaksi kokeilemaan miten se toimii. Jos asennuksessa esintyisi ongelmia, kannattaisi kokeilla uutta tikkua tai eri ohjelmaa jolla asennustiedosto tikulle tehdään.

Tehtävä B

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

Tietokoneen käynnistys livetikulta

Vaikka livetikku on tietokoneessa kiinni, niin käynnistys tapahtuu kuitenkin kovalevyltä, eli tässä tapauksessa Windows10 käynnistyy. Tämän voi kyseisessä Lenovon tietokoneessa ohittaa painamalla F12 näppäintä käynnistyksen yhteydessä. Näin pääsemme itse valitsemaan mistä tietokone käyttöjärjestelmän käynnistää, valitsin USB:n. Jossain tietokoneissa tämä valinta voi olla BIOS:in kautta estetty.

Bootmenu

Nyt pääsemme valitsemaan mitä haluamme tikulta tehdä, tässä tapauksessa emme halua asentaa Debiania, vaan pyörittää sitä tikulta ns. livetilassa, joten valitsemme 'Debian GNU/Linux Live' vaihtoehdon.

Livevalinta

Tässä se sitten on, Debian Linux.

Debian Työpöytä

Terminaali

Vaikka mahdollisuus olisi käyttää graafista liittymää, niin kurssin idea on käyttää komentoriviä ja suorittaa komennot sitä kautta.

Käynnistetään lshw ohjelma joka kertoo meille tietoja tietokoneesta:

sudo lshw -short -sanitize

Terminal

Tehtävä C

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

Ohjelmien asennus

Suurimman käytön Windowsin ohjelmista saa Office paketti, tätä korvaamaan valitaa LibreOffice. Elokuvien ja sarjojen katseluun valitaan saman kuin Windowsin puolella, VLC player. Ja selaimeksi Chromen tilalle sama, mutta ei ihan, eli Chromium. Ensin päivitämme paketinhallinnan, jotta löydämme haluamme ohjelmat ja sen jälkeen aennetaan jokainen ohjelma.

$ sudo apt-get update
$ sudo apt-get install libreoffice
$ sudo apt-get install vlc
$ sudo apt-get install chromium

Asennuksen jälkeen kokeillaan että kaikki ohjelmat toimii.

LibreOffice

VLC

Chromium

Tehtävä D

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

Lisenssit

LibreOffice on Mozilla Public License Version 2.0 lisenssin alla ja VLC käyttää hyvin samankaltaista GNU General Public (GPL) lisenssiä. Chromium on hieman monimutkaisempi, Googlen tekemä osuus on Berkeley Software Distributionin (BSD) lisenssillä, muiden tekemät lisäyksen ovat useiden lisenssien alla, käytössä on mm. MIT, GPL ja LGPV. Näiden lisenssien erojen ymmärtäminen vaatii hieman enemmän tutkimusta.

Tehtävä E

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.

Windows ohjelmia, niiden käyttötarkoitus ja vastineita Linuxin puolella

Excel - Taulukonkäsittely - LibreOffice calc

Paint - Kuvankäsittely - Gimp

Visual Studio Code - Lähdekoodieditori - Saman saa asennettua Linuxille


Harjoitus 2 - Komentokehote - 30.1.2021

Tässä harjoituksessa harjoiteltiin komentoterminaalin käyttöä. Tehtävässä käytetty välineistö:

Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree

Tehtävä A

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

Onnistunut tapahtuma

Aloitetaan päivittämällä paketinhallinta komentokehotteen kautta komennolla sudo apt-get update. Tämän jälkeen siirrytään lokien puolelle tutkimaan miltä ne näyttää. Lokit löytyvät kohdasta /var/log. Komennolla $ ls näemme mitä tiedostoja ja kansioita tuo kansio sisältää.

varlog

Avasin auth.log tiedoston tail komennolla, joka näyttää 10 viimeisintä merkintää $ sudo tail auth.log.

authlog

Jan 30 12:14:38 localhost sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/apt-get update
Jan 30 12:14:38 localhost sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 30 12:14:40 localhost sudo: pam_unix(sudo:session): session closed for user root

Tammikuun 30päivä kello 12:14, terminaalia käyttäen, home/user kansiossa olessaan on käyttäjä halunut suorittaa komennon apt-get update.
Oikeudet on annettu, tehtävä on suoritettu ja suorituksen jälkeen oikeudet on poistettu.

Epäonnistunut tapahtuma

Kirjaudutaan ulos ja yritetään kirjautua sisälle väärällä salasanalla. Tämän jälkeen kirjaudutaan oikealla ja mennään tarkastamaan samasta lokitiedostosta kuin edellisessä kohdassa.

Jan 30 12:56:46 localhost lightdm: pam_unix(lightdm:auth): authentication failure; logname= uid=0 euid=0 tty=:1 ruser= rhost= user=user

Päivämäärä, se että salasana on väärä ja aivan viimeisenä se, että käyttäjä, jolla yritettiin kirjautua oli nimeltä user.

Tehtävä b

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

Seurataan sivuston https://www.geeksforgeeks.org/custom-commands-linux-terminal/ ohjeita, jossa kerrotaan omien komentokehotekomentojen tekemisestä. Ensin avataan .bashrc tiedosto nano tekstinkäsittelyohjelmalla komenolla nano .bashrc. Sielä mennään sivun loppuun ja lisäsin sinne oma komento: alias omaohjelma='sudo apt-get update; sudo apt-get install audacity -y'. Tallennus ctrl+o ja exit ctrl+x

audacity

Terminaali pitää tässä vaiheesssa sulkea ja avata uusiksi, sen jälkeen koitetaan kirjoittaa terminaaliin pelkästään $ omaohjelma.

audacity

Oma komento onnistui, ohjelma asennettu. Tarkastetaan vielä audacityn toiminta käynnistämällä ohjelma.

audacity

audacity

Tehtävä c

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

Asennetan ensin hupiohjelma, $ sudo apt-get install cowsay ja sen jälkeen käynnistetään tämä, $ cowsay lisää linuxia

cowsay

Seuraavaksi peli, $ sudo apt-get install ninvaders. Katsotaapas miltä tämä näyttää, melkein samaa tasoa kuin Cyberpunk 2077.

ninvaders

Koitetaanpas viimeiseksi jonkinlaista oikeasti hyödyllistä ohjelmaa, $ sudo apt-get install bc ja taas käynnistykseen pelkkä $ bc. Tämä on niinkin monimutkainen ohjelma kuin laskin, lasketaanpas siis vähän laskuja.

bc


Harjoitus 3 - Apache-weppipalvelin - 4-8.2.2021

Harjoituksessa käytetty välineistö:

Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Mozilla Firefox 78.5.0esr

Tehtävä A

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

Apachen asennus alkaa pakettihallinnan päivittämisellä, $ sudo apt-get update ja sen jälkeen apache asennus $ sudo apt-get install apache2. Avataan selaimesta localhost ja tarkastetaan toimiiko.

localhost_ei_toimi

Google auki, "why does apache not work" ja sivu https://upcloud.com/community/tutorials/fix-common-problems-apache2/ ehdoittaa ensimmäisenä ratkaisuna komentoa $ sudo systemctl restart apache2. Komento käynnistää apachen uudelleen. Katsotaanpa uusiksi localhost.

localhost

Nyt näyttää hyvältä. Luodaan käyttäjille kotisivut, ensin julkinen kansio $ mkdir public_html ja kansion sisään sivuston etusivu nano tekstinkäsittelyohjelmalla $ nano index.html ja kirjoitetaan pieni testiviesti tuohon teksitiedostoon. Tiedoston tallennus ja sulku 'ctrl+o' ja 'ctrl+x'

nano1

Ennen omalle sivulle siirtymistä, katsotaan oma käyttäjätunnus terminaalista $ whoami vastaus: user. Nyt tiedämme mikä on sivuston nimi, mennään siis osoitteeseen localhost/~user

johaninsivut

Seuraavaksi lähdemmen seuraamaan https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-debian-8 sivuston neuvoja jotta saadaan sivu http://example.com/ toimimaan paikallisesti.

Luodaan ensin kansiot $ sudo mkdir -p /var/www/example.com/public_html ja tuon kansion sisälle index.html tiedosto $ nano /var/www/example.com/index.html

hakemistojahtml

Seuraavaksi kopiodaan apachen default host asetukset, jotta meidän ei tarvitse kirjoittaa kaikkea itse: $ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Avataan tuo juuri tehty tiedosto $ sudo nano /etc/apache2/sites-available/example.com.conf

conf

Lisätään tuohon tiedostoon kaksi riviä

ServerName example.com
ServerAlias www.example.com

Ja muutetaan
DocumentRoot /var/www/html -> DocumentRoot /var/www/example.com/public_html

conf2

Sivut pitää vielä aktivoida apachen kautta, muuten niitä ei oteta käyttöön. tähän käytetään komentoa $ sudo a2ensite example.com.conf ja otetaan apachen oma pois käytöstä $ sudo a2dissite 000-default.conf

a2en

Sitten vielä apachen uudelleenkäynnistys $ sudo systemctl restart apache2. Muutetaan host tiedostoa niin että example.com menee meidän omalle koneelle

hosts

Ja näin meillä on toimiva sivu:

examplecom

Tehtävä B

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

Käydään sivulla localhost/~user/index.html ja localhost/~user/kissavideot.html. Ainoa sivu joka ei toimi on tuo viimeinen, kissavideot.html

kissavideot

Mennään apachen lokiin katsomaan miltä sielä näyttää, komennolla sudo tail var/log/apache2/access.log saamme seuraavat mielenkiintoiset rivit esille:

127.0.0.1 - - [06/Feb/2021:09:29:03 +0000] "GET /~user/index.html HTTP/1.1" 200 301 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
127.0.0.1 - - [06/Feb/2021:09:29:15 +0000] "GET /~user/kissavideot.html HTTP/1.1" 404 488 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"

Otetaan yksi tapahtuma tarkempaan tutkintaan:

127.0.0.1 Käyttäjän ip osoitteeseen

[06/Feb/2021:09:29:03 +0000] Tapahtuman päivämäärä ja kellonaika

"GET /~user/index.html HTTP/1.1" Mitä on haluttu tehdä (GET) ja millä protokollalla (HTTP)

200 Koodi jolla pystymme selvittämään mitä tapahtui

"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0" Tietoja käyttäjästä: selaimen ja käyttöjärjestelmä

Koodien viestien ymmärtämiseen käytetään apuna sivustoa https://kb.iu.edu/d/bfrc

localhost/~user/index.html antoi koodin 200, joka tarkoittaa että kaikki meni hyvin, käyttäjä sai sivun näkyviinsä.

localhost/~user/kissavideot.html antoi koodin 404, joka taas kertoo meille että sen nimistä sivua ei ole olemassa.

Tehtävä F

f) Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (esim. painoindeksi BMI)

Menään kansioon home/user/public_html ja muutetaan sielä olevaa index.html tietostoa. Lisätään tiedostoon javascriptillä tehty painoindexilaskuri.

index3

Koodi testiin ja tuloksia ihailemaan:

bmi

bmi


Harjoitus 4 - Julkinen palvelin - 12-15.2.2021

Harjoituksessa käytetty välineistö:

Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree

Tehtävä A

a) Tee alusta lähtien oma julkinen palvelin Internetiin.

DigitalOcean

Valitaan opettajan suosituksesta DigitalOcean palvelun, https://www.digitalocean.com/. Rekisteröinnin jälkeen pääsemme aloittamaan palvelimen luonnin 'Droplets' valikosta.

dropletsvalikko

Kurssin linuxvalintana on ollut Debian10, joten jatketaan sillä myös tämän palvelimen osalta.

linuxvalinta

Koneen ei tarvitse suorittaa sen kummallisempia tehtäviä, ainoastaan pyörittää simppeliä sivua, joten valitaan halvin vaihtoehto.

dropletin_koko

Koneesta tuli seuraavanlainen:

Prosessori: 1vCPU
Muisti: 1GB
Kovalevy:25GB ssd
Siirtomäärä/kk: 1TB
Käyttöjärjestelmä: Debian10
Hinta: 5USD (4,13EUR) /kk, (12.2.2021)

Maavalinnan kanssa kannattaa miettiä mikä on lähimpänä liikennettä. Jos suurin osa liikenteestä palvelimelle tulee Suomesta, ei palvelinta kannata ottaa San Franciscosta, sillä tämä voi aiheutta hidastelua. Jos kyseessä olisi tärkeä projekti niin kannattaisi miettiä, että minkä maan lakien mukaan mennään ja tietoturvan tasosta eri maiden palvelinkeskuksissa. Valitaan Amsterdam (Hollanti), koska EU-maa ja lähellä Suomea.

maavalinta

Salasanan valinta on aina tärkeä kohta, tässä kannattaa valita heti alkuun hyvä ja turvallinen salasana. https://cybernews.com/best-password-managers/how-to-create-a-strong-password/.

salasananvalinta

Viimeisenä valitaan palvelimelle nimi ja painetaan 'Create Droplet'.

dropletnimi

Ja näin meillä on valmis droplet.

valmisdroplet

Yhteys palvelimeen

Tässä osiossa seurataan Tero Karvisen 'First Steps on a New Virtual Private Server' ohjetta, https://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean/. Ohje on tehty Ubuntu 16.04 varten, mutta uskon että se ajaa tässä hyvin asiansa. Ensin avataan komentokehote ja otetaan yhteys tuohon yllä luotuun palvelimeen, tällä hetkellä käytössä on vain root käyttäjä ja sille annettiin salasana Dropletin luomisen yhteydessä ssh root@104.248.199.154.

rootkeksikone

Seuraavaksi asennetaan tulimuuri, avataan portti 22 ssh yhteyttä varten ja kytketään tulimuuri käyttöön. Ensin tietenkin päivitetään paketinhallinta.

$ sudo apt-get update
$ sudo apt-get install ufw
$ sudo ufw allow 22/tcp
$ sudo ufw enable

tulimuuriasennus

Uuden käyttäjän lisääminen.

Luodaan 'johan'

$ sudo adduser johan

Annetaan käyttäjälle johan hyvä ja turvallinen salasana

Lisätään johan sudo ja adm rymään, näin käyttäjä saa sudo ja admin oikeudet

$ sudo adduser johan sudo
sudo adduser johan adm

Varmistan että uusi käyttäjä toimii, avaamalla uuden terminaalin ja kirjautumalla sisään palvelimeen 'johan' käyttäjänimellä,

$ ssh johan@104.248.199.154

johankeksikonekirjautuminen

Komennolla $ groups tarkastan että käyttäjä johan kuuluu oikeisiin ryhmiin.

johangroups

Ja kuten kunnon tietoturvaan kuuluu, päivitetään koko paketti

$ sudo apt-get update
$ sudo apt-get upgrade

päivitys

Nyt kun tiedämme että uusi käyttäjä toimii ja sillä on ne oikeudet jotka haluamme, voimme siirtyä root käyttäjän sulkemiseen.

Root käyttäjän sulkeminen

Komennnolla $ sudo usermod –lock root lukitaan rootin käyttö. Ja sisäänkirjautuminen estetään muokkaamalla sshd_config tiedostoa. $ sudoedit /etc/ssh/sshd_config
Muutetaan kohta PermitRootLogin yes -> PermitRootLogin no

sshconfig

Kuten aina config tiedostojen muokkauksen jälkeen, käynnistetään se ohjelma uusiksi minkä tiedostoa on muokattu jotta saadaan muutokset voimaan. $ sudo service ssh restart. Yritetään vielä kirjautua rootilla sisään.

rootlogeitoimi

Apache

Apachen asennus ja reikä palomuuriin http:// sivuja varten,

$ sudo apt-get install apache2
sudo ufw allow 80/tcp

Vaihdetaan vielä apachen oletussivu lyheen textipätkään,

$ echo "Johanin testisivu" | sudo tee /var/www/html/index.html

Mennään palvelimen ip-osoitteeseen ja tarkistetaan sivun toiminta.

etusivu

Namecheap

Valitaan sivulle osoite ja toivotaan että se on vapaana, https://www.namecheap.com/.

namecheap

Lisäpalveluita ei tarvita, whoisguard ja auto-renew ovat ilmaisia, joten niiden annetaan olla, hinnaksi tuli 7,18euroa per vuosi.

namecheap2

Domainin luonnin jälkeen 'Manage' napin takaa saan auki 'Advanced DNS' välilehden, sinne lisään oman palvelimen osoitteen. 'Add new record' ja valinnaksi 'A Record', lisäsin @ ja www, jotta sivu ohjautuu oikein myös ilman 'www.' käyttöä.

advanced_dns

Päivityksessä voi mennä hetki, tässä tapauksessa pari minuuttia ja sivusto toimii. http://kouluprojekti.com/

kouluprojeticom

SSL

Lisätään palvelimelle SSL salaus jotta https:// sivut toimivat. Käytin tähän certbot ohjelmaa ja ohjeena DigitalOceanin tekemää 'How To Secure Apache with Let's Encrypt on Debian 10', https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-10 ja certbotin 'alternate installation methods' https://certbot.eff.org/docs/install.html#alternate-installation-methods.

CertBot haluaisi että asennuksessa käytetään 'snap' paketinhallintaohjelmaa, joka näyttää jakavan vahvasti mielipiteitä. En ole sitä aikaisemmin käyttänyt enkä siihen nyt lähde.

$ sudo apt-get install certbot
$ sudo apt-get install python-certbot-apache

certbotasennus

Tarkistetaan tulimuurin tila $ sudo ufw status

tulimuuritarkastus

Ohjeen mukaan muutetaan asetukset toimimaan https yhteyksillä, eli myös portti 443. $ sudo ufw allow 443

tulimuuritarkastus2

Seuraavaksi haetaan SSL sertifikaatti, $ sudo certbot --apache -d kouluprojektit.com -d www.kouluprojektit.com

sslcertin haku

Sivujen testaus, https://kouluprojekti.com/.:

sslcertin haku

kouluprojeticom

sslcertin haku

Lopuksi vielä tarkistetaan että certbotin automaattinen sertifikaatin uusiminen toimii, emmehän halua että sertifikaatti loppuu ja https sivut lakkaavat toimimasta. $ sudo certbot renew --dry-run

certbot automaattinen uusiminen

Automaatti toimii.

Harjoitus 5 - Flask - 24-28.2.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree

Tehtävä A

a) Hello Flask! Tee Python Flask hei maailma kehitysympäristössä. Voit siis käyttää tuotantoon sopimatonta app.run(debug=True) ajoa.

Aloitetaan päivittämällä paketinhallinta ja asentamalla flask

sudo apt-get update
sudo apt-get install python3-flask-y

Tämän jälkeen tehdään oman kansion nimeltä 'hello' ja sinne tiedoston 'hello.py'

mkdir hello
nano hello.py

hello.py

hello.py tiedostoon kopion seuraavan koodipätkän:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Learn Flask at TeroKarvinen.com!"
app.run(debug=True)

Ajetan tuo ohjelmapätkä ja tarkastetan tulos osoitteessa http://localhost:5000

python3 hello.py

run hello.py


Harjoitus 6 - Shell scriptit

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Tehtävä A

a) Tietokanta wepissä. Tee oma yksinkertainen, tietokantaa käyttävä ohjelma. Ohjelmalla tulee olla jokin käyttötarkoitus. Voit tehdä ohjelman muokkaamalla Teron koodia (muista lähdeviite)..

PostgresSQL

Seurataan http://terokarvinen.com/2016/03/03/install-postgresql-on-ubuntu-new-user-and-database-in-3-commands/index.html?fromSearch= ohjetta. Asennetaan PostgresSQL ja tehdään käyttäjästä samanniminen kuin linuxin käyttäjästä

sudo apt-get install postgresql
sudo -u postgres createdb johan
sudo -u postgres createuser johan

postgres1

postgres2

SQL-Alchemy asennus

sudo apt-get install python-sqlalchemy

sqlalchemy

Flask WTF asennus

sudo apt-get install python-wtforms

wtforms

Flask Automatic Forms

Teron ehdotuksesta käytetään apuna Teron ohjelmaa, https://terokarvinen.com/2020/flask-automatic-forms/. Tässä ei lähdetä muuttamaan Teron koodia. Jos tämä toimii kuten pitää, niin sen jälkeen voimme tehdä muutoksia.

Tehdään ohjeen mukaan python tiedosto "autoformed.py" ja lisätään sinne sisään Teron sivulta kopioitu koodi. Koodiin muutetaan tietenkin salasana.

autoform

Base.html ja replies.html tiedostot laitetaan /templates/ kansioon, kuten ohjeissa.

replies

Käynnistetään ohjelma,
python3 autoformed.py
Tulos: Traceback (most recent call last): File "autoformed.py", line 6, in from flask_sqlalchemy import SQLAlchemy ModuleNotFoundError: No module named 'flask_sqlalchemy'

Ei siis toimi, google auki ja tutkimaan. Alchemy ohjelma tarvii hieman lisäosia, asennetaan.

sudo apt-get install python3-flask-sqlalchemy

Ja uusi yritys

python3 autoformed.py
Tulos:

eitoimi

Etsitään paketinhallinasta onko tähän jotain ohjelmaa, sudo apt-cache search flask-wtf
Asennetaan tuo tarjottu python3-flaskext.wtf sudo apt-get install python3-flaskext.wtf

eitoimi

Ja käynnistetään ohjelma taas kerran, ja testataan. python3 autoformed.py

valmis

valmis

valmis


Harjoitus 7 - Laboratorioharjoitus 13.3.2020

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Tehtävä A, 11.03.2021 15:20 - 20:00

a) Ratkaise valitsemasi vanha arvioitava laboratorioharjoitus tältä kurssilta. (Löytyy DuckDuckGolla tai Googlella sekä linkeistä tältä sivulta).

Suunnataan Tero Karvisen sivuille ja haun kautta valitaan arvioitava labraharjoitus, numerogeneraattorilla.
https://terokarvinen.com/search/?q=Arvioitava+laboratorioharjoitus

valinta


Saimme arvottua tehtäväksi seuraavan: http://terokarvinen.com/2018/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-6-torstai-alkukevat-2018-5-op/

## LAMP Asenna LAMP (Linux, Apache, MySQL, PHP) ja testaa sen toiminta.

## Kuormitusta
Kerää kuormitustietoja koneelta koko harjoituksen ajalta. Analysoi tiedot tiiviisti aivan harjoituksen lopuksi.

## Sorkka ja Rauta Oy:n CRM
Tarvitsemme asiakastietokannan. Tee tietokanta, jossa on seuraavat asiakkaat:
- Kulta ja Kaivos ky
- Piilosana ry
- MetalliMake

Tee PHP-ohjelma, joka lukee nämä tietueet. Laita tämä sivu näkyviin osoitteessa http://sorkkacrm.example.com
Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla. Tässä harjoituksessa sivulle
pääsyä ei tarvitse rajoittaa salasanalla, vaan sen tule näkyä kaikkialle nettiin.

## Rosvoja porteilla
Onko koneellemme yritetty murtautua? (Kyllä). Etsi omalta paikalliselta koneeltasi todisteet tapauksesta, jossa koneellesi on yritetty murtatua. Analysoi tiiviisti tähän liittyvät tiedot.

## Sorkan sivut
Tee staattinen HTML5 weppisivu, jonka otsikkona (molemmat title ja h1) on "Sorkka ja Rauta Oy".
Laita sivu näkyviin osoitteeseen http://rauta.example.com/ . Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.

## Einarin esimerkki
Einari Vähä-aho ryhtyy koodaamaan. Tee einarille käyttäjä 'einari'.
Tee einarille esimerkkikotisivu PHP:lla ja laita se näkymään osoitteessa http://localhost/~einari/ .
Esimerkkisivun pitää tulostaa "Einari" käyttäen PHP:n print-funktiota.

LAMP (Linux, Apache, MySQL, PHP)

Linux

Asennetaan Debian 10.8.

asennus

asennus

Asennuksen jälkeen avataan kohentokehote, laitetaan suomalainen näppäimistö toimimaan, päivitetään paketinhallinta ja asennetaan tulimuuri. Emme käytä konetta SSH yhteyden kautta joten portteja ei tässä vaiheessa tarvitse avata.

setxkbmap fi
sudo apt-get update
sudo apt-get install ufw
sudo ufw enable

Apache

Asennetaan Apache ja käynnistetään se uusiksi.

sudo apt-get install apache2
sudo systemctl restart apache2

Varmistetaan sen toiminta

firefox "http://localhost"

apache2

sudo apt-get install munin
Ja muninin lokit saa firefoxilla auki
firefox /var/cache/munin/www/index.html

Kuormituksen seuranta

Asennetaan munin seuraamaan kuormitusta, http://munin-monitoring.org/

MariaDB

Seurataan Teron ohjetta Mariadb:n asennuksessa, http://terokarvinen.com/2018/install-mariadb-on-ubuntu-18-04-database-management-system-the-new-mysql/
Asennetaan Mariadb client ja server.
sudo apt-get install mariadb-client mariadb-server
Ja käynnistetään ohjelma
sudo mysql_secure_installation

Annetaan turvallinen salasana ja vastataan 'y' kaikkiin muihin kysymyksiin

mariadb

Luodaan samalla asiakastietokannat. Kirjautudaan mariadb:hen sisälle root käyttäjällä ja luodaan tietokanta 'asiakkaat' ja annetaan sille oikeudet muokata ainoastaan sen sisältämiä tietoja. Muistetaan taas antaa vahva salasana.

sudo mariadb -u root
CREATE DATABASE asiakkaat;
GRANT ALL ON asiakkaat.* TO asiakkaat@localhost IDENTIFIED BY 'clw8-OPSEC-0hjb';
exit

Sen jälkeen kirjaudutaan sisään asiakkaat tietokantaan
mariadb -u asiakkaat -p

asiakaslogin

Luodaan taulukko, tehdään kenttä nimelle ja yhteystapa (pitäähän meillä olla tiedossa tapa millä saada asiakkaaseen yhteys). use asiakkaat;
CREATE TABLE asiakkaat (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200), contact VARCHAR(20));

Varmistetaan vielä lopuksi että taulukko on luotuu
SHOW TABLES;

table tekeminen

Lisätään asiakkaat taulukkoon ja tulostetaan taulukon sisältö

INSERT INTO asiakkaat (name, contact) VALUES ("Kulta ja Kaivos ky", "0102030");
INSERT INTO asiakkaat (name, contact) VALUES ("Piilosana ry", "Piilotie 1b");
INSERT INTO asiakkaat (name, contact) VALUES ("MetalliMake", "make@metallimake.com");
SELECT * FROM asiakkaat;

tietojen lisäys

PHP-ohjelma

Seurataan Teron ohjetta, http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo/
Apache2 ja mariadb on jo asennettu, joten niitä ei tarvitse uudestaan asentaa. sudo apt-get install libapache2-mod-php php-mysql

Laitetaan apchessa käyttäjien kotihakemistot käyttöön. sudo a2enmod userdir

Editoidaan .conf tiedostosta 'if module' pois, jotta käyttäjät voivat käyttää sivuissaan PHP:ta. Tarkistetaan ensin PHP:n versio niin saamme .conf tiedoston nimen siitä samalla. php version

Oikea .conf tiedoston voi myös käytä katsomassa /etc/apache2/mods-available/ ja komennolla ls näemme tiedostot

Editoidaan tuo php7.3.conf tiedosto nano ohjelmalla. sudoedit /etc/apache2/mods-available/php7.3.conf

Ja muutosten jälkeen käynnistetään apache uudestaan

sudo systemctl restart apache2

Aina kun muutoksia tehdään on tärkeä tarkastaa että asiat toimivat. Tehdään kotihakemistoon public_html kansio ja sinne index.php tiedosto.
mkdir public_html
cd public_html
nano index.php

Index.php tiedostoon tehdään lyhyt php ohjelma testiksi.
< ?php print("Hei Maailma!"); ?>


Kuvassa näkyy näppäilyvirhe, print/" -> print(" Tämä aiheuttaa alla olevan ongelman.

Tarkastetaan toiminta:
firefox "http://localhost/~johan"

Sivu on toiminnassa mutta mitään ei tulostu, ei edes error viestiä. Vika ei siis todennäköisesti ole apachen asetuksissa, tarkastetaan php. Sielähän se vika oli, näppäinhäiriö. Korjataan ja koitetaan uudelleen.

Kopioidaan Teron koodi index.php tiedostoon ja laitetaan aikaisemmin luotu tietokanta sivulle näkyviin. Password kohtaan salasana mikä aikasemmin luotiin asiakkaat tauluun. Muutetaan viimeistä riviä, että saadaan näkyviin contact sarakkeen tiedot ja hieman eroteltua tietoja toisistaan | merkin avulla. Koodi löytyy Tero Karvisen ohjeesta: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo/

// public_html/index.php - Read MySQL from PHP
// (c) 2016 Tero Karvinen http://TeroKarvinen.com
// MySQL Login
$user='asiakkaat';
$password='OPSEC';
// Data Source Name i.e. connection details
$database=$user;
$dsn="mysql:host=localhost;charset=UTF8;dbname=$database";
// Open Connection, create new object of PDO class
$pdo=new PDO($dsn, $user, $password);
// Perform SQL Query
$pdoStatement=$pdo->prepare('SELECT * FROM asiakkaat;');
$pdoStatement->execute();
$hits=$pdoStatement->fetchAll();
// Print the $hits Array
foreach($hits as $row) {
echo "< p>".$row['id']." | ".$row['name']." | ".$row['contact']< /p>\n";
}
?>

Taulukko näkyviin sivulle http://sorkkacrm.example.com

Luodaan kansio sorkkacrm.example.com ja sen sisälle siirretään aikaisemmin tehty index.php tiedosto. mkdir sorkkacrm.example.com

Kopioidaan 000-default.conf tiedosto ja vaihdetaan sille nimi, näin ei tarvitse kaikkea kirjoittaa uusiksi.
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/sorkkacrm.example.com.conf

Ja editoidaan tuo uusi tiedosto.
sudo nano /etc/apache2/sites-available/sorkkacrm.example.com.conf

Otetaan käyttöön tuo uusi conf tiedosto ja default pois käytöstä.
sudo a2ensite sorkkacrm.example.com.conf
sudo a2dissite 000-default.conf

Vielä host tiedoston muutos, että tietokone ei yritä oikesti mennä tuonne sivulle, vaan hakee sen meidän omalta tietokoneelta, lisätään sinne 127.0.0.1 sorkkacrm.example.com

sudoedit etc/hosts

Apachen uudelleenkäynnistys ja sivujen tarkastus
sudo systemctl reload apache2

rauta.example.com

Tehdään samat toimet kuin aikasemmin, luodaan kansio ja index.html tiedosto

Muokataan index.html tiedostoa nano ohjelman avulla ja kirjoitetaan sinne lyhyt html sivu.

Luodaan rauta.example.com.conf tiedosto ja muokataan sen sisältö samalla tavalla kuin aikaisemmin
sudoedit /etx/apache2/sistes-available/rauta.example.com.conf

Ja otetaan se käyttöön
sudo a2ensite rauta.example.com.conf
Lisätään host tiedostoon uusi sivu.
127.0.0.1 rauta.example.com

Apachen uudelleenkäynnistys
sudo systemctl reload apache2
Ja sitten suunnataan osoitteeseen rauta.example.com ja katsotaan toimiiko.

Uusi käyttäjä ja hänelle sivut

Luodan käyttäjä Einari Vähä-Aho ja annetaan Einarille vahva salasana. sudo adduser einari

Luodaan Einarille public_html kansio. Tässä joudutaan tekemään sudo oikeuksilla einarille kansio, sen jälkeen tulee kansion oikeuden vaihtaa niin, että einarilla itsellä on niihin oikeus. Samalla myös kansion sisään tehdyt uudet tiedostot saavat samat oikeudet kuin itse kansio.
sudo mkdir public_html/
sudo chmod g+s public_html/
sudo chown einari:einari public_html/

Einarille tehdään valmis index.php tiedosto public_html kansion sisään ja laitetaan sinne php ohjelma tulostamaan "Einari".
< ?php print("Einari"); ?>

Ja sivusto pitäisi toimi osoitteessa localhost/~einari

Kuormitustiedot

Avataan munin osoitteessa /var/cache/munin/www/index.html ja tutkitaan sisältöä. Tilastoista selviää että kovinkaan raskasta tämä tekeminen ei ole tietokoneelle ollut. Mutta se oli odotettavissa.