H6 Moduli

Tehtävänanto:

h6 – DL perjantaina

Tämän tehtävän määräaika on jo w19 perjantaina 2018-05-11, koska tämä tehtävä korvaa viikon lähiopetustunnit.

a) Kultainen polku. Tee ensimmäinen versio modulistasi, joka toimii ainakin optimiolosuhteissa. Jos jokin säätö on poikkeuksellisen hankala, voit tehdä sen tässä versiossa käsin, ja dokumentoida ajamasi käskyt. (Valmis moduli tarvitaan vasta esitykseen ensi viikolla).

b) Kokeile moduliasi tyhjässä koneessa. Voit käyttää virtualboxia, vagranttia tai livetikkua.

c) Käyttäjätarina (user story): ketkä ovat modulisi käyttäjät? Mitä he haluavat saada aikaan modulillasi? Missä tilanteessa he sitä käyttävät? Mitkä ovat tärkeimmät parannukset käyttäjän kannalta, joita moduliin pitäisi vielä tehdä? Tähän c-kohtaan vain sanallinen vastaus, tämä kohta ei poikkeuksellisesti edellytä testejä tietokoneella.

d) Kertaa materiaali ja valmistaudu kokeeseen. Tätä d-kohtaa ei tarvitse raportoida.

A)

Moduulini asentaa orjakoneeseen ssh:n python3 paketin sekä python3-ase:n joka on lyhenne Atomic Simulation Environmentista jolla voidaan simuloida atomien käyttäytymistä pythonilla myös graafisessa muodossa.

Moduuliin pääsee täältä

B)

Kokeilumielessä laitoin vagrantin pyörimään ja yhdistin orjan käsin masteriin asentamalla salt-minionin ja muuttamalla minion tiedostoa.

vagrant

Vagrantilla sujui moitteetta.

C)

Näkisin moduulissa olevista työkaluista olevan hyötyä sellaiselle, joka työskentelee atomien kanssa enemmänkin. Työasemaan asentuu ssh sekä git jolla oletettavasti vaikkapa tutkija voi jatkaa työtään aiemmin perustamastaan git-reposta.

H5 Git & Github

Tehtävänanto:

 

h5

Poikkeuksellisesti pidempi palautusaika w18 perjantaina 2018-05-04 12:00 asti. Vappupäivänä ei ole opetusta. Hauskaa Wappua!

a) Valitse aihe omaksi kurssityöksi ja varaa se kommenttina aikataulusivun perään.

b) Julkaise raportti MarkDownilla. Jos käytät GitHub:ia, se tekee muotoilun automaattisesti “.md”-päätteisiin dokumentteihin.

c) Aja oma Salt-tila suoraa git-varastosta. Voit joko tehdä tilan alusta lähtien itse tai forkata sirottimen.

A) Kurssityökseni valitsin pythonin ASE (Atomic Simulation Environment) asennuksen saltilla sekä orjille ssh asennuksen

B)Githubin Markdown

C) Päätin kokeilla Tero Karvisen sirotinta.

Sirotin laittaa tuoreen käyttöjärjestelmän salt-minion kelpoiseksi kahdella komennolla, jotka ovat mainittu github sivustolla.

 

 

H4 Pillars

Tehtävänanto

h4

“a) Opiskele yllä aikataulussa olevat artikkelit. Noissa artikkeleissa opetetaan ne asiat, joilla läksyt saa tehtyä. Tätä lukutehtävää ei tarvitse raportoida. Luettava materiaali on kunkin tapaamiskerran kohdalla.

b) Tee kahdella orjalla esimerkki, jossa orjat saavat eri muuttujan pilarista. Tarkista ‘pillars.items’, että kummalekin orjalle mene eri tieto. Tee jokin muu kuin tunnilla tehty sshd-esimerkki.

c) Tee kahdella orjalla esimerkki, jossa toinen orja saa muuttujan pilarista ja toinen käyttää oletusarvoa (pillar.get). Tee jokin muu kuin tunnilla tehty sshd-esimerkki.”

