Linux Webserver

Linux Webserver

Auteur: Huseyin Kaya

Website van Huseyin Kaya | Artikelen van Huseyin Kaya

Inleiding

Linux is een besturingssysteem gebaseerd op Unix dat gratis te gebruiken is. Linux wordt continue aangepast en verbeterd over de hele wereld en omdat het gratis is worden de aanpassingen beschikbaar gemaakt voor iedereen. De meeste webservers draaien op een Linux besturingssysteem en daar is maar één reden voor: Linux is betrouwbaar.

Betrouwbaarheid komt omdat je een Linux machine normaal gesproken dagen/maanden zelfs jaren aan kunt laten staan zonder het opnieuw op te starten. Dit is in theorie zeker mogelijk, maar niet aan te raden vanwege updates van onder andere de kernel. Beveiliging is ook een belangrijk aandachtpunt bij Linux, je kunt met een paar simpele aanpassingen een goede beveiliging instellen op je server.

Steeds meer bedrijven komen met een online winkel, waarna de systeembeheerders een webserver moeten opzetten. De keuze gaat meestal naar Linux omdat het onder andere financieel voordeliger is. Maar meestal komt dan de vraag hoe het op de juiste manier gedaan moet worden.

In dit document ga ik uitleggen hoe je een Linux webserver kunt opzetten met een paar beveiligingsaspecten. Voor alles wat hier wordt uitgelegd heb je de root-privileges nodig (super user). Installatie commando’s zijn voor Ubuntu/Debian distributies, dus let erop dat dit kan verschillen voor bijvoorbeeld SUSE/CentOS en Red Hat distributies.

1. MySQL

MySQL is niks anders dan een database management systeem die het mogelijk maakt om gegevens door te voeren naar je server en ze vervolgens weer op te vragen. MySQL is het meest gebruikte SQL database management tool en er zijn al miljoenen gebruikers, en het aantal groeit nog steeds met een razend tempo. MySQL is een geheel open-source project dus is daarom gratis te downloaden op de website http://www.mysql.com.

1.1 Installatie

Als eerste wordt MySQL geïnstalleerd, de meest recente versie op het moment van schrijven is 5.1. De installatie van MySQL is makkelijk je kunt het doen met 1 commando. Let wel op: dit is voor Ubuntu/Debian distributies!

apt-get install mysql-server mysql-client

Als je het bovenstaande commando uitvoert wordt er maar één vraag gesteld. Je moet namelijk een root-wachtwoord aanmaken voor je MySQL database. Het wachtwoord dat je aangeeft voor root@localhost is ook gelijk voor root@server1.servernaam.nl.

1.2 Configuratie

Als een systeembeheerder MySQL geïnstalleerd heeft zal hij als eerste naar de configuratie kijken. Je kunt je MySQL optimaliseren voor specifiek gebruik voor jou server; je kunt bijvoorbeeld geheugenconfiguraties en bufferconfiguraties aanpassen, maar er zijn natuurlijk veel meer instellingen. De configuratie wordt opgeslagen in het bestand /etc/my.cfg. Het configuratiebestand dat in /etc/ te vinden is wordt ook wel de Global configuratie genoemd omdat de instellingen gelden voor alle MySQL servers op de machine. Daarna komen server-specifieke instellingen die te vinden is in /etc/mysql-data-dir/my.cnf en als laatste komen de gebruikersinstellingen die te vinden zijn in de map ~/my.cnf. Instellingen worden ook in deze volgorde gelezen. Dus de instellingen van /etc/ overlappen de instellingen van Mysql-data-dir en deze weer de gebruikersinstellingen.

Als je bij instellingen kijkt zul je 4 voorbeeld-instellingen vinden die voor 4 soorten MySQL servers zijn aangepast.

1.2.1 Data

Data van je database wordt standaard opgeslagen in /usr/local/mysql/data mits het anders wordt opgegeven bij het installeren.

1.3 Gebruik MySQL

Let Op!: als je een opdracht uitvoert binnen MySQL moet je die altijd aan het eind ; neerzetten dit geeft het einde aan van je opdracht zodat er geen misverstanden kunnen ontstaan.

