Tenttiin kertaaminen

10.3.2018

Tein harjoituksen kotonani HP Pavilion 15-aw022no-tietokoneella, käyttöjärjestelmänä toimi Ubuntu 16.04 livetikulta.

Harjoituksen ohjeet sivulta http://terokarvinen.com

a) Ratkaise valitsemasi vanha arvioitava laboratorioharjoitus tältä kurssilta.

Harjoitukseksi valitsin viimevuoden alkukevään tehtävän.

Aluksi otin käyttöön suomenkielisen näppäimistön komennolla setxkbmap fi.

Tein salasanoille oman tiedoston nano salasanat.txt ja tallensin sen vain sisältäen yhden a kirjaimen. Ennen kuin tallensin sinne salaisia tietoja, vaihdoin tiedoston oikeuksia niin, että vain minä pystyn käsittelemään sitä. Komennolla sudo chmod go-rwx salasanat.txt poistin muilta oikeudet ja ls -l salasanat.txt tarkistin, että tämä tapahtui onnistuneesti. Tiedosto on nyt turvassa muilta ihmisiltä ja suunnitelmana oli tallentaa kaikki käyttäjätunnukset ja salasanat kyseiseen tiedostoon.

Asensin pwgenin ettei tarvitse omaa päätä päätä vaivata salasanoja tehdessä.
Sudo apt-get update && sudo apt-get install pwgen -y. Komennolla pwgen -s 15 saat vastaukseksi 15 merkin pituisia salasanoja.

Jokaiselle käyttäjälle jonka tein piti tehdä esimerkkikotisivut. Ennen kun loin käyttäjät tein polkuun /etc/skel/ uuden kansion public_html komennolla sudo mkdir public_html ja sinne index.php tiedoston komennolla sudoedit index.php. Tiedostoon kirjoitin vain Hello World. Näin jokaiselle käyttäjälle jonka loin tästä hetkestä eteenpäin tuli äsken tehty kansio ja tiedosto.

Asennetaan Apache, Mysql, PHP ja muutama käytännöllinen ohjelma.
sudo apt-get update && sudo apt-get -y install apache2 mysql-client mysql-server libapache2-mod-php php-mysql curl lynx.