Harjoituksessa käytän digitaloceanilta virtuaalikonetta, omaa kannettavaa johon luon myös vagrantilla virtuaalisen käyttöympäristön.

B & C) Eri muuttuja pilarista

Loin orjakoneille erinäköiset oletussivut localhost osoitteeseen, käyttäjä kissa saa salaista tietoa sivun ja koira käyttäjä saa moikka-sivun.

Alla init.sls tiedosto joka löytyy niin /srv/salt/apache kuin myös /srv/pillar/apache kansioista.

init.sls käyttää oletuksena “Moikkaa” ellei se löydä pilarin asetuksista sopivaa.

install_lamp:
   pkg.installed:
     – pkgs:
     – apache2
     – libapache2-mod-php
     – php

/var/www/html/index.php:
   file:
     – managed
     – source: salt://index.php
     – template: jinja
     – context:
php: {{ pillar.get(‘php’,”Moikka”) }}
   – require:
     – pkg: install_lamp

/var/www/html/index.html:
   file:
     – absent

apache2service:
   service.running:
     – name: apache2
      – watch:
      – file: /var/www/html/index.php

Tiedosto muuttaa jinjan muutujan mukaan muuttujaa ‘php’ joka on muuttuja index.php kotisivutiedostossa.

Tässä index.php tiedosto:

<html>
<head>
<title> {{ php }}</title>
</head>
<body>
<?php echo ‘<p>Hello World</p>’; ?>
</body>
</html>

Laitoin muutokset myös saltin top.sls fileen, joka pyrkii että kaikilla orjilla olisi apache tila

base:
‘*’:
– apache

Myös pillariin tein oman top.sls filen joka näyttää seuraavalta:

base:
kissa:
– kissa

Salainen topfile pyrkii saamaan käyttäjän kissa tilaan kissa, johon on asetettu edellämainitun index.php:n salainen muutuja.

php: salaista tietoa!

Seuraavaksi komennolla sudo salt ‘*’ state.highstate orjakoneet asensivat tarvittavat komponentit päästäkseen tavoitetilaan ja lopputulos näytti seuraavalta:

Vasemmalla käyttäjän koira localhost-sivu oikealla käyttäjän kissa (salaista tietoa)

pilarisalaisuuksia

 

 

 

H3 Jinja & States

Harjoituksen 3 tehtävänanto:

“a) Opiskele yllä aikataulussa olevat artikkelit. Noissa artikkeleissa opetetaan ne asiat, joilla läksyt saa tehtyä. Tätä lukutehtävää ei tarvitse raportoida. Luettava materiaali on kunkin tapaamiskerran kohdalla.

b) Tiedosto muotista: tee yksinkertainen SLS-tilatiedosto, joka laittaa muuttujan tiedostoon. Käytä jinjan kontekstimuuttujaa (template: jinja, context: …).

c) SLS tilaa Jinjalla: tee yksinkertainen SLS-tilatiedosto, joka käyttää for-in -silmukaa. Voit esimerkiksi tehdä kolme tiedostoa silmukalla. (Tässä tehtävässä siis käytetään jinjaa vain SLS-tiedoston sisällä, älä sotke samaan esimerkkiin tekstitiedostojen sisällön muuttamista.)

d) SSH-demonin portti: tee tila, joka asentaa SSH-demonin valittuun porttiin. Käytä portin valintaan Jinjaa, siten että sshd_config:issa “Port:”-kohdan arvo tulee Jinjan muuttujasta.

e) Kokeile jonkun toisen opiskelijan tekemää Salt-tilaa. Kokeiltava tila voi olla mistä vain harjoituksesta. Opiskelijoiden raportteja ja koodeja löydät tämän sivun perästä kommenteista.”

B) SLS-tila Jinja-muottia hyödyntäen

Tein muutoksia lamp.sls tilaan, jotta jokaisen orjakoneen kotisivu tervehtisi uutta käyttäjää tämän omalla id:llä. Aiempaan lamp.sls tilaan lisäsin vain yhden rivin.

