Linux palvelimet H3

000-default.confTehtävässä käytetyt harjoitukset löytyvät osoiteesta : linux palvelimet.
Kurssin opettajana toimii Tero Karvinen.

Harjoitus toteutetaan jo aikaisemmassa harjoituksessa käytetyllä Lenovo T470P tietokoneella. Käyttöjärjestelmä on ubuntu 16.04.3 joka on asennettu Virtualbox virtuaali ympäristöön. Harjoitus toteutettiin 10.09.2017 klo 22.00 ja klo 01.00 välisenä aikana.

a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla. Tämä a-kohta on vaihdettu.

A. Aloitan tehtävän asentamalla Apache.n, ennen tätä syötän komennon

“sudo apt-get update”

jotta pakettilistat tulevat ajan tasalle.

Apache palvelinohjelman saa asenettua komennolla

“sudo apt-get install apache2”.

Kun ohjelma on asentunut, testaan sen toimivuuden. Tämä tapahtuu helpoiten avaamalla selaimen ja menemällä osoiteeseen 127.0.0.1 (localhost), toinen vaihtoehto on mennä koneen omaan ip-osoitteeseen. Tämän saa selville ajamalla komennon “hostname -I”, tässä tapauksessa koneen oma ip on 10.0.2.15.

Luon tehtävää varten oman kotikansioni (home/tatu) alle public_html kansion, komennolla “mkdir public_html”

Tämän jälkeen mahdollistan käyttäjän kotikansion käytön Apache.a (userdit-module), tämä tapahtuu komennolla

“sudo a2enmod userdir”

Jotta muutokset tulisivat käyttöön, pitää palvelin käynnistää uudestaan.
Tämä tapahtuu komennolla

“sudo service apache2 restart”.

Tämän voi testata menemällä selaimessa jo testattuihin osoiteisiin (localhost, oma ip) ja lisäämällä osoitteen perään “/~[käyttäjä]/”. Tässä tapauksessa siis esim. 127.0.0.1/~tatu/.

Luon “public_html” kansioon index.html tiedoston,
laitan sivulla lukemaan jo klassikoksi muodostuneen tervevehdykse “Hello World!”.
Näin voin myös jatkotestata palvelimen toimivuutta.
Koska luon kansion omassa kansiossani, en käytä tähän sudo komentoa. Näin sen oikeudet pysyvät käyttäjällä, eivätkä pääkäyttäjällä. Luon tiedoston käyttäen nano.a, “nano index.html”.

Example.com

Luon “public_html” kansion alle uuden kansion nimelta “example.com”. Teen tämän yksinkertaisuuden takia, jotta kaikki tähän tehtävään liittyvät sivut ovat saman polun varrella.
Luon uuteen kansioon uuden index.html tiedoston mutta lisään siihen “Hello world!” lisäksi “example.com”, näin pystyn helposti tunnistamaan toimiiko dokumenttijuuri.

Luon /etc/apache2/sites-enabled sudoedit.a käyttäen tiedoston nimelta “example.conf” ja lisään siihen seuraavat rivit:

<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /home/tatu/public_html/example.com
</VirtualHost>

Tämän jälkeen moukkaan Hosts tiedostoa joka sijaitsee /etc/ hakemistossa. Käytän tähänkin sudoedit.a.
Teen tiedostoon lisäyksen jossa laitan oman ip-osoiteeni (10.0.2.15) osoittamaan sekä www.example.com että example.com.

Käynnistän vielä palvelimen uudestaan “sudo service apache2 reload” ja testaan että muutokset toimivat.

 

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

B. Tätä tehtävää varten seuraan apache2.n lokeja, nämä sijaitsevat “/var/log/apache2/”. Käytän lokien sauraamiseen komentoa

“tail -f [tiedosto]”

joka tuli jo tutuksi aikaisemmasta tehtävästä.

Teen ensimmäiseksi onnistuneen sivulatauksen. Toteutan tämän menemällä selaimella osoitteeseen 127.0.0.1 (localhost), seuraan access.log tiedostoa.

Eli: ensimäisenä on osoite mistä pyyntö tulee, tässä tapauksessa 127.0.0.1 (localhost). Osoitteen perässä on kaksi “-” merkkiä peräkkäin, tämä nähtävästi viittaa tietoon mikä ei ole saatavilla. Ymmärtääkseni toinen noista “-” merkeistä kertoisi käyttäjän joka sivua pyytää. Tämän jälkeen päiväys, aika sekä aikavyöhyke. Seuraavaksi kerrotaan mitä metodia käytetään tiedon käsittelemiseen, tässä tapauksessa GET metodia (tiedon pyyntö). / merkintä kertoo mistä tietoa haetaan, tässä tapauksessa jos ymmärsin oikein tämä sijaitsee /var/www/html. Tämän jälkeen tieto mitä http protokollaa käytetään, tässä tapaukesssa 1.1. Koodi 200 kertoo että onnistuneesta sivulatauksesta, toisella rivillä esiintyy koodi 304, tämä viittaa siihen että tiedostoa ei ole muutettu edellisen latauksen jälkeen joten sitä ei tarvitse uudelleen ladata.
Seuraava luku kertoo latauksen koon tavuina. Tämän jälkeen tulee HTTP request header joka on sivusto viittaus lataukseen (Jos kyseessä on esim. Kuva, tässä pitäisi olla osoite jossa kuva on tai siinä on linkki siihen). Seuraavaksi tulee tietoa käyttäjän järjestelmästä sekä selaimesta. X11 viitta kommukaatioprotokollaan joka mahdollistaa ikkuna (window) tyylisen käytön.

Tästä voimme päätellä että ensimmäinen rivi on itse sivusto ja toinen rivi viittaa kuvaa joka ladattavalla sivustolla on.

Epäonnistuneessa sivulautauksessa käytän samaa osoitetta kuin aikaisemmassa mutta lisään siihen “/koe” = 127.0.0.1/koe. Seuraan samaa access.log tiedostoa kuin aikaisemmin.

Loki merkinnät on lähes identtisiä edelliseen, poikkeuksena että sivuston lataukseen viittavalla rivillä on koodi 404, mikä tarkoittaa että haettua resurssia ei ole löytynyt.

h) Tee Apachelle uusi sivu, joka näkyy suoraan palvelimen pääsivulla, mutta jonka sivuja voi muokata normaalin käyttäjän oikeuksilla (name based virtual host, DocumentRoot käyttäjän kotihakemistoon).

H. Apachen oletussivu sijaitsee “/var/www/html/index.html”. Korvasin tämän omalla index.html tiedostolla. Jos ymmärsin tehtävän antoa oikein, apache.n asennuksen yhteydessä annettu komento “sudo a2enmod userdir” mahdollistaa sen että käyttäjät voivat hallinnoida verkkosivujaan jotka sijaitsevat heidän public_html kansiossa.

Edit 05.10.2017. Tähän korjaus, tehtävän annon mukaan käyttäjän tulisi voida muokata tiedostoa mutta se ei ole mahdollista jos tiedosto sijaitsee “/var/www/html/” ilman pääkäyttäjän oikeuksia. Oikea ratkaisu olisi ollut muokata “000-default.conf” tiedosta muuttamalla “DocumentRoot” sekä “<directory>” osoittamaan käyttäjän kotikansion public_html kansioon.

Lähteet:

http://terokarvinen.com/2017/aikataulu-linux-palvelimet-ict4tn021-4-ti-ja-5-to-alkusyksy-2017-5-op

Linux Server – Task 5: Apache Name-Based Virtual Hosting

https://httpd.apache.org/docs/1.3/logs.html