Tuttuun tapaan Mysql kysyy rootti käyttäjälle salasanaa. Sen annettua ja asennusten valmistuttua mahdollistin PHPn ja käyttäjien kotisivut komennoilla
sudo a2enmod userdir ja sudoedit /etc/apache2/mods-available/php7.0.conf. Conffi tiedostosta piti muuttaa neljä viimeistä riviä kommenteiksi laittamalla risuaidan (#) niiden eteen. Seuraavaksi loin public_html kansion ja sinne tiedoston nimeltä index.php. Tiedoston sisältö, PHPn, Apachen ja omien kotisivujen onnistunut testi alla olevassa kuvassa.

apachetesti.png

Seuraavaksi loin käyttäjät. Jorma Mähkylä, Pekka Hurme, Ronaldo Smith, Håkan Petersson, Einari Mikkonen, Einari Vähäkäähkä ja Eija Vähäkäähkä olivat niitä vailla. Päätin käyttää käyttäjänimien teossa aina etunimen ensimmäistä kirjainta ja sukunimeä. Ääkkösiä ei sallita ja kaikki pienellä. Jos on sama etunimen kirjain ja sukunimi, seuraavalle laitetaan numero perään. Esim Einari Vähäkäähkä on evahakaahka ja Eija Vähäkäähkä on evahakaahka1. Uusi käyttäjä luodaan komennolla sudo adduser [käyttäjänimi], esimerkki: sudo adduser phurme. Kirjoitin kaikki käyttäjänimet ja salasanat alussa tehtyyn tiedostoon. Käyttäjiä tehdessä annoin vain koko nimen ja muut kohdat jätin tyhjäksi.

Piti myös luoda yksi tunnus sudo oikeuksilla. Loin Maijan tunnuksen samalla komennolla niinkuin kaikkien muidenkin. Käyttäjätunnus toivottiin olevan maija. Käyttäjätunnuksen tehtyäni annoin komennon sudo adduser maija sudo, joka antaa sudo oikeudet tälle.

Käyttäjät tehtyäni asensin SSHn. Sudo apt-get install ssh -y.
Testasin SSHn toimivuuden kirjautumalla Maijan käyttäjälle ssh maija@localhost. Ensimmäisellä kerralla kysyttiin, että haluatko varmasti jatkaa, yes. Kirjauduin onnistuneesti käyttäjälle, jolloin voidaan todeta SSHn ja käyttäjän toimivuus. Sitten vielä testasin sudo oikeudet komennolla sudo apt-get update. Päivitykset haettiin onnistuneesti, joten voidaan todeta kaiken olevan niinkuin pitää.

Seuraavaksi testasin, että kaikilla käyttäjillä on esimerkkikotisivut. Selaimella hain localhost/~[käyttäjänimi]. Kävin kaikki uudet käyttäjät läpi ja totesin, että kaikilla on onnistuneesti Hello World kotisivuillaan. Tässä myös voidaan todeta, että ollaan kaikki käyttäjät luotu onnistuneesti.

Sitten tietokantojen hei maailma. Kirjauduin xubuntu käyttäjälläni Mysql:lään roottina, mysql -u root -p.  Tein tietokannan nimeltä klöntit komennolla CREATE DATABASE klöntit CHARACTER SET utf8;. Sitten loin käyttäjän nimeltä klöntit ja annoin sille kaikki oikeudet tietokantaan klöntit komennolla GRANT ALL ON klöntit.* TO klöntit@localhost IDENTIFIED BY ‘jGTbWp9m5WbplpH’;.
Kirjauduin ulos rootilta, exit, ja kokeilin, että klöntit käyttäjä toimii. mysql -u klöntit -p. Annetuani salasanan ja onnistinuneesti kirjauduttuani käyttäjälle siirryin klöntit tietokantaan, use klöntit;. Tietokantaan loin pöydän kellot, missä on kaksi saraketta, nimi ja hinta komennolla CREATE TABLE kellot(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(1024), hinta VARCHAR(1024));. Sitten lisäsin sinne muutaman rivin. En keksinyt miten saan yhdellä komennolla molemille sarakkeille arvot, vaan tein hankalalla tavalla seuraavasti. Ensiksi tein Rolexille rivin INSERT INTO kellot(name) VALUES (‘Rolex’); ja sitten päivitin sille hinnan komennolla INSERT INTO kellot(hinta) VALUES (’10k€’);. Tein yhteensä kolme riviä näillä komennoilla. Kuvassa lopputulos.

kellotmysql.png

Ymmärrän ettei tietokannan nimi ole viisas ääkkösten takia, mutta tässä harjoituksessa sillä ei ole kauaskantoisia vaikutuksia.

Tämä pöytä piti printata Pekan kotisivulle. Kirjauduin tuttuun tapaan Pekan käyttäjälle ja aloitin kotisivujen muokkaamisen. Komennolla nano ~/public_html/index.php pääsin haluttuun tiedostoon käsiksi. Poistin Hello Worldin ja kopsasin PHP ohjelman koodin, mikä printtaa Mysql pöydän kotisivulle. Koodin löytää Tero Karvisen kotisivulta.

phpmytsql.png

Koodista tarvitsee vaihtaa vain alleviivatut parametrit.

Tallensin tiedoston ja kävin katsomassa tuloksen. Huomasin pienen virheen pöydässä ja kävin korjaamassa 1 ja 2 rivit.

Olin ensimmäisen Rolexi rivin hinnan antanut komennolla INSERT INTO kellot(hinta) VALUES (’10k€’);, mutta loput oikealla komennolla update kellot set hinta='[hinta]’ where name='[kellomerkki]’;. Korjasin ongelman poistamalla 2 rivin, delete from kellot where hinta=’10k€’;, ja sitten päivitin 1 rivi, update kellot set hinta=’10k€’ where name=’Rolex’;.

Kävin uudelleen katsomassa selaimella miltä näyttää. Hinnat puuttuu. Muokkasin viimeisen echo rivin seuraavanlaiseksi:
echo “<p>”.$row[‘id’].” “.$row[‘name’].” “.$row[‘hinta’].”</p>\n”;
Eli lisäsin vain “.$row[‘hinta’].” lausekkeeseen.

Nyt lopputulos oli mitä pitikin. Suljetaan SSH yhteys Pekalle, exit.

rolle.png

Suojataan tietokone palomuurilla ja tehdään siihe reijät SSHlle, HTTPlle ja HTTPSlle.

sudo ufw allow 22/tcp       Tekee SSHlle reijän
sudo ufw allow 80/tcp   
   Tekee HTTPlle reijän
sudo ufw allow 443/tcp
    Tekee HTTPSlle reijän
sudo ufw enable                  Ottaa palomuurin käyttöön, eli tukkii muut reijät

Komennot antaa kuittaukset rules updated ja Firewall is active and enabled on system startup.

Sitten uusi komento nimeltä wowstats, joka näyttää tietokoneen tilaa. Komennolla sudoedit /usr/bin/wowstats loin tiedoston johon kirjoitin vain “top”. Sitten annoin kaikille oikeuden käyttää komentoa sudo chmod ugo+x /usr/bin/wowstats. Kokeilin toimiiko antamalla komennon wowstats. Näytti halutusti tietokoneen tilan. Kirjauduin Jorman käyttäjälle SSHlla ja kokeilin vastaavasti komentoa. Toimii.

Viimeiseksi piti laittaa Jorman kotisivu näkymään osoitteesta sleep.example.com. Ensiksi vaihdoin Jorman kotisivun tekstin, että se hieman eroaa muista, echo “Welcome to Sleep.Example.Com!” ~/public_html/index.php. Tässä vaiheessa siirryin takaisin sudo käyttäjälle xubuntulle. Tein tiedoston sleep.example.com.conf komennolla sudoedit /etc/apache2/sites-available/sleep.example.com.conf ja sinne alla oleva tekstipätkä.

jormahost.png

Sitten otin sen käyttöön sudo a2ensite sleep.example.com.conf
Ja otin vanhan pois käytöstä sudo a2dissite 000-default.conf

Apache on käynnistettävä uudestaan, että muokkaukset tulevat voimaan
sudo systemctl restart apache2.service

Sitten vielä komennolla sudoedit /etc/hosts pääsin lisäämään sleep.example.comin. Nyt kun kirjoitan tällä tietokoneella selaimen osoitteeksi sleep.exapple.comm, sivusto näyttää Jorman public_html kansion tiedostoja. Laitoin vielä aliaksen, eli toimii myös kun haet www.sleep.example.com.

hosts.png

Kokeilin onko kaikki menny niinkuin pitääkin, eli laitoin selaimessa osoitteeksi sleep.example.com. Sivu näkyy, mutta nähtävästi echo komento aikaisemmin ei ole vaihtanut tervehdystä halutuksi vaan on vieläkin Hello World!. Se ei ole katastrofi, siirrytään takaisin Jorman käyttäjälle ja vaihdetaan tervehdys. nano ~/public_html/index.php ja tekstiksi mitä alunperin pitikin. Sivusto toimii myös kun laittaa alkuun www.

sleepi.png

Ylikirjoitin Apachen defaultti sivun sanomaan Hello! ettei ne jotku hakukoneet löydä mistä ollaan puhuttu .
echo “Hello!” | sudo tee /var/www/html/index.html.

Nyt olen tehnyt kaikki tarvittavat käyttäjät ja niille toimivat PHP-kotisivut. SSH toimii ja Maijalla on sudo tunnuksensa. Pekalle on tehty toimiva tietokanta ja printattu se hänen kotisivulleen. Jorma sai sleep.example.com sivustonsa.  Tietokone on suojattu palomuurilla ja siihen on tehty tarvittavat reijät. Wowstats komento toimii kaikilla käyttäjillä. Tiedosto missä on salasanat ja käyttäjätunnukset on suojattu muiden katseilta.

Tehtävä suoritettu! Aloitin noin kello 2100 maissa, ehkä vähän aikaisemmin. Kello on nyt 0005 maanantain puolella.

Lähteitä:
Harjoitus: http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-%e2%80%93-linux-palvelimet-ict4tn021-2-uusi-ops-alkukevaalla-2017-p1
Mysql ja PHP: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo
Mysql syntax: https://en.wikipedia.org/wiki/SQL_syntax
Käytin myös hyödyksi omia tehtäviä aikasemmista blogi postuksista.

(Edit 11.3.2018 00:27

Otin selvää miten iten Mysql:ssä lisätään yhdellä komennolla kaikkiin sarakkeisiin arvo.

<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">example</span>
 <span class="p">(</span><span class="n">column1</span><span class="p">,</span> <span class="n">column2</span><span class="p">,</span> <span class="n">column3</span><span class="p">)</span>
 <span class="k">VALUES</span>
 <span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'N'</span><span class="p">,</span> <span class="k">NULL</span><span class="p">);
</span>

)

Leave a Reply

Your email address will not be published. Required fields are marked *