Apache-www-palvelimen ominaisuudet
Käydään läpi kaksi hyödyllistä Apache-palvelimen ominaisuutta ja helpotetaan niillä omien sivujen ylläpitoa ja suojausta. Aihe on käsitelty Apache-luennolla.
Tämän ohjauksen jälkeen sinun pitäisi osata:
- siirtää toistuvat osat omiin tiedostoihinsa ja liittää ne SSI-komennoilla;
- kirjoittaa linkin puoliabsoluuttisena ja perustella, miksi suhteellinen ei tähän käy;
- luoda
.htaccess-tiedosto ja vaihtaa hakemiston oletustiedosto; - suojata hakemisto salasanalla ja kertoa, miksi suojaus vaatii https-yhteyden;
- validoida palvelimella olevan sivun, jonka SSI-komennot on jo suoritettu.
Tämän ohjauksen tehtävät vaativat SSH-yhteyden yliopiston palvelimelle, koska
.htaccess-tiedosto on luotava siellä ja salasanatiedosto vaatii
komentorivikomennon. Yhteyden muodostaminen on käyty läpi
komentoriviluennolla ja
ohjaus 1:ssä.
- Malliratkaisu (ZIP-paketti)
1. SSI (Server Side Includes)
Samanlaisena toistuvien osien ylläpito on vaivalloista, koska sama koodi joudutaan kopioimaan jokaiselle sivulle. Nanonanon sivustolla navigointi ja tekijätiedot ovat jokaisella sivulla samat: yhden linkin lisääminen vaatii seitsemän tiedoston muokkaamisen.
Parempi ratkaisu on koota yhteiset osat omiin tiedostoihinsa ja liittää ne automaattisesti. SSI-tekniikassa palvelin suorittaa dokumenttiin upotetut komennot ennen sivun lähettämistä selaimelle, joten selain saa aivan tavallisen HTML-sivun eikä tiedä koko asiasta mitään.
1.1 Navigointi omaan tiedostoonsa
- Aloita uusi täysin tyhjä tekstitiedosto. Siihen ei tule
doctypea,
html-elementtiä eikä mitään muutakaan pohjaa — vain se katkelma, joka liitetään sivulle. - Kopioi tähän tiedostoon Nanonanon etusivulla olevan
<nav class="navbar">...</nav>-osan lähdekoodi kokonaisuudessaan,aria-label-attribuutti mukaan lukien. -
Muuta kaikki navigoinnin linkit puoliabsoluuttisiksi:
<li><a href="/~omatunnus/www/artikkelit/">Artikkelit</a></li>Miksei suhteellinen viittaus käy?Sama tiedosto liitetään eri syvyyksillä oleville sivuille. Etusivulta artikkeleihin viitattaisiin muodossa
artikkelit/, mutta kokkausartikkelista muodossa../. Yhteen tiedostoon ei voi kirjoittaa molempia, joten viittausten on oltava samat riippumatta siitä, mille sivulle ne liitetään. Puoliabsoluuttinen viittaus alkaa palvelimen juuresta, joten se toimii kaikkialta. - Tallenna tiedosto nimellä
navbar.includehakemistoonW:\www\.
base-elementti
Suhteellisia viittauksia voisi käyttää, jos jokaisen sivun
head-osaan lisättäisiin heti ensimmäiseksi
base-elementti,
joka kertoo mihin osoitteeseen kaikki suhteelliset viittaukset suhteutetaan:
<base href="https://users.jyu.fi/~omatunnus/www/" />
Määritys koskee kaikkia sivun suhteellisia viittauksia: linkkejä, kuvia, tyylitiedostoja ja videoita. Juuri siksi se on hauras: yksi rivi muuttaa koko sivun viittausten merkityksen, ja vaikutus on helppo unohtaa. Tässä tehtävässä käytetään puoliabsoluuttisia viittauksia.
1.2 Sivut .shtml-päätteisiksi
-
Muuta hakemistossa
W:\www\olevanindex.html-tiedoston nimeksiindex.shtml.JYU:n palvelimella SSI-komennot suoritetaan vain
.shtml-päätteisistä tiedostoista. Tavallisesta.html-tiedostosta komennot eivät suoritu, vaan ne jäävät kommenteiksi eivätkä näy sivulla mitenkään. Tämä on tavallisin syy siihen, ettei SSI näytä toimivan. -
Korvaa sivulta koko
nav class="navbar"-lohko SSI-komennolla:<!--#include virtual="/~omatunnuksesi/www/navbar.include" -->Komento näyttää HTML-kommentilta, mutta risuaita heti aloitusmerkinnän jälkeen tekee siitä palvelimen käskyn. Käytä aina
virtual-parametria, joka tulkitsee polun www-osoitteena. -
Kokeile selaimella osoitetta
https://users.jyu.fi/~omatunnus/www/. Navigoinnin pitäisi näkyä aivan normaalisti.Vain palvelimelta avattunaSSI toimii vain, kun sivu haetaan palvelimelta. Suoraan W:-asemalta tai
file://-osoitteesta avattuna komennot jäävät suorittamatta ja navigointi puuttuu kokonaan. - Varmista, että navigoinnin linkit toimivat. Voit kokeilla ne itse tai tarkistaa sivun W3C:n Link Checkerillä.
Aiemmissa ohjauksissa navigoinnista jätettiin nykyisen sivun kohta pelkäksi tekstiksi, jotta käyttäjä näkee missä on. Yhteisessä tiedostossa se ei enää onnistu: kaikki sivut saavat täsmälleen saman navigoinnin.
Tämä on SSI:n hinta, ja se on hyvä tietää. Nykyaikaisissa ratkaisuissa — sivustogeneraattoreissa ja sivupohjakielissä — liitettävälle osalle voidaan antaa parametreja, jolloin kukin sivu saa oman versionsa. Mieti, miten ratkaisisit asian, jos käytettävissä olisi vain SSI.
1.3 Muutosajankohta
- Siirrä alatunnisteen päivitysajankohta omaan
p-elementtiinsäaddress-lohkon jälkeen. -
Korvaa käsin kirjoitettu päivämäärä SSI-komennoilla:
<!--#config timefmt="%Y-%m-%d %H:%M" --><!--#echo var="LAST_MODIFIED" -->config timefmtmäärää päivämäärän muotoilun.echo var="LAST_MODIFIED"tulostaa tiedoston muutosajankohdan.
Palvelin lukee ajan tiedoston tiedoista, joten se pysyy oikeana ilman käsityötä.
- Kokeile selaimella, ilmestyikö muutosaika sivulle.
- Tee
ohjaus3.css-tiedostoon asiayhteyden mukaan määräytyvä tyyli, joka siirtää alatunnisteen aikaleiman oikeaan laitaan tekijätietojen alapuolelle. Muista tarkistaa, miltä se näyttää kapealla näytöllä ja tummassa tilassa — nämä tehtiin ohjaus 5:ssä.
1.4 Tekijätiedot omaan tiedostoonsa
- Siirrä
address-lohko omaan tiedostoonsaaddress.include. -
Liitä se alatunnisteeseen:
<!--#include virtual="/~omatunnuksesi/www/address.include" --> -
Mieti
Miksi päivitysajankohtaa ei voitu siirtää suoraan
address.include-tiedostoon? Kokeile, jos et ole varma.
1.5 Hakemiston oletustiedosto
Palvelin etsii hakemistosta oletustiedoston siinä järjestyksessä kuin
DirectoryIndex-direktiivissä on lueteltu. Jos hakemistossa on vielä vanha
index.html, se voittaa uuden index.shtml-tiedoston, eikä
mikään näytä muuttuneen.
- Avaa pääteyhteys palvelimelle
halava.cc.jyu.fi. - Siirry
cd-komennolla www-hakemistoosi. -
Luo asetustiedosto:
nano -w .htaccess -
Kirjoita tiedostoon:
# Hakemiston oletustiedostot. Palvelin tarjoaa ensimmäisen, joka löytyy. DirectoryIndex index.shtml index.html - Tallenna näppäimillä Ctrl+O ja poistu näppäimillä Ctrl+X.
.htaccess-tiedostosta
- Asetukset vaikuttavat siihen hakemistoon ja kaikkiin sen alihakemistoihin. Alihakemistoon voi laittaa oman tiedostonsa, joka ohittaa ylemmän.
- Tiedoston nimi alkaa pisteellä, joten se on piilotettu.
ls -anäyttää sen. - Yksi virheellinen rivi kaataa koko hakemiston: selain saa virheen 500 eikä yhtään sivua näytetä. Jos näin käy, poista viimeksi lisäämäsi rivi.
Lisää aiheesta Apache-luennon luvussa 1.
Vanhoissa ohjeissa .htaccess-tiedostoon lisätään rivit
AddHandler server-parsed .html ja AddType text/html .html.
Kumpaakaan ei tarvita, koska JYU:n palvelimella .shtml-pääte riittää.
Samoissa ohjeissa väitetään, että Apache jakaisi .shtml-tiedostot
oletuksena text/xml-muodossa. Näin ei ole: .shtml on
Apachen oletusmäärityksissä text/html.
1.6 Loput sivut
- Muuta samalla tavalla myös hakemistojen
artikkelit,opiskelu,linkitjagalleriasivut: nimeä neindex.shtml-tiedostoiksi ja korvaa navigointi ja tekijätiedot SSI-komennoilla. - Muista myös artikkelien alasivut
artikkelit/itjaartikkelit/kokkaus. - Varmista Link Checkerillä, että navigointilinkit toimivat kaikilta sivuilta.
-
Kokeile nyt, mitä SSI antaa: lisää navigointiin yksi uusi kohta muokkaamalla pelkkää
navbar.include-tiedostoa. Käy katsomassa kaikki sivut. Kuinka monta tiedostoa jouduit muokkaamaan?
.shtml-tiedosto ei ole paikallisesti kokonainen dokumentti: SSI-komennot
ovat vielä kommentteina ja liitettävät osat puuttuvat, joten validaattori ilmoittaa
virheitä joita ei ole. Käytä
validaattorin
Check by Address -vaihtoehtoa ja anna sille julkaistun sivun osoite. Silloin
validaattori näkee saman kuin selain.
Liitettäviä tiedostoja (navbar.include,
address.include) ei validoida lainkaan: ne eivät ole dokumentteja vaan
katkelmia.
2. Salasanasuojaus
Hakemiston ja sen alihakemistot voi suojata salasanalla
.htaccess-tiedostolla. Suojataan Nanonanon artikkelit.
Basic-tunnistautuminen ei salaa salasanaa. Se lähetetään jokaisen
pyynnön mukana vain Base64-koodattuna, mikä ei ole salausta vaan pelkkä esitystapa,
ja kuka tahansa liikennettä kuunteleva saa sen selville. Suojaus on käyttökelpoinen
ainoastaan https-yhteydellä, joka salaa koko liikenteen.
users.jyu.fi on https-osoitteessa, joten tässä tehtävässä asia on
kunnossa — mutta muista se muualla.
Älä myöskään käytä harjoituksessa mitään oikeaa salasanaasi.
2.1 Selvitä oikea polku
Tässä on tehtävän kinkkisin kohta. Samaan tiedostoon on kaksi eri polkua: se, jolla siihen pääsee komentoriviltä, ja se, jolla WWW-palvelin sen näkee. Ne eivät ole samat.
| Mihin | Polku |
|---|---|
Komentorivillä (cd, htpasswd) |
/autowebhome/home/omatunnus/public_html/…
tai ympäristömuuttujan avulla
/wwwhome$HOME/public_html/...
|
.htaccess-tiedostossa (AuthUserFile) |
/home/omatunnus/public_html/… |
Väärä polku on ylivoimaisesti yleisin syy siihen, ettei suojaus toimi. Oireena on virhe 500, koska palvelin ei löydä salasanatiedostoa.
2.2 Luo salasanatiedosto
Tämä on luotava komentoriviltä eli avaa ssh-yhteys halava-koneeseen.
cd html-
Tee w:-asemasi juureen
hidden-kansio salasanatiedostoa vartenmkdir hidden - Siirry cd-komennolla hidden-kansioon
cd hidden -
Luo tiedosto ja ensimmäinen käyttäjä. Valitsin
-cluo uuden tiedoston ja pyyhkii olemassa olevan, joten seuraavia käyttäjiä lisätessäsi jätä se pois:htpasswd -c .htusers testiKomento kysyy salasanan kahdesti. Lisää käyttäjiä samaan tiedostoon näin:
htpasswd .htusers toinen -
Anna palvelimelle lukuoikeus tiedostoon ja kansioon:
chmod a+r .htusers chmod a+rx .
hidden-kansion ja salasanan luominen ympäristömuuttujan avulla
Tässä versiossa sinun ei tarvitse siirtyä cd-komennolla hidden-kansioon.
-
Tee w:-asemallesi
hidden-kansio salasanatiedostoa varten:mkdir -p /wwwhome$HOME/public_html/hidden -
Luo tiedosto ja ensimmäinen käyttäjä. Valitsin
-cluo uuden tiedoston ja pyyhkii olemassa olevan, joten seuraavia käyttäjiä lisätessäsi jätä se pois:htpasswd -c /wwwhome$HOME/public_html/hidden/.htusers testiKomento kysyy salasanan kahdesti. Lisää käyttäjiä samaan tiedostoon näin:
htpasswd /wwwhome$HOME/public_html/hidden/.htusers toinen -
Anna palvelimelle lukuoikeus tiedostoon ja kansioon:
chmod a+rx /wwwhome$HOME/public_html/hidden chmod a+r /wwwhome$HOME/public_html/hidden/.htusers
Salasanatiedosto joudutaan JYU:ssa sijoittamaan public_html-kansion
alle, eli www-tilaan. Apachen oletusasetukset kuitenkin estävät
.ht-alkuisten tiedostojen hakemisen selaimella, joten
nimi .htusers on suojattu, kun taas nimi users olisi kenen
tahansa luettavissa osoitteesta
https://users.jyu.fi/~omatunnus/hidden/users.
Kokeile suojauksen jälkeen, mitä tapahtuu kun haet salasanatiedostoa selaimella. Vastauksen pitäisi olla 403.
2.3 Ota suojaus käyttöön
-
Siirry suojattavaan kansioon ja luo sinne oma
.htaccess-tiedosto:cd www/artikkelit nano -w .htaccess -
Kirjoita tiedostoon. Korvaa polku omallasi:
AuthType Basic AuthName "Nanonanon artikkelit" AuthUserFile /home/omatunnus/public_html/hidden/.htusers Require valid-user
| Direktiivi | Merkitys |
|---|---|
AuthType Basic | Käytettävä tunnistautumistapa |
AuthName | Teksti, joka näkyy selaimen kysymysikkunassa. Lainausmerkit ovat pakolliset, jos siinä on välilyöntejä |
AuthUserFile | Salasanatiedoston polku WWW-palvelimen näkemänä |
Require valid-user | Kuka tahansa tiedostossa oleva käyttäjä pääsee sisään. Yksittäiset käyttäjät: Require user testi toinen |
2.4 Testaa suojaus
- Avaa
https://users.jyu.fi/~omatunnus/www/artikkelit/. Selaimen pitäisi kysyä tunnusta ja salasanaa. - Kokeile väärää salasanaa. Mitä tapahtuu?
-
Kirjaudu sisään ja avaa sitten yksityinen ikkuna ja kokeile samaa osoitetta. Selain muistaa tunnukset istunnon ajan, joten ilman yksityistä ikkunaa et näe suojausta uudelleen.
- Kokeile myös alihakemistoa
artikkelit/it/. Suojaus vaikuttaa myös alihakemistoihin. - Kokeile hakea salasanatiedostoa selaimella osoitteesta
https://users.jyu.fi/~omatunnus/hidden/.htusers. Saat virheen 403. - Validoi lopuksi HTML- ja CSS-koodit ja korjaa virheet. Muista käyttää Check by Address -vaihtoehtoa.
Tarkemmin hakemistojen suojaamisesta voi lukea digipalvelujen ohjeesta.
3. Lisätehtäviä
-
Kokeile, mitä tapahtuu, kun poistat
DirectoryIndex-rivin.htaccess-tiedostosta ja luot hakemistoon myös tiedostonindex.html. Kumpi näytetään? - Lisää murupolun logo omaksi liitettäväksi tiedostokseen. Miksi koko murupolkua ei voi liittää samalla tavalla kuin päänavigointia?
-
Kokeile SSI-muuttujia
DOCUMENT_NAMEjaDATE_LOCAL:<!--#echo var="DOCUMENT_NAME" -->Mitä eroa on muuttujilla
DATE_LOCALjaLAST_MODIFIED? Kumpi pysyy samana, kun lataat sivun uudelleen? - Suojaa galleria eri tunnuksella kuin artikkelit. Tarvitsetko toisen
salasanatiedoston vai riittääkö
Require user-rivin muuttaminen?
Käyttäjien kommentit