Webbutveckling/Egen Webserver

Från Wikibooks
Denna bok är bara påbörjad och saknar fortfarande mycket. Det är öppet för vem som helst att bidra till denna bok, liksom alla andra böcker. Om du märker att något saknas eller är felaktigt, tveka inte att lägga till eller redigera. Du kan träna lite i sandlådan innan du gör mer avancerade ändringar.


Inledning[redigera]

Denna bok är skapad i syftet att gå igenom proceduren att skapa en webbserver.

Genom att installera en egen webbserver har man bättre kontroll över sin webbplats. Man kan också använda en egen webbserver för experiment då den egentliga webbplatsen finns annanstans.

Webbserver?[redigera]

Vad är en webbserver?[redigera]

En webbserver är dels det datorprogram som används för att förmedla innehåll från en webbplats, dels den dator som programmet körs på. Webbsidor förmedlas vanligen med protokollet HTTP (”hypertext transfer protocol”) och är vanligen i formatet HTML (”hypertext markup language”), men servern förmedlar också andra typer av filer, till exempel rena textfiler, bilder och pdf-filer.

Vid sidan av webbservern används ofta diverse andra program. En typisk kombination är ”LAMP”: linux, apache, mysql och php/perl/python. Här ingår alltså ett operativsystem, själva webbservern, en databas och en tolk för cgi-skript. De två sistnämnda behövs inte om man nöjer sig med ”statiska” sidor, sidor som finns som filer och levereras som sådana eller med mindre modifikationer.

I operativsystemet räknas här in det serverprogram som låter en ladda upp filerna som skall visas. Oftast är detta en ftp-server, men ftp-överföringen sker i klartext, vilket betyder att lösenorden kan snappas upp och filerna modifieras, av personer som kommer åt nätet mellan servern och den som laddar upp filerna. Nuförtiden rekommenderas krypterade förbindelser, vilket vanligen betyder en sshd-server på serverdatorn och ett scp- eller sftp-program på datorn därifrån filerna skall laddas upp.

Ofta vill man också installera ett antal andra program, till exempel färdiga cgi-skript. Om man sköter webbutvecklingen på serverdatorn behöver man också textredigerare och diverse hjälpprogram.

Hur skapar man en webbserver?[redigera]

  1. Det enklaste alternativet vilket innebär att man laddar ner en färdig konfigurerad server.
  2. Det svårare och mer avancerade alternativet innebär att man laddar ner och installerar varje del för sig.


Alternativ 1, den lätta vägen[redigera]

Man laddar ner en specialdesignad distribution. Det finns några olika varianter att välja mellan.

Alternativ 2, den svåra vägen[redigera]

Om man vill ha mer möjlighet att konfigurera sin server så är detta rätt alternativ.

Program som behövs är:

  • ett operativsystem, GNU/linux är det vanligaste alternativet
  • apache eller en annan webbserver
  • en server för att ladda upp filerna, ofta någon form av ftp-server, men använd ftp över ssl (ftps) eller ssh (scp, sftp)
  • tolk för php, python, perl eller liknande (valbart, för cgi-skript i respektive språk)
  • en databas såsom mySQL (valbart, om dina cgi-skript behöver en databas)

Operativsystem[redigera]

Ofta används någon Unix-variant som operativsystem för webbservrar. Bland alternativen kan vid sidan av GNU/Linux nämnas Solaris, FreeBSD och OpenBSD. Alla dessa kan installeras också på PC-datorer. Unix har rykte om sig att vara säkert och pålitligt och har en lång historia som operativsystem för servrar.

Du behöver inte lära dig ett nytt operativsystem för att installera en webbserver. Windows används också allmänt för webbservrar och serverprogram finns för de flesta operativsystem. I själva verket finns apache och de andra program vi presenterar nedan att få till de flesta operativsystem (vi nämner möjligen också några program som endast finns för Windows).