Nu je alles hebt geïnstalleerd is het tijd om je eerste connectie te maken met MySQL. Je kunt een connectie maken met het volgende commando:

mysql [opties] [database]

wil je alle opties bekijken dan kun je het “mysql –-help” commando gebruiken om een overzicht te krijgen van de opties die beschikbaar zijn. Omdat dit onze eerste connectie is kun je het volgende commando uitvoeren:

mysql –u root -p

Als je geen wachtwoord aangemaakt hebt bij het installeren zul je gelijk ingelogd zijn en het welkomsbericht zien. Als dit zo is moet je eerst een wachtwoord maken voor root zodat niet iedereen zomaar kunnen inloggen en alle rechten kan verkrijgen. Je zult ook in terminal merken dat er nu het volgende staat “Mysql>” zo weet je dat je een verbinding hebt. Als eerst gaan we de wachtwoord van root aanpassen dat kun je met de volgende commando (alleen als je nog geen wachtwoord hebt ingesteld bij de installatie van MySQL):

SET PASSWORD FOR 'root'@'localhost' = PASSWORD ('wachtwoord');

Vergeet dit aangemaakte wachtwoord niet; omdat het wachtwoord encrypt opgeslagen wordt kan het niet meer later opgevraagd/opgezocht worden. Om je sessie af te sluiten met Mysql kun je “/q” gebruiken. Volgende keer als je weer verbinding maakt als root dan voer je het volgende commando uit “mysql –u root –p” daarna wordt er een wachtwoord gevraagd. Schrijf nooit je wachtwoord zomaar in je terminal want dit wordt dan als plain text opgeslagen in je loggeschiedenis en kan dus opgevraagd worden.

1.3.1 Database aanmaken

Om een database aan te maken en te beheren gebruik je een applicatie genaamd MySQL-admin. Met Mysql admin kan een systeembeheerder databases aanpassen, verwijderen en privilege-tabellen toekennen. Het globale commando voor mysqladmin is “mysqladmin [opties] [commando’s]”, je kunt hier ook weer het –-help commando gebruiken voor een overzicht van mysqladmin opties.

We gaan nu een database aanmaken. Je kunt het volgende commando gebruiken om een database aan te maken:

“mysqladmin –u root –p create web”

Hierbij is web is de naam van je database. De aangegeven database is nu succesvol aangemaakt.

1.3.2 Connectie database

Nu wil je natuurlijk met een database verbinding maken om te kunnen werken. Je kunt op twee manieren een connectie leggen met je database:

1. Je geeft de database aan bij het inloggen. Je commando ziet er dan als volgt uit: “mysql –u root –p web”, waarbij web je database is.
2. Nadat je ingelogd bent kun je database aangeven om een connectie te maken. Gebruik het volgende commando na het inloggen bij MySQL: “use web”, waarbij web je database is.

1.3.3 Gebruikers aanmaken

Gebruikers aanmaken in MySQL is niet zo moeilijk, je bent met één commando klaar. Zolang je de gebruiker geen rechten geeft op een database kan deze persoon niks, maar daar komen we later op terug bij het toekennen van database privileges.

Je kunt twee soorten accounts aanmaken, accounts die alleen lokaal kunnen inloggen en accounts die ook van buitenaf kunnen inloggen. Dit moet je aangeven. Houd er wel rekening mee dat je eerst zelf moet inloggen op MySQL om gebruikers aan te maken.

Met het volgende commando maak je een account aan die alleen lokaal kan inloggen:

CREATE USER ‘jan’@’localhost’ IDENTIFIED BY ‘wachtwoord’;

Accounts aanmaken die ook van buitenaf verbinding kunnen maken:

CREATE USER ‘jan’@%’ IDENTIFIED BY ‘wachtwoord’;

Je hebt nu een gebruiker gemaakt genaamd “jan” met het wachtwoord “wachtwoord”. Beide commando’s lijken op elkaar, op één ding na: bij het ene commando staat localhost en bij de ander een % teken. % betekent dat elke hostnaam kan inloggen, dus niet alleen localhost.

Vergeet niet om een wachtwoord te geven, anders zal er een gebruiker worden aangemaakt zonder wachtwoord en zo kan iedereen (die de inlognaam weet) in je MySQL server komen, ook al heeft deze persoon geen rechten. Nu je een gebruiker hebt kun je doorgaan met het toekennen van rechten.

