NetBSD.SE Logotype
Meny
Välkommen till NetBSD.se

Sök bland pkgsrc/wip:Sök efter manual:
 


Webserver med thttpd
2006-11-10 23:39:18 inskickat av Mats - z999

GuiderDetta är en beskrivning av hur man använder thttpd istället för
apache som webserver. Och varför det då? Duger inte apache?
Apache är väldigt bra men den kan ofta vara lite overkill, bland
annat så drar den lite mer minne än thttpd gör. Men mitt skäl
till att använda thttpd är att jag anser att den följer säkerhets
filosofin i NetBSD. Det är ett litet program vilket gör att det
är lättare att hålla koll på vad som egentligen händer. Config
filen påminner mer om postfix config fil, man kanske kan jämföra
apaches config-fil med sendmail och thttpds config-fil med
postfix. Jag kan ju tillägga att thttpd är realtivt enkelt att
installera på NetBSD, även i en chrootad miljö som jag kommer att
välja här.

Förutsättningarna är följande - NetBSD ver 3.1 och en gammal
dellmaskin som nästan ändå har överkapacitet för detta.

Jag använder pkgsrc för att installera thttpd.
# cd /usr/pkgsrc/www/thttpd
# make install distclean

Du kommer att se något i stil med följande -

===========================================================================
Installing files needed by thttpd-2.25bnb3:

/usr/pkg/etc/thttpd.conf
[/usr/pkg/share/examples/thttpd.conf]

===========================================================================
===========================================================================
The following files should be created for thttpd-2.25bnb3:

/etc/rc.d/thttpd (m=0755)
[/usr/pkg/share/examples/rc.d/thttpd]

===========================================================================

===========================================================================
$NetBSD: MESSAGE,v 1.2 2001/11/19 16:23:16 jlam Exp $

In order to use makeweb:

chgrp <group> makeweb
chmod 2755 makeweb

The suggested group is "www".
===========================================================================

Håll reda på sökvägarna ovan. Hur det ser ut mer exakt beror på
hur du har configurerat mk.conf. Jag har använt default här
vilket skapar /usr/pkg/etc/thttpd.conf.

Nu när servern är installerad så ska thttpd.conf justeras lite.
Det första att ändra är "documents root directory" (DocumentRoot
i apache). Default är /usr/pkg/share/thttpd som är långtifrån
optimalt, kom ihåg att /usr ofta är mountad read only. Ett bättre
ställe är /home/www. Öppna filen /usr/pkg/etc/thttpd.conf i din
favoriteditor och ändra "dir" till dir=/home/www. När detta är
gjort så skapar vi själva directoryn.
# mkdir /home/www

Och sen en (mycket) enkel hemsida så att det finns något att se.

# cat > /home/www/index.html
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Welcome to my site</title>
</head>

<body>
<p>thttpd is running!<p>
</body>
</html>
^D

Saken är den att om du inte har en "index.html" i din /home/www
directory så kan folk se hela directoryn och det är kanske inte
exakt vad du vill.

OK. Då ska vi sätta upp lite permissions (swenglish rules) och
sånt. Innan vi sparkar igång thttpd, vilket är möjligt redan nu,
så är det en bra idé att köra servern utan root-privilegier.
Liksom det mesta annat när det gäller nät-programvara. Detta för
att minska möjligheterna att ställa till skada vid en attack mot
systemet. Därför så är mitt mål att köra servern med ett vanligt
användarkonto. Jag skapar en www grupp som alla webmasters
tillhör och thttpd user som ska köra daemonen.

# useradd -g nobody -d /home/www thttpd
# groupadd www

Observera att thttpd kontot använder nobody som grupp. www är en
grupp för webmasters. Daemonen har ingen anledning att fixa något
i document directoryn.

Nu när kontot är uppe, gör så att thttpd använder det.

# echo user = thttpd >> /usr/pkg/etc/thttpd.conf

Sedan ändrar vi slutligen lite permissions.
# chown -R root:www /home/www
# chmod 755 /home/www
# chmod 664 /home/www/index.html

Ok, och nu till det roliga, vi ska starta upp webservern. Detta
gör vi genom rc.d scriptet som medföljer thttpd. Först, kopiera
scriptet till rätt directory, /etc/rc.d/, så det är tillgängligt
vid bootning:
# cp /usr/pkg/share/examples/rc.d/thttpd /etc/rc.d/

För att nu göra det här på ett säkert sätt så använder vi chroot.
Detta är enkelt i NetBSD genom att använda -r flaggan. Vi gör
följande tillägg i /etc/rc.conf
# cat >> /etc/rc.conf
thttpd=YES
thttpd_flags=-r
^D

Du är klar! Starta upp för en test nu:
# /etc/rc.d/thttpd start