En webbserver som är åtkomlig från Internet måste skötas ordentligt. Bland annat innebär det att säkerhetsuppdateringar skall installeras utan dröjsmål, att alla lösenord skall vara tillräckligt säkra och att ingen obekant service lyssnar på nätet. Att se till att systemet är säkert är lättare om operativsystemet är bekant.

Om du inte vill att din webbserver är allmänt åtkomlig måste du se till att din brandmur är i skick eller att du annars kan kontrollera vem som kommer åt servern.

GNU/Linux[redigera]

GNU/Linux är ett Unix-liknande operativsystem som helt eller till största delen består av fri programvara. Det finns i ett otal varianter, så kallade distributioner, varav Debian, Fedora, Suse och Ubuntu hör till de vanligaste. Man kan köpa ett CD-set som vilket som helst annat datorprogram eller också kan man ladda ner en CD-avbild från distributionens webbplats och bränna denna på CD.

Man startar upp datorn från CD:n och installerar operativsystemet, varefter man kan kompletterar installationen med programvara som hämtas över nätet, antingen den mesta programvaran eller de säkerhetsuppdateringar som publicerats efter att CD-avbilden gjordes. All programvara som behövs borde vara tillgänglig genom en pakethanterare. Man behöver alltså inte själv söka upp olika webbplatser om man inte vill.

Vanligen bör GNU/Linux installeras på en eller flera egna partitioner. Du bör alltså krympa ihop partitionerna för ett eventuellt tidigare operativsystem så att det blir åtminstone någon gigabyte fritt utrymme över. Alternativt kan GNU/Linux installeras i en virtualmaskin.

Överväg huruvida du vill ha en renodlad server eller en kombinerad arbetsstation och server. I det förra fallet behöver du inte nödvändigtvis någon grafisk omgivning på själva servern, och inte heller kontorsprogram, grafiska webbläsare och annat som installeras som standard om du väljer en arbetsstationsinstallation. Installationsprogrammet kan erbjuda ”webbserver” som ett installationsalternativ, annars måste du själv välja apache, php, mysql och andra program du behöver. Programbibliotek och liknande, någon editor och en stor uppsättning småprogram installera hur som helst automatiskt. Se till att du installerar den dokumentation du behöver, den finns ofta delvis i skilda paket.

Windows[redigera]

Eftersom Windows är det vanligaste operativsystemet på persondatorer är det sannolikt att det är det du använder. Om du vill installera din webbserver på Windows kan du antingen välja Microsofts egen webbserver, som är väl integrerad med resten av systemet, eller apache, som har bättre stöd utanför Windows-världen.

Vilken dator[redigera]

Om du vill ha en webbserver att experimentera med, medan din webbplats ligger annanstans är det naturligt att använda din egen dator för webbservern. Då behöver webbservern inte lyssna på Internet utan du kan använda localhost-adressen. Om webbservern skall ha ett annat operativsystem än det du normalt använder kan du välja att starta upp maskinen med endera operativsystemet beroende på vad du skall arbeta med den här gången (”dual boot”) eller också kan du installera det andra operativsystemet i en virtualmaskin, som låter det tro att det har en maskin för sig, fastän det i verkligheten körs inne i ett annat program (vmware är det vanligaste alternativet).

Du kan också använda en gammal avlagd maskin som server. En webbserver som serverar enstaka filer i minuten klarar sig ledigt på en tio år gammal dator. Om du vill ha avancerade skript och databaser kanske du måste ha något litet nyare, men det kan vara bra att upptäcka flaskhalsarna redan på denna maskin, innan du publicerar alltför ineffektiva lösningar.

Det vanliga sättet att publicera webbsidor är via något webbhotell. Dessa kan vid sidan av webbutrymme och virtuella servrar också erbjuda tomma virtualmaskiner att installera operativsystem och webbserver i. Du kan också hyra en dator eller utrymme för en egen dator.

Webbservern[redigera]