Aikaisemmasta harjoituksesta tuttu lamp tila asentaa siis apache2, sekä poistaa apache2-oletussivun ja muuttaa sen käyttäjän omaksi.

Alla otos tilasta

/var/www/html/index.php:
file:
– managed
– source: salt://index.php
template: jinja

Seuraavaksi muutin index.php tiedostoa seuraavasti:

jinjaphpsiv

Ajettuani tilan komennolla sudo salt ‘*’ state.apply lamp, tulos näytti seuraavalta.

tulosjinjaselaintervehdys

C) Jinja silmukka

Tehtävässä käytin apuna tero karvisen jinja saltstate esimerkkiä.

Loin kansion /srv/salt/multi ja sinne tiedoston init.sls

{% for file in [‘eka.txt’, ‘toka.txt’, ‘kolmas.txt’] %}

/tmp/testit/{{ file }}:
file.managed:
– source: salt://multi/testi.txt
– makedirs: True
– template: jinja
– context:
file: {{ file }}
{% endfor %}

Tämän jälkeen tein vielä varsinaisen testi.txt tiedoston

Hei
Tämä on {{ file }} !

Tämän jälkeen ajoin tilan  sudo salt ‘*’ state.apply multi ,
jonka jälkeen tulos näytti seuraavalta:jinjalooptulos

Tilan ajo onnistui, jolloin luotiin kansio testit sekä tekstitiedostot eka, toka ja kolmas.

eka

D) SSH-portin vaihto jinjalla

Salt-masterin roolissa on virtuaalikone, jolta suoritan salt komennot SSH-yhteyden avulla ja kannettava tietokoneeni toimii orjana. Oli mielenkiintoista havaita ettei asetusten säätö (olettaen etteivät säädöt riko yhteyttä) vaikuttanut millään tapaa toiminnallisuuteen, jonka mahdollistaa pull-arkkitehtuuri.

Salt tilaa varten loin kansion /srv/salt/sshd jonka init.sls tiedosto näytti seuraavalta.

openssh-server:
pkg.installed

/etc/ssh/sshd_config:
file.managed:
– source: salt://sshd/sshd_config
– template: jinja
– context:
portinnro: 8888

sshd:
service.running:
– watch:
– file: /etc/ssh/sshd_config

ja sshd_config tiedostoon

# What ports, IPs and protocols we listen for
Port {{ portinnro }}
Protocol 2

Ajettuani tilan sudo salt ‘*’ state.apply sshd sain tulokseksi, että portti muutettiin ja palvelu käynnistettiin uudelleen.

portinmuunnos

E) Toisen opiskelijan tila

Harjoituksessa kokelin Jami Jernvallin kohdan F tilaa

Jamin tila toteuttaa virtual hostausta, Jamin mallista poiketen tein kansion apache ja sinne tiedostot init.sls vp.conf ja kopioin hosts tiedoston polusta /etc/hosts

vp.conf tiedosto näytti seuraavalta:

Screenshot_2018-04-16_15-01-55

hosts tiedostoon täytyi lisätä rivi 127.0.0.1 mopo.example.com.

Tiedostoon init.sls kirjoitettiin seuraavaa:

inint

Tilan ajon tulos näytti seuraavalta:

mopotulos

Koska vp.conf tiedosto viittaa käyttäjän mopo kotisivuun täytyi myös luoda käyttäjä mopo komennolla sudo adduser mopo ja vaihtaa kyseiselle käyttäjälle su mopo.

Seuraavaksi tein kansion /home/mopo/public_html ja kansioon tiedoston index.html ja lopputulos oli seuraava, sivu mopo.example.com toimi.mopopsiv

Lähteet: Miko Lähdesmäki, Jami Jernvall, Tero Karvinen

H2 Pkg-File-Service

Harjoituksessa käytetään HP:n kannettavaa tietokonetta salt-minionina ja salt-masterina toimii DigitalOceanilta virtuaalikone.