Det kan vara en bra idé att kontrollera att det verkligen
fungerar. Jag har lynx installerat (pkgsrc/www/lynx).
# lynx http://localhost/
Detta är lite beroende på om du har din /etc/hosts i ordning,
annars kan http://127.0.0.1 fungera.
Hemsidan (index.html) som du skrev ska nu synas. I det här läget
kan det vara dags att boota om och thttpd ska då startas i
chrootat läge. Detta kollar vi upp med hjälp av fstat. Du vill
inte ha en webserver rullande för att upptäcka efter en tid att
den inte gick i chrootat läge. Gör följande:
# fstat | grep ^thttpd | grep root
thttpd thttpd 1206 root /home 231520 drwxrwxr-x 512 r

Vad du ser här är att kommandot startas under directoryn som
inoden 235120 pekar på, under /home som är en separat partition.
För att verifiera att inode-numret tillhör ditt document root
directory, använd ls:
# ls -lidF /home/www/
231520 drwxrwxr-x 2 root www 512 Apr 28 18:35 /home/www

Det första numret ska alltså matcha inode numret som visades med
fstat, och det gör det om du följt denna beskrivning. Daemonen är
alltså fast i rätt directory.

OK. Då fortsätter vi med att testa lite cgi också. Självklart kan
du nöja dig med statiska html-sidor men om du vill ha lite mer
avancerat så krävs CGI script. Det enklaste sättet att starta
cgi-script är att ta bort chroot flaggan, men det är inte
särskilt smart ur säkerhetssynpunkt så vi gör på följande sätt
istället.
Först, ett mycket enkelt cgi-script för att testa. Jag kommer att
använda shell-script här (sh), men du kan använda vilket
programspråk du vill. Jag kan ju tillägga att shellscript är
enklast att få att fungera.
# mkdir /home/www/cgi-bin
# cat >/home/www/cgi-bin/hello.sh
#!/bin/sh

echo "Content-type: text/html"
echo
echo "Hello, world!"
^D
# chmod +x /home/www/cgi-bin/hello.sh

När detta är klart lägg till följande i din /home/www/index.html:

<form name="hello" method="post" action="/cgi-bin/hello.sh">
<input type="submit" value="Run it!" />
</form>

Om du testade det där så kommer det inte att fungera, och varför
det? Jo, scriptet kunde inte hitta script-tolken /bin/sh, som är
specificerat på första raden. För att lösa detta, kopiera filen
plus allt den behöver till din chrootade directory. Ett enkelt
sätt att göra det är såhär:

# cd /home/www
# mkdir bin
# cp /bin/sh bin
# ldd bin/sh
bin/sh:
-ledit.2 => /lib/libedit.so.2
-ltermcap.0 => /lib/libtermcap.so.0
-lc.12 => /lib/libc.so.12
# mkdir lib
# cp /lib/libedit.so.2 lib
# cp /lib/libtermcap.so.0 lib
# cp /lib/libc.so.12 lib
# mkdir libexec
# cp /libexec/ld.elf_so libexec
# chown -R root:wheel bin lib libexec

Beroende på hur avancerat du vill ha det så kommer du
naturligtvis att vilja lägga in andra applikationer i din
chrootade directory. Det kan vara aningen mer komplicerat, själv
har jag nöjt mig med att installera ksh istället för sh och ett
kommande projekt för mig är att få perl och PostgreSQL att
fungera i den chrootade miljön. Det går även att lägga till
virtualhosts för den som vill ha det. Kanske du vill ändra porten
för din server av säkerhetsskäl eller för att du kanske har
apache på port 80. Det finns dom som anser att det är praktiskt
att ha apache för att ta hand om en del tyngre saker och sedan
låter thttpd få ta hand om kanske mer inaktiva besökare. Porten
ändras såhär:
# echo port=8080 >> /usr/pkg/etc/thttpd.conf

Om du vill lära dig mer så ta en titt på thttpd's manual sidor.
Det finns också en accompanying thttpd notes som har design
förslag -- en klart intressant läsning.

Och det finns flera andra HTTP servers, beroende på vad du vill
ha så kan du ju ta en titt på dom också. Men thttpd har säkert
den roligaste loggan i alla fall :-)

// Mats z999 på forumet - netbsd (at) comhem.se



skrivut.gif Utskriftsformat mail.gif Skicka artikeln till någon


Kommentarer tillhörande (Webserver med thttpd)
John 65.110.xxx.xxx 2007-03-16 20:13:30 Svara
Very nice site!
abbyzml 206.222.xxx.xxx 2007-03-28 05:18:37 Svara

***inputurl


Namn (tomt = anonym):
Din email:






© 2003-2008 NetBSD.se
Materialet som publicerats på denna sida tillhör respektive författare. Materialet får kopieras med förutsättning av att källanvisning medförs som i detta fall är www.netbsd.se. Eventuella kommentarer tillhör skrivande individ. All information erbjuds utan garanti på funktion och duglighet och NetBSD.se tar inget ansvar för händelser som åsakats på grund av något på denna sida. NetBSD är ett registrerat varumärke som tillhör The NetBSD Foundation. Alla varumärken och copyright på denna sida ägs av deras respektive ägare. Vår maskot går under BSD-licensen och är fri att användas.