Apache[redigera]

Apache är det vanligaste webbserverprogrammet. Apache är fri programvara, vilket bland annat betyder att man har tillgång till källkoden och får ändra den enligt behov och också dela ut programvaran till andra. I praktiken betyder detta att programvaran också är gratis, så länge man inte vill betala för stöd eller för att få programmet skräddarsytt åt sig.

Man laddar ner apache härifrån http://httpd.apache.org/download.cgi

För linux-användare ingår apache och de andra programmen vanligen i distributionen och kan installeras med pakethanteraren som vilka som helst andra program. Om du valde alternativet "webbserver" då du installerade linux borde du redan ha allt vad du behöver och behöver bara aktivera programmen.

Kataloger och rättigheter[redigera]

Webbplatsens filer bör finnas i en eller flera kataloger dedikerade för detta. På Unix-liknande system kan katalogen (”document root”) heta något i stil med ”/www”, /srv/http eller /var/lib/apache. Användarnas egna webbsidor finns ofta i en katalog under hemkatalogen, till exempel i /home/användarnamn/public_html. Konfigurationsfilerna kan finnas i /etc/httpd/conf. Bilder för allmänt bruk kan finnas i en egen katalog, bilder som hör till någon enskild helhet kan ligga i anslutning till den. Skriptfiler bör finnas i en katalog eller kataloger dedikerade för detta.

Var noga med vilka rättigheter du ger åt filerna och katalogerna. Vanligen kör servern under eget användarnamn och med egen användargrupp. Dessa skall inte ha skrivrättigheter annat än i skilda datakataloger om sådana behövs för olika skript. Skript körs vanligen under serverns användarnamn. Man kan också välja att servern använder användarnamnet för den som ”äger” skriptet. Detta är problematisk, då servern då lätt får skrivrättigheter till själva skriptet.

Datafiler som skall kunna läsas av servern men redigeras av en vanlig användare kan ges webbserverns grupp (om katalogen har den rätta gruppen och attributet ”set group id” kommer filer skapade där vanligen automatiskt att ha rätt grupp). Ge ägaren skrivrättigheter och gruppen läsrättigheter.

Skriptspråk[redigera]

Om du vill ge användare möjlighet att fylla i formulär eller om du vill ha så kallade dynamiska webbsidor måste du ha en tolk för vart och ett av de programspråk du vill använda. Vanliga sådana språk är php, perl och python. Tolken kan finnas inbyggd som en modul i webbservern. För enkla variationer på sidorna kan SSI (server side includes) räcka. Om det enda du behöver är formulärbehandling är det också möjligt att använda en annan (hyrd) server för detta.

Ofta används dynamiska webbsidor och databaser för funktioner som lätt kan skötas med en uppsättning prefabricerade sidor. Om du vill ladda upp ”dagens nyhet” och inkludera en referens till denna på vissa sidor, kan du, då du laddat upp nyheten, köra ett skript som färdigt inkluderar referensen. Då behöver webbservern inte köra någon extern kod överhuvudtaget, utan endast servera den modifierade sidan istället för originalet.

SSI[redigera]

PHP[redigera]

PHP behandlas i en egen wikibook, PHP. Programkoden kan inkluderas som speciella kommentarer (<?php...?>) i en normal www-sida, som då ofta har ett namn som slutar på .php

Perl[redigera]

Perl är ett programspråk ursprungligen skrivet för att analysera Usenet-grupper. Språket är speciellt bra på att analysera och manipulera text, men har moduler för det mesta tänkbara och används mycket allmänt för CGI-skript. Som modul för webbservern behåller den färdigkompilerade skript i minnet, så att skripten inte behöver kompileras för varje körning som normalt. Skripten läggs i en skild katalog och måste explicit producera den text som skall ingå på webbsidan.

Python[redigera]

Färdiga skript[redigera]