Tehtävänanto:

h2

Tehtävät tästä eteenpäin (h2, h3…) tulee ratkaista tekemällä Saltin tila (state), ellei tehtävänannosta muuta ilmene. Tee ensin käsin, automatisoi vasta sitten. Muista testata lopputulos.

a) Opiskele yllä aikataulussa olevat artikkelit. (Tätä lukutehtävää ei tarvitse raportoida). Luettava materiaali on kunkin tapaamiskerran kohdalla, esimerkiksi nyt “2. Package-file-server. […] Luettavaa: Karvinen 2018: Pkg-File-Service – Control Daemons with Salt..”

b) Laita käyttäjien kotisivut toimimaan Apachella.

c) Laita PHP toimimaan käyttäjien kotisivuilla. (Huomaa, että PHP toimii oletuksena kaikkialla muualla kuin käyttäjien public_html-kotisivuilla.)

d) Rakenna tila (state), joka tekee Apachelle uuden nimipohjaisen virtuaalipalvelimen (name based virtual hosting). Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.

e) Tee tila, joka laittaa esimerkkikotisivun uusille käyttäjille. Voit laittaa esimerkkikotisivu /etc/skel/:iin, niin se tulee automaattisesti ‘adduser tero’ komennolla käyttäjiä luodessa.

f) Eri asetukset. Tee Package-File-Service tilalla eri asetuksia kuin ne, mitä tehtiin tunnilla; ja eri kuin mitä teit/teet h2 muissa kohdissa. Voit muuttaa jotain toista asetusta samoista demoneista tai valita kokonaan eri demonit.

B) Apache & kotisivut

Muokkasin aiemmin kirjoitettua lamp.sls tiedostoa muuttamaan myös index.php tiedostoa ja poistamaan apachen oletus-sivun.

lampputila

Kun kyseinen tila on ajettu oletus-sivu muuttuu tiedoston /srv/salt/index.php :n mukaiseksi.

(Livetikun vuoksi kuvakaappauksessa näkyy vielä vanha minion ‘xubuntu’, joka poistetaan komennolla sudo salt-key -d xubuntu)

kotisivutapassi

C) PHP

Käyttäjän kotisivun kirjoitin php:llä, mutta lisäsin tilan asentamaan myös php-paketin lisäämällä rivin -php

install_lamp:
pkg.installed:
– pkgs:
– apache2
– libapache2-mod-php
– php

phptilatulos

D) Name based virtual hosting

Lisäsin lamp.sls tiedostoon seuraavat rivit:

/etc/apache2/apache2.conf:
file:
– managed
– source: salt://apache2.conf
– require:
– pkg: install_lamp

Kyseinen rivi muokkaa apache2.conf tiedostoa lisäämällä rivit, jotka mahdollistavat nimipohjaisen virtuaali hostauksen.

namebasedvirtualhost

E) Esimerkkikotisivu /etc/skel/

Muokkasin lamp.sls tiedostoa luomaan /etc/skel sivulle index.php kotisivun

skelslstied

skelkotisivutulos

kissantiedostot

Käyttäjälle kissa kopioitiin skellistä index.php sivu.

F) Package-File-Service tila

Kirjoitin tilan toimisto.sls joka asentaa libreofficen, luo /etc/skell/ kansioon ohjeet libreofficen käyttöön sekä tarkastaa pyöriikö ohjelma.

toimistotila

Palvelinten hallinta H1 Salt-stack

Harjoituksissa käytän kannettavaa tietokonettani sekä digital oceanin tarjoamaa virtuaalikonetta

Kannettava:

  • HP ProBook 655 G1
  • HDD: 350 GB
  • 4GB RAM

Tehtävänanto:

a) Lue virallisesta Salt Getting Started Guide -kirjasta luvut Understanding SaltStack (noin 8 alasivua) ja SaltStack Fundamentals (6 alasivua, ei tarvitse asentaa demoympäristöä) ja SaltStack Configuration Management: Functions (1 alasivu). (Tätä lukutehtävää ei tarvitse raportoida).

