Harjoitustyö 2: WWW-palvelimen asennus ja konfigurointi
Harjoitustyössä asennetaan ja konfiguroidaan WWW-palvelin. Palvelimen toiminta tulisi testata (mahdollisesti virtuaalisen) verkon yli toiselta koneelta käsin, jos vain suinkin mahdollista. Tällä kertaa virtuaalikoneiden käyttö harjoitustyön toteutukseen on peräti suotavaa. Asennetun palvelimen ei tarvitse olla näkyvissä julkisessa internetissä. Harjoitustyön voi siis tehdä asentamalla Linux virtuaalikoneeseen ja testaamalla palvelimen toiminta käyttämällä oikealla fyysisellä koneella toimivaa selainta. Asiakaskoneen ei tarvitse käyttää Linuxia käyttöjärjestelmänä.
Kuten 1. harjoitustyössä, harjoitustyöstä palautetaan oppimispäiväkirja, mielellään ihan tavallinen tekstitiedosto, tosin OpenOffice-dokumenttikin käy. Oppimispäiväkirjasta pitäisi selvitä miten harjoitustyö eteni, mitä komentorivikomentoja suoritettiin ja kuinka paljon eri vaiheisiin tuli käytettyä aikaa. Jos jonkin harjoituksen osa-alueen toteutus ei onnistunut, niin oppimispäiväkirjasta pitäisi selvitä oma arvio epäonnistumisen syystä.
Harjoitustyötä varten saa tarvittaessa laitokselta käyttöön oman virtuaalikoneen. Laitoksen puolesta asennettu virtuaalikone tulee olemaan verkkoyhteyksiltään rajoitettu (se ei tule olemaan näkymään laitoksen verkon ulkopuolelle).
Tehtävänä on asentaa ja konfiguroida nimipohjainen VirtualHost Apache WWW-palvelimeen. Asennuksen pitää tukea SSL-kryptausta siten, että käytetyllä SSL-sertifikaatilla on sama nimi kuin konfiguroidulla VirtualHostilla. Palvelimella suoritetaan PHP-skriptejä ja suojatun yhteyden takaa myös CGI-skriptejä. Valmiiksi asennetulla palvelimella pitää olla yksi PHP-skripti, joka hakee tietoja samalla palvelimella sijaitsevasta tietokannasta ja CGI-skripti, joka suoritetaan tavallisen käyttäjän oikeuksin, mutta vain SSL-kryptatun yhteyden yli.
Harjoitustyön vaiheet siis ovat:
- Apachen asennus
- SSL/TLS tuen käyttöönotto Apachessa
- Sertifikaatin generointi. Sertifikaatti allekirjoitetaan Linux-ylläpito kurssin virallisella CA:lla osoitteessa http://db.cs.helsinki.fi/~jjaakkol/linux-yp/
- Apachen PHP-tuen asentaminen ja konfigurointi
- Tietokannan asennus: Postgres tai MySQL
- Alustetaan tyhjä tietokanta ja lisätään tietokantaan käyttäjätunnus ja tunnukseen liittyvä salasana.
- Luodaan tietokantaan tietokantaan ainakin yksi taulu (katso esimerkki)
- Asennetaan PHP-skripti, joka ottaa yhteyden tietokantaan ja tekee yksinkertaisen tietokantakyselyn (katso esimerkki) ja muotoilee kyselyn tuloksen HTML-muotoon.
- Palvelimelle asennetaan CGI-skripti, joka toimii käyttäjän oikeuksin WWW-serverin oikeuksien sijasta. Asennettu CGI-skripti pitää myös olla suojattu SSL-kryptauksella!.
Harjoitustyön palautus
Harjoitustyö palautetaan tar.bz2 pakettina, jossa on erillisinä tiedostoina:- Oppimispäiväkirja
- Apache VirtualHost -konfiguraatio (eli apachen oletuskonfiguraatioon lisätyt direktiivit)
- PHP-skriptin ja CGI-skriptin tulosteet http-otsakkeineen (wget-komennon --save-headers optio)
SQL-esimerkki tietokantaan luotavasta taulusta:
create table movies (name varchar, year integer); insert into movies values ('Holy Grail', 1975); insert into movies values ('Life of Brian', 1979); insert into movies values ('The Meaning of Life', 1983);
PHP-skripti esimerkki:
<html> <title>Movie list</title> <body> <h1>Selected list of great movies</h1> <table> <? // Insert your own database settings here $conn=pg_Connect("host=localhost port=10001 password=fooblah dbname=jjaakkol"); $result=pg_exec("select * from movies"); while ( $arr = pg_fetch_array ($result) ) { echo '<tr><td>'. $arr["name"] . '</td><td>' . $arr["year"] . '</td></tr>'; } pg_close($conn); ?> </pre> </html>
Suoritettava CGI-skripti
Skripti kertoo minkä käyttäjän oikeuksin skripti suoritettiin ja skriptin tulostamat ympäristömuuttujat kertovat apachen ja ssl:n konfiguraatiosta.#!/bin/sh echo "Content-Type: text/plain" echo "" echo "-----------------------------" echo "this CGI process run by : `id -a`" echo "-----------------------------" /bin/date echo "-----------------------------" ulimit -a ulimit -Ha echo "-----------------------------" env echo "-----------------------------"