1.3.4 Privilege-tabel

MySQL privilage table is ervoor om rechten toe te kennen aan gebruikers. Zo kun je aangeven welke acties een gebruiker mag uitvoeren. Je kent de rechten per database toe aan een gebruiker. De rechten zijn: ALL PRIVILEGES, FILE, RELOAD, ALTER, INDEX, SELECT, CREATE, INSERT, SHUTDOWN, DELETE, PROCESS,UPDATE, DROP, REFERENCES en USAGE. Zoals je waarschijnlijk gemerkt hebt zijn dit ook de SQL commando’s.

Om rechten toe te kennen moet je eerst zelf ingelogd zijn als een gebruiker met de juiste rechten. In MySQL kun je de optie GRANT gebruiken om rechten toe te kennen. We hebben nu een database genaamd “web” en een gebruiker genaamd “jan”. We gaan nu “jan” alle rechten toekennen aan de database “web”. Dit doen we als volgt:

GRANT ALL PRIVILAGES ON web.* TO ‘jan’@’%;
WITH GRANT OPTION;

Je kunt “ALL PRIVILAGES” vervangen met een ander optie zoals SELECT. Je kunt ook meerdere opties in één commando meegeven, ze moeten dan wel gescheiden zijn met een komma. Wil je een gebruiker rechten geven op alle databases dan kan door “web.*” te vervangen door “*.*”.

Je kunt nu rechten geven aan een gebruiker, maar soms moet je ook rechten wegnemen. Je kunt dit doen met het REVOKE commando. Het werkt hetzelfde als het GRANT commando maar dan zet je er REVOKE neer.

Je kunt ook een overzicht krijgen met de huidige rechten van een gebruiker. Je kunt dit met de volgende commando bereiken:

SHOW GRANTS FOR ‘jan’@’%;

Je krijgt dan een mooie overzicht van de gebruiker jan, zie hieronder:

+—————————————————–+

| Grants for jan@%                                    |

+—————————————————–+

| GRANT ALL PRIVILAGES ON web.* TO ‘jan’@'%’          |

+—————————————————–+

1.4 Toegang van buitenaf

MySQL zelf is normaal gesproken alleen toegankelijk vanuit je terminal. Dit is niet makkelijk voor iedereen, want je moet veel commando’s uit je hoofd kennen of altijd een handleiding bij je houden. Hier zijn daarom alternatieven voor. Een van de meest gebruikte applicatie is PhpMyAdmin. Voor deze applicatie is er wel de PHP-module vereist op je server (hier komen we later op terug). Je krijgt hiermee toegang vanuit je browser tot je SQL database. Je hebt ook Windows-tools voor.

1.4.1 PhpMyAdmin

PhpMyAdmin is een gratis tool om toegang naar je database te krijgen vanuit je browser. Het is heel handig en je kunt er veel handelingen snel mee uitvoeren. Je kunt PhpMyAdmin gratis downloaden op de website http://www.phpmyadmin.net. Zorg er wel voor dat je altijd de laatste versie gebruikt voor beveiligingsredenen. Je kunt op deze site ook een overzicht vinden van de gevonden beveiligingsrisico’s van oudere versies met een bijbehorende aanbeveling.

1.4.2 MySQL Workbench

Dit is een officiële tool van MySQL zelf en is te downloaden voor Windows, Linux en Mac. Het is een handige tool die er ook grafisch mooi uitziet. Je kunt alle handelingen uitvoeren die je ook hebt in PhpMyAdmin. WorkBench is te downloaden op http://wb.mysql.com/.

2. Apache

Apache maakt het mogelijk om een verbinding te leggen met je server via het HTTP-protocol. Apache is een van de meest gebruikte webservers omdat het snel en stabiel is. Je kunt in Apache ook modules gebruiken. Je kunt Apache in meerdere OS gebruiken zoals in Windows, Linux en Mac. Apache heeft ook een ondersteuning voor Virtuele Hosts, dit is vooral populair bij webhosting-bedrijven.

2.1 Installatie