b) Silmäile Laineen 2017 varastossa olevia salt -asetuksia. (Tätä lukutehtävää ei tarvitse raportoida).

c) Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.

d) Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.

e) Kerää laitetietoja koneilta saltin grains-mekanismilla.

f) Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).

g) Vapaaehtoinen: asenna ja konfiugroi jokin palvelin Saltilla. (package-file-server)

C)Salt-stackkia varten asensin salt-masterin sekä salt-minionin komennolla:

$sudo apt-get -y install salt-minion salt-master

Olennaista on selvittää masterin ip-osoite komennolla:

$ hostname -I

Minionille on määriteltävä missä ip-osoitteessa master sijaitsee sekä mikä on kyseisen minionin id (nimi) joka määritellään seuraavasti:

$sudoedit /etc/salt/minion

master: 10.0.0.89

id: tietokone

Jotta muutokset saataisiin voimaan, tulee salt-minion.service käynnistää uudestaan komennolla:

$sudo systemctl restart salt-minion.service

Tarkistin vielä varmuuden vuoksi service salt-minion statuksen jossa ilmeni ongelmia avainten kanssa. Tässä tapauksessa olin varma, että käytössäni on oikea Salt Master ja poistin julkisen avaimen ja käynnistin palvelun uudestaan, jolloin palvelu käynnistyi oikein.

Screenshot_2018-04-03_18-37-43

D),E)Kokeilin suorittaa Joona Leppälahden tekemästä tilasta joka asentaa kohdekoneeseen apache2 ja siihen liittyvät kirjastot.

Screenshot_2018-04-03_19-01-54

Kyseinen “tila” (state) toimi kuten pitikin, sillä osoitteessa localhost näkyi apache2:sen oletus sivu.

C) Alla olevalla komennolla sain näkyviin tiedot minion-koneestani

$sudo salt ‘*’ grains.items|less

Screenshot_2018-04-03_19-06-57

H7 Laboratorioharjoitus

Ninjatietokantaan liittyvän tehtävän aloitin LAMP-pinon asennuksella, komennolla sudo apt-get update && sudo apt-get -y install apache2 mysql-client mysql-server libapache2-mod-php php-mysql

Seuraavaksi täytyi säätää tuttuun tapaan apache2 asetuksia komennoilla sudo a2enmod userdir

sudoedit /etc/apache2/mods-available/php7.0.conf täältä tiedostosta täytyy kommentoida ifmodule käyttämättömäksi, mikäli tahtoo sallia php:n

Viimeisenä tietenkin sudo systemctl restart apache2.service jolla käynnistetään palvelu uudestaan.

Seuraavaksi loin MySQL tietokannan johon listasin kolme ninjaliikettäScreenshot_2018-03-11_20-08-50

Aluksi toki täytyi luoda käyttäjä rajallisimmilla käyttöoikeuksilla.

Palomuuri saatiin käyttöön komennolla sudo ufw allow22/tcp portilla 22 aukko ssh-yhteyttä varten sekä kaksi muuta aukkoa portteihin 80 ja 443 web-palvelinta varten.

H6 Automaatio ja Ohjelmointiympäristöt

Kirjoita ja suorita “Hei maailma” kolmella kielellä. Asenna tarvittavat ympäristöt.

Kirjoitin ensimmäisen “Hei maailma” printin pythonilla.

Alla olevalla komennolla saadaan tarvittavat osat pythonia varten.

sudo apt install -y python3

Seuraavaksi loin nano hello.py tekstitiedoston sekä kirjoitin sinne seuraavaa:nanopy

Komento python hello.py suorittti kyseisen koodinpätkän ja tulos oli seuraava:outputtia1

Seuraavaksi kieleksi valitsin C:n. C-ohjelmien pyöritys vaatii hieman enemmän vaivaa kuin esimerkiksi yksinkertainen python ohjelma tai vaikka html tiedosto.

