Debian server beheer

Apache 2 webserver software installeren met PHP en MySQL

Apache 2 is de standaard voor webserver software. Installeren met:

apt-get install apache2

Dat is echt alles. Je hebt nu een werkende webserver. Test dat eventueel door in je browser naar het IP adres of domeinnaam van je server te gaan. Je ziet dan dit:

Apache default installation works

Je kunt overigens deze default pagina aanpassen.

nano /var/www/index.html

MySQL toevoegen

Bijna geen website kan tegenwoordig zonder een MySQL database. MySQL is te installeren door:

apt-get install mysql-server mysql-client

Tijdens de installatie moet een een root wachtwoord voor de mysql server kiezen. Je kunt testen of de installatie geslaagd is met de volgende opdracht:

/etc/init.d/mysql status

Als mysql goed werkt zie je nu informatie over versienummer, auteursrecht, enz. Ongeveer zo:

Server version 5.1.66-0+squeeze1 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 2 days 4 hours 47 min 46 sec

Vaak is het nodig een nieuw wachtwoord voor de root gebruiker in te stellen. Dat doe je met:

mysqladmin -u root -p'oudwachtwoord' password 'nieuwwachtwoord'

Je kunt makkelijk vanaf de command line databases en gebruikers aanmaken. Open mysql en log in als de root gebruiker:

mysql -u root -p

Maak vervolgens een database aan met:

CREATE DATABASE mijndatabase

Tenslotte maak je een gebruiker aan die in die database alles mag:

GRANT ALL PRIVILEGES ON mijndatabase.* TO 'gebruiker'@'localhost' IDENTIFIED BY 'wachtwoord';

Waarbij je uiteraard voor gebruiker en wachtwoord de juiste gegevens invoert. Je kunt ook gebruikers met beperkte rechten aanmaken, bijvoorbeeld:

GRANT select ON mijndatabase.* TO 'gebruiker'@'localhost' IDENTIFIED BY 'wachtwoord';

PHP5 toevoegen

PHP5 in een 'programmeertaal' waarmee je de koppeling kun maken tussen je webserver en de database. Installeren met:

apt-get install php5 libapache2-mod-php5

Na de installatie moet je de webserver herstarten om PHP5 te kunnen gebruiken:

/etc/init.d/apache2 restart

Vervolgens gaan we testen of PHP goed werkt. Maak een nieuw bestand aan:

nano /var/www/test.php

Vul dit in het bestand in

<?php phpinfo(); ?>

Ga nu in je webbrowser naar http://[jouwserver.com]/test.php. Als de installatie geslaagd is zie je een lange lijst met informatie over php5 die zo begint:

phpinfo() output

PHP5 en MySQL koppelen

Als laatste stap wil je de koppeling tussen PHP5 en MySQL leggen:

apt-get install php5-mysql

Als die installatie voltooid is moet je weer Apache herstarten:

/etc/init.d/apache2 restart

Als je nu nogmaals de PHP test pagina bekijkt die je eerder maakte (desnoods even herladen) dan moet je daar nu de informatie over MySQL vinden.

Je webserver is nu helemaal klaar. Tijd om virtuele sites te gaan maken.

Foutmelding "[warn] NameVirtualHost *:80 has no VirtualHosts"

Deze foutmelding is onschuldig en je kunt ze negeren. Wil je toch oplossen bewerkt dan ports.conf:

cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup nano /etc/apache2/ports.conf

Schakel de regel NameVirtualHost *:80 uit door er een # teken voor te zetten. De regel ziet er dan zo uit:

#NameVirtualHost *:80

Vervolgens moet je Apache herstarten:

/etc/init.d/apache2 restart

De foutmelding is nu weg.

Apache configureren voor SSL

Apache ondersteunt SSL. Dat wil zeggen dat informatie tussen Apache en de bezoeker versleuteld uitgewisseld kan worden. In dit hoofdstuk maken we een zogenaamd 'self signed certificate' voor SSL. Daarmee kan de verbinding prima versleuteld worden maar de meeste browsers zullen wel aan de bezoeker melden dat het om een 'self signed certificate'. Wil je dat voorkomen dan zul je een certificaat moeten kopen.

Maak de map waarin de certificaten komen en geef open-ssl de opdracht een .key file te maken

mkdir /etc/apache2/ssl cd /etc/apache2/ssl openssl genrsa -out apache.key 2048

Je krijgt de volgende uitvoer:

Generating RSA private key, 2048 bit long modulus ..++++++ ......++++++ e is 65537 (0x10001)

Pas de rechten op de .key aan en maak een .csr (certificate signing request):

chmod 600 apache.key openssl req -new -key apache.key -out apache.csr

open-ssl stelt je een aantal vragen. Omdat je een 'self signed certificate' maakt, maakt het eerlijk gezegd niet heel veel uit wat je op die vragen antwoordt:

You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:NL State or Province Name (full name) [Some-State]:Utrecht Locality Name (eg, city) []:Utrecht Organization Name (eg, company) [Internet Widgits Pty Ltd]:debian.weijers.net Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Jan Weijers Email Address []:

Nu maken we tenslotte het certificaat zelf:

openssl x509 -req -days 730 -in apache.csr -signkey apache.key -out apache.crt

Signature ok subject=/C=NL/ST=Utrecht/L=Utrecht/O=debian.weijers.net/CN=Jan Weijers Getting Private key

Voeg het .crt en .key bestand samen tot een .pem bestand. We doen dat door beide bestanden samen te openen in cat en cat opdracht te geven het resultaat in apache.pem te schrijven

cat apache.crt apache.key > apache.pem

Als je nu ls doet moet je de volgende bestanden zien staan:

ls -l

total 16 -rw-r--r-- 1 root root 839 Jun 3 18:24 apache.crt -rw-r--r-- 1 root root 647 Jun 3 18:23 apache.csr -rw------- 1 root root 887 Jun 3 18:22 apache.key -rw-r--r-- 1 root root 1726 Jun 3 18:25 apache.pem

Nu geven we Apache de opdracht de ssl module te activeren:

a2enmod ssl

Enabling module ssl. See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates. Run '/etc/init.d/apache2 restart' to activate new configuration!

Dat herstarten laten we even zitten want we moeten nog wat aanpassingen doen. Kopieer en open ports.conf:

cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup1 nano /etc/apache2/ports.conf

Voeg de volgende regel er aan toe:

NameVirtualHost *:443

Nu moeten we nog de configuratie van de default ssl server bewerken:

cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/default-ssl.backup1 nano /etc/apache2/sites-available/default-ssl

Zoek de regels met de namen van de certificaten en verander die in de bestanden die we net gemaakt hebben:

SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Nu activeren we de site default-ssl:

a2ensite default-ssl

Enabling site default-ssl. Run '/etc/init.d/apache2 reload' to activate new configuration!

Apache vraagt om een herstart, dus die krijgt het:

/etc/init.d/apache2 reload

Reloading web server config: apache2

Tijd om te testen: ga in je webbrowser naar https://[jouwdomeinnaam] en kijk of het werkt. In de meeste browsers kun je op het slotje klikken om de informatie over het certificaat te zien. Je ziet dan als het goed is de informatie die je aan open-ssl gevoerd hebt.

Vanaf een Mac OS X of Linux computer kun je de verbinding ook testen met:

openssl s_client -connect jouwdomein.nl:443

Je ziet dan informatie over het certificaat langskomen.

Server side includes (ssi) activeren

Met server side includes kun je in je pagina handige kleine tools gebruiken. Zie hier voor meer informatie. Om te activeren moet je de module inladen:

a2enmod include

Enabling module include. Run '/etc/init.d/apache2 restart' to activate new configuration!

Herstart vervolgens apache.

mpm-itk beveiliging

Bij default draaien alle virtuele sites op een server onder dezelfde gebruikersnaam, meestal www-data oid. Met een multi=processing-module kun je elke site onder de eigen gebruikersnaam laten draaien. Begin met het installeren van mpm-itk:

apt-get install apache2-mpm-itk

Vervolgens voeg je bij elke virtuele host een regel toe om aan te geven onder welke gebruikersnaam en groep de site moet draaien:

AssignUserId [gebruiker] [groep]

Je moet dan ook zorgen dat de mappen in de thuismap van de gebruiker de juiste rechten hebben:

chown -R [gebruiker]:[groep] /home/gebruiker/public_html

Let wel even op dat je mappen die nodig zijn voor uploads soms toch andere rechten moet geven. En als het een site is waar klanten zelf bestanden kunnen plaatsen dan kunnen ze waarschijnlijk ook bestanden plaatsen met andere rechten. Je zou een cron kunnen klussen om elke nacht de rechten op alle mappen te controleren.

Maximale grootte upload aanpassen

Bij default heeft Apache in combinatie met PHP een vrij lage maximale grootte van een upload: 2 megabyte. Om dit te verhogen moet je de configuratie van PHP aanpassen:

nano /etc/php5/apache2/php.ini

Je zoekt daarin de volgende twee regels en vult daarin de gewenste maximale grootte van uploads in:

post_max_size = 50M upload_max_filesize = 50M

In dit voorbeeld heb ik de maximale grootte dus op 50 megabyte ingesteld.

Directory listing uitzetten

Als een bezoeker een link op jouw site opent, bijvoorbeeld www.test.nl/eenmap dan kijkt Apache in eenmap of daar een bestand met de naam index.php of index.html staat. Kan Apache die niet vinden dan wordt een lijst van alle bestanden in de map getoond. Dit kan een veiligheidsrisico zijn. Ik heb de module die de directory index maakt uitgezet met de opdracht:

a2dismod autoindex

Module autoindex disabled. To activate the new configuration, you need to run: service apache2 restart

En vervolgens herstart je Apache2 met het bekende:

service apache2 restart