# Linux Systeembeheer/Webservers
## Inleiding

LAMP staat voor Linux, Apache, MySQL en PHP en is ongetwijfeld één van de meest gebruikte toepassingen van Linux. Vele bekende websites (onder andere ook Facebook) zijn gebaseerd op dit platform. MySQL wordt in sommige gevallen vervangen door PostgreSQL (of een andere open source databank) en PHP door Perl, Python of een andere scriptingtaal, maar het stramien blijft hetzelfde. In dit hoofdstuk tonen we hoe je een LAMP-stack kan opzetten als basis voor een dynamische website.

## Leerdoelen

* Een LAMP-server (d.w.z. Linux+Apache+MySQL+PHP) kunnen installeren en configureren in een op RedHat-gebaseerd Linux-systeem
** Ondersteuning voor PHP toevoegen
** Ondersteuning voor SSL (HTTPS) toevoegen
*** Een self-signed certificaat kunnen aanmaken en gebruiken
** Een Apache-webserver kunnen beveiligen met SELinux

## Een LAMP-server opzetten

Aangezien we veel commando's na elkaar met administrator rechten moeten uitvoeren voor het opzetten van de webserver:

### MySQL installatie

Installatie van de nodige onderdelen:
MySQL server aanzetten bij opstart:
We openen het bestand /etc/sysconfig/iptables om de firewall te configureren:
Hier voegen we de volgende lijn aan toe zodat de clients de MySQL server kunnen bereiken: (toevoegen in de file na INPUT en vóór FORWARD)
Herstarten van de firewall om de nieuwe regel te laden:
MySQL server starten:
Aanmaken van mysql user root met paswoord:
Aanmelden in mysql als root:
Geef nu het 1stap geleden ingegeven rootpassword in.
    Alternatief: paswoord om in te loggen veranderen:
Opvragen van de mysql.user table om te zien welke gebruikers er bestaan:
Zorgen dat de we de Any gebruikers (= users zonder naam) droppen:
Nieuwe user aanmaken:
Uit mysqladmin gaan:
    Alternatief: Testen door aan te melden als mysqlUser:

### Apache

Installatie Apache:
Apache starten:
Apache automatisch aanzetten bij het opstarten:
Firewall configuratie met system-config-firewall-tui ( sudo yum -y install system-config-firewall-tui)
of manueel toevoegen
of
Hier voegen we de volgende lijn aan toe om poort 80 open te zetten:(toevoegen in de file na INPUT en voor FORWARD)
Herstarten van de firewall om de nieuwe regel te laden:
Test door te surfen naar https://192.168.56.101 (dit ip adres kan variëren afhandelijk van uw configuratie, je moet dan met het commando ifconfig opzoeken naar welk adres je moet surfen)

### SSL

We genereren eerst een private key. Deze wordt geëncrypteerd opgeslagen met het Triple-DES algoritme. Je dient meteen een wachtwoord (passphrase) in te tikken dat je telkens als je de server opstart zal moeten herhalen. Als je dat wil vermijden, kan je de optie -des3 weglaten. Merk op dat dat voor productiesystemen een beveiligingsrisico inhoudt. Als iemand toegang kan krijgen tot het filesysteem, kan die zo je certificaat stelen en een vervalste website opzetten.
Certificate Signing Request (CSR) genereren (geef hier hetzelfde wachtwoord in):
Geldigheid instellen op 365 dagen:
Server.key kopiëren om wachtwoord te verwijderen:
Map maken om .csr bestand in te plaatsen:
Map maken om .crt bestand in te plaatsen:
Map maken om .key en .key.secure bestand in te plaatsen:
Verplaatsen van de files naar de overeenkomstige directory:
Permissies wijzigen zodat enkel de gebruiker root toegang heeft tot deze mappen:
Gegevens aanpassen in /etc/httpd/conf.d/ssl.conf:
Volgende lijnen aanpassen:
       - Onder Virtual Host deel
       <VirtualHost _default_:443> wordt <VirtualHost *:443>
       - Onder Server Certificate
       SSLCertificateFile /etc/httpd/conf/ssl.crt/host_domain_tld.crt
       - Onder Private key
       SSLCertificateKeyFile /etc/httpd/conf/ssl.key/host_domain_tld.key
We openen het bestand /etc/sysconfig/iptables om de firewall te configureren:
Hier voegen we de volgende lijn aan toe zodat de clients de SSL poort kunnen bereiken:(toevoegen in de file na INPUT en voor FORWARD)
Herstarten van de firewall om de nieuwe regel te laden:
Apache herstarten:
       Dit komt omdat SELinux het bestand niet vertrouwt (tail /var/log/messages)
Voor fedora 13 minimal install:
Apache herstarten:

### PHP

Installatie van PHP en PHP-MYSQL:
Herstarten van Apache:
We zijn klaar, dus su uitloggen:

## Toepassing Drupal

Drupal is een bekend Content Management System, ontwikkeld door Dries Buytaert (een Vlaming, trouwens). Drupal is gebaseerd op de LAMP stack en is erg populair voor het snel opzetten van dynamische websites. Veel hostingbedrijven maken er dan ook gebruik van.
Aanmaken van een database:
Inloggen op MySQL:
Gebruiker mysqlUser volledige toegang geven tot de database, m.a.w. mysqlUser dezelfde rechten als root geven:
Rechten op de map /var/www/html wijzigen:
De huidige directory zetten op /var/www/html:
Drupal downloaden:
Files uitpakken:
Kopiëren van de standaard settings:
Rechten op de map wijzigen:
PHP extensions installeren
Inloggen op de webserver en de configuratie volgen.

## Labo-opdracht: een Drupal appliance opzetten

Het doel van dit labo is het opzetten van een Drupal server in een virtuele machine. De naam “appliance” in de titel wordt tegenwoordig vaak gebruikt (o.a. door VMWare) voor een virtuele machine met een minimale installatie voor een specifiek doel.
* Installeer een minimale versie van (CentOS of Fedora) Linux onder een virtualisatiesysteem naar keuze (vb. Oracle VirtualBox, VMWare Server, Hyper-V, ...). Met minimaal bedoelen we dat enkel en alleen de nodige packages geïnstalleerd worden die nodig zijn voor het uitvoeren van het labo. Een grafische omgeving is bijvoorbeeld niet nodig. Gebruik eventueel de “netinstall” installatie-cd. Bij Package installation zorg je ervoor dat geen van de voorgestelde opties ("Kantoor en productiviteit", enz) geselecteerd is, en dat onderaan "Nu aanpassen" aangevinkt is. In het volgende scherm ("Softwareselectie aanpassen") vink je eveneens alle categorieën uit.
* Installeer MySQL op je appliance
* Zet een Apache webserver op met ondersteuning voor PHP en SSL. Genereer zelf een self-signed certificate en installeer het. Het moet mogelijk zijn om vanaf het host-besturingssysteem de webserver van je appliance te contacteren via SSL (https://x.x.x.x/).
* Installeer Drupal op je appliance. Zorg dat je Drupal-site bereikbaar is via een versleutelde verbinding.

## Bibliografie

* https://dev.mysql.com/doc/refman/5.5/en/installing.html
* https://dev.mysql.com/doc/refman/5.5/en/adding-users.html
* https://dev.antoinesolutions.com/mysql}
* https://www.vjtod.org/selinux_crt_httpd.html
* https://www.apache-ssl.org/docs.html#SSLCertificateFile