Tiedostot täytyy muunmuassa kääntää sopiviksi esimerkki tapauksessa komennolla gcc -o hello hello.c

Itse koodi suoritetaan komennolla ./hello ckoodi

Kolmanneksi kieleksi valitsin perl-kielen

Ensiksi tarkistin mikä versio perlistä löytyy komennolla :

perl –version

ja tämän jälkeen kirjoitin koodinpätkän komentokehotteeseen seuraavasti:

 perl -e ‘print “Hei Maailma!\n”‘

Ja lopputuloksena tulostui “Hei Maailma!” -teksti ruutuun:perlterve

 

 

H5 SSH

A) Asenna SSH-demoni

Aloitin komennoilla sudo apt get update ja sudo apt install -y ssh, jolloin open ssh serveri ja siihen tarvittavat osat.

B) Tulimuuri

Kytketään tulimuuri päälle sudo ufw enable ja siihen aukko SSH:lle porttiin 22 komennolla: sudo ufw allow 22

C) SSH tiedostojen siirto

Kokeilua varten loin tekstitiedoston jonka aion siirtää paikalliselta koneelta toiseen komennolla scp /home/xubuntu/tiedosto käyttäjä@ip.osoite.scpsiirto

D) Julkisen avaimen menetelmä

Paikallisella koneella luotiin oma avain komennolla  ssh-keygen -t rsa jolloin kone loi ssh avaimen.

Seuraavaksi julkinen avain kopioitiin omalle tietokoneelle komennolla ssh-copy-id käyttäjä@kohde.ip.osoite

Tämän jälkeen voidaan ottaa yhteys koneeseen ilman salasana kyselyjä.

J) Sysstat

Sysstat kerää tietoa kaikesta järjestelmän resurssien käytöstä.

Komennolla mpstat saadaan näkyviin prosessoritilastoja:

sysstat

Komennolla pidstat saadaan näkyviin prosessien tietoa

pidstat

H4 Virtuaalipalvelin

A) Normaalikäyttäjän oikeudet

Harjoituksessa käytin Digital Oceanin tarjoamaa halvinta mahdollista virtuaalikonetta.

Ensiksi tein palomuuriin reiän SSH:lle portista 22 sudo ufw allow 22/tcp. Poikkeus saatiin käytäntöön komennolla sudo ufw enable

Koneelle lisäsin yhden jere käyttäjän joka lisättiin myös sudo, adm ja admin ryhmiin saaden täten oikeudet kyseisille toiminnoille.

Seuraavaksi lukittiin root käyttäjän salasana komennolla sudo usermod –lock root

SSH yhteys lukittiin muokkaamalla sshd_config tiedoston vaihtamalla kohdan PermitRootLogin vaihtoehto yes-vaihtoehdosta no-valintaan.

Yhteys muodostui komennolla ssh jere@(IP-osoite tähän).

S) Apache oletus-sivu

Screenshot_2018-02-11_15-58-52

Mielenkiintoista oli todeta kuinka kirjoitin selaimeen ip-osoitteen jo ennenkuin palomuurissa oli apachelle edes aukkoa. Heti kun kirjoitin komennot sudo ufw allow 80/tcp sekä sudo ufw enable sivu näkyi samantien selain ikkunassa.

Y) Lokitiedot murtautumisista

Lokia kirjautumistapahtumista pääsin seuraamaan komennolla sudo less /var/log/auth.log .Lokitapahtumissa ei kuitenkaan tällä hetkellä näkynyt kuin omat kirjautumiset järjestelmään.

murtoja

B) SCP-komento

Loin tiedoston index.html johon kirjoitin “Terveppäterve!”. Siirto SCP:llä tapahtui seuraavasti omalta koneelta palvelimelle. scp index.html jere@174.138.13.63:/var/www/html/

Ongelmia ilmeni kuitenkin lupien kanssa:problme

C) PHP-sivu

phphassakka

Loin tiedoston index.php johon kirjoitin seuraavan php-scriptin, joka tulostaa kävijän ip-osoitteen.