Als je apache installeert via een package manager dan heet het pakket “apache2″. Je kunt Apache met het volgende commando installeren:

sudo apt-get install apache2

Nadat het installeren klaar is kun je in je browser het IP-adres intikken van je server. Je krijgt dan, als het goed gegaan is, een pagina tevoorschijn waar “It works!” staat.

2.2 Configuratie

Natuurlijk zijn de configuratiebestanden van Apache belangrijk. Je kunt Apache helemaal aanpassen naar je eigen wensen. Zo kun je instellen of het standaard index.html moet pakken of start.html; dit ligt helemaal aan jou. Het standaard Apache configuratiebestand is te vinden in /etc/apache2/apache2.conf. extra configuratie bestanden zijn opgeslagen in mappen die ook in /etc/apache2 zitten. Zo heb je een map met configuratiebestanden voor modules die in apache worden gebruikt deze zijn te vinden in /etc/apache2/mods-enabled. Zoals eerder aangegeven heeft Apache ook ondersteuning voor Virtuele Hosts, je kunt configuratie vinden en aanmaken in de map /etc/apache2/sites-enabled. Je hebt ook nog een map genaamd /etc/apache2/conf.d waar je aparte configuratiebestanden kunt plaatsen.

2.3 Bestanden

Standaard wordt je site opgeslagen in /var/www; dit is echter niet handig voor als je websites gaat hosten. Je kunt in de configuratie aanpassen dat hij de home-folder van de gebruiker moet pakken. Je kunt voor ieder gebruiker een home-folder aanmaken zodat een ander gebruiker niet in iemands ander’s home-folder kan komen.

3. PHP

PHP is een scripttaal om dynamische sites mee te creëren. Heel veel sites bestaan nu ook uit php daarom is het ook handig om php module te hebben op je server. Installatie is ook heel simpel en makkelijk. Nadat het geïnstalleerd is moet je ook een module installeren in Apache voor de ondersteuning in je webserver. Een Ubuntu pakket echter, doet dit geheel automatisch. Voer gewoon  het onderstaande commando uit en PHP5 is geïnstalleerd:

sudo apt-get install php5

3.1 Testen PHP

Nadat je PHP hebt geïnstalleerd wil je natuurlijk ook uittesten of het wel goed geïnstalleerd is. Je kunt php testen met een klein php script. Maak in je webdirectory, standaard “/var/www/”, een nieuwe bestand aan genaamd info.php; zet hierin het volgende:

<?php phpinfo(); ?>

Als je dit hebt gedaan en het bestand hebt opgeslagen ga je naar je webbrowser en type je het IP adres in van je server bijv. http://192.168.1.2/info.php je krijgt dan een scherm met de informatie over je PHP. Je kunt ook aflezen waar alle configuratie bestanden zitten en welke modules er geïnstalleerd zijn. Waarschijnlijk zijn er nog niet zoveel modules.

3.2 Modules

PHP werkt met modules, elke functie in PHP is afhankelijk van een module. In een module staat de werking van een functie. Als je een functie wilt uitvoeren zonder dat er een module voor is zal dit niet lukken. Om een functie succesvol te laten werken moet je modules installeren , je kunt weer aptitude gebruiken om modules te installeren. Je hebt MySQL geïnstalleerd maar geen module voor php en daarom zullen php applicaties zoals phpmyadmin niet werken.

Je kunt het volgende commando gebruiken in je terminalvenster om een overzicht te krijgen van alle PHP5 modules:

apt-get search php5

Met de lijst kun je een keuze maken en de gekozen module laden met het volgende commando (terminal):

apt-get install php5-mysql

Je kunt ook meerdere tegelijk installeren door ze achterelkaar te zetten gescheiden met een spatie.

Om een overzicht te krijgen van de geïnstalleerde modules kun je info.php weer gebruiken. Maar vergeet niet om apache te hetstarten nadat je modules hebt geïnstalleerd, je kunt dit doen met het volgende commando:

/etc/init.d/apache2 restart



Gerelateerde posts


Reacties


  1. crslz
    25 december 2010

    dank u voor dit prachtig artikel



Laat een reactie achter

Je dient ingelogd te zijn om een reactie te plaatsen.

Rss Feeds   Twitter ons   Email Updates