Det finns mängder av färdiga cgi-skript för alla tänkbara och en del otänkbara ändamål. Ofta är dessa ett bättre val än att försöka koda själv, men kvaliteten på skripten varierar starkt. Se alltså till att du hämtar skripten från platser där de kontrollerats av någon som förstår sig på datasäkerhet, om du inte har tillgång till någon som kan kontrollera dem.

Ett typiskt behov är att förmedla kommentarer till en e-postadress. Vissa skript inkluderar adressen i ett dolt fält i blanketten, för att göra det enkelt att byta adressen. Detta gör det möjligt för vem som helst att skicka skräppost via webbservern till vilken som helst e-postadress. Liknande fel är vanliga, liksom fel som tillåter en angripare att ladda upp och köra sabotageprogram med webbserverns rättigheter.

Databaser[redigera]

MySQL[redigera]

Att ladda upp filer[redigera]

Du måste ha något sätt att få de sidor webbplatsen består av till webbservern. Det finns tre metoder: du kan ladda upp dem med ett filöverföringsprogram, du kan skapa sidorna direkt på webbservern eller du kan använda ett innehållshanteringssystem som låter dig ladda upp filer via webbservern. Det först alternativet är i allmänhet det primära.

Det traditionella filöverföringsprotokollet är FTP (”file transfer protocol”). Det är vad som allmänt används på kommersiella webbservrar, eftersom de flesta har en klient färdigt på sin dator. Problemet är att lösenordet skickas i klartext och filerna skickas utan att deras integritet kontrolleras. Någon som kommer åt datanätet mellan avsändare och mottagare kan tjuvlyssna och förändra filerna. Också om attacker är ovanliga är de ett helt reellt hot.

De mest kända alternativen är SCP, SFTP och FTPS. Om du har kontroll över din webbserver kan du enkelt installera en SSH-server (sshd), som tillåter också filöverföringar med SCP och SFTP. Det finns fria klienter också för Windows, till exempel Filezilla, Putty och WinSCP. FTPS är FTP över SSL, vilket är ett fullgott alternativ för filöverföringarna. Moderna FTP-klienter stöder ofta FTPS.

Med en SSH-server har du möjlighet också att logga in på serverdatorn över nätet och att använda programvaran som på en lokal maskin (fast trögare, vad gäller grafiska program).

Säkerhetskopiering[redigera]

Allt innehåll på en webbplats skall rimligtvis säkerhetskopieras regelbundet. Vanlig praxis är att en körning varje natt kopierar filer som ändrats under dygnet, en körning varje vecka eller månad kopierar filer ändrade sedan senaste sådan körning och en körning mer sällan kopierar alla filer som omfattas av säkerhetskopieringen (så att man inte behöver leta rätt på enstaka äldre kopior).

En fil kan bli förstörd långt tidigare än man upptäcker problemet, varför man bör spara en del äldre kopior. Var och hur man sparar kopiorna är också väsentligt. Tänk på möjliga hotbilder: misslyckade ändringar, raderingar av misstag, maskinfel, dataintrång, eldsvåda, åska.

Materialet på webbplatsen kan finnas också på den egna maskinen, så att materialet endast kopieras över till servern då man gjort ändringar. Då kan säkerhetskopieringen göras på endera maskinen, där det går lättast. Material som endast finns på den ena maskinen måste säkerhetskopieras där eller kopieras över inför säkerhetskopieringen.

Förutom säkerhetskopior på själva materialet måste man, om det är frågan om en seriös webbplats, se till att det inte blir större avbrott ens i olyckssituationer. Man kan ha en kopia av webbplatsen, med programvara och identiska inställningar, på en annan dator, som kan kopplas in om något händer med den andra. Detta kan kräva att man snabbt kommer åt att ändra ip-adresser och DNS-inställningar (om reservdatorn till exempel finns på annan ort). I fall av dataintrång måste ändå säkerhetshålet lappas innan också den andra datorn blir angripen.