Linux Systeembeheer/Webservers

Inleiding

bewerken

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

bewerken
  • 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

bewerken

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

 $ su -

MySQL installatie

bewerken

Installatie van de nodige onderdelen:

 # yum -y install mysql mysql-server

MySQL server aanzetten bij opstart:

 # chkconfig --level 2345 mysqld on

We openen het bestand /etc/sysconfig/iptables om de firewall te configureren:

 # vi /etc/sysconfig/iptables

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)

 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

Herstarten van de firewall om de nieuwe regel te laden:

 # service iptables restart

MySQL server starten:

 # service mysqld start

Aanmaken van mysql user root met paswoord:

 # mysqladmin -u root password 'rootpassword'

Aanmelden in mysql als root:

 # mysql -u root -p

Geef nu het 1stap geleden ingegeven rootpassword in.

Alternatief: paswoord om in te loggen veranderen:
 >SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nieuw-password');
 >SET PASSWORD FOR 'root'@'localhost.localdomain' = PASSWORD('nieuw-password');
 >SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('nieuw-password');

Opvragen van de mysql.user table om te zien welke gebruikers er bestaan:

 >SELECT User, Host, Password FROM mysql.user;

Zorgen dat de we de Any gebruikers (= users zonder naam) droppen:

 >DROP USER ''@'localhost';
 >DROP USER ''@'localhost.localdomain';


Nieuwe user aanmaken:

 >CREATE USER 'mysqlUser'@'localhost' IDENTIFIED BY 'mysqlPassword';
 > GRANT ALL PRIVILEGES ON *.* TO 'mysqlUser'@'localhost' WITH GRANT OPTION;


Uit mysqladmin gaan:

 >exit
Alternatief: Testen door aan te melden als mysqlUser:
 $ mysql -u mysqlUser -p
 $ mysqlPassword
 >exit

Installatie Apache:

 $ yum -y install httpd mod_ssl

Apache starten:

 $ service httpd start

Apache automatisch aanzetten bij het opstarten:

 $ chkconfig --level 2345 httpd on

Firewall configuratie met system-config-firewall-tui ( sudo yum -y install system-config-firewall-tui)

 $ system-config-firewall-tui
 $ CUSTOMIZE 
 $ [*] Secure WWW (HTTPS) --> aanzetten door op spatiebalk te drukken
 $ [*] WWW (HTTP)

of manueel toevoegen

 $ vi /etc/sysconfig/iptables

of

 $ nano /etc/sysconfig/iptables  

Hier voegen we de volgende lijn aan toe om poort 80 open te zetten:(toevoegen in de file na INPUT en voor FORWARD)

 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Herstarten van de firewall om de nieuwe regel te laden:

 $ service iptables restart

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)

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.

 $ openssl genrsa -des3 -out server.key 1024

Certificate Signing Request (CSR) genereren (geef hier hetzelfde wachtwoord in):

 $ openssl req -new -key server.key -out server.csr

Geldigheid instellen op 365 dagen:

 $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Server.key kopiëren om wachtwoord te verwijderen:

 $ cp server.key server.key.secure

Map maken om .csr bestand in te plaatsen:

 $ mkdir /etc/httpd/conf/ssl.csr/

Map maken om .crt bestand in te plaatsen:

 $ mkdir /etc/httpd/conf/ssl.crt/

Map maken om .key en .key.secure bestand in te plaatsen:

 $ mkdir /etc/httpd/conf/ssl.key/

Verplaatsen van de files naar de overeenkomstige directory:

 $ mv server.csr /etc/httpd/conf/ssl.csr/host_domain_tld.csr
 $ mv server.crt /etc/httpd/conf/ssl.crt/host_domain_tld.crt
 $ mv server.key /etc/httpd/conf/ssl.key/host_domain_tld.key
 $ mv server.key.secure /etc/httpd/conf/ssl.key/host_domain_tld.key.secure

Permissies wijzigen zodat enkel de gebruiker root toegang heeft tot deze mappen:

 $ chmod 400 /etc/httpd/conf/ssl.csr/
 $ chmod 400 /etc/httpd/conf/ssl.crt/
 $ chmod 400 /etc/httpd/conf/ssl.key/

Gegevens aanpassen in /etc/httpd/conf.d/ssl.conf:

 $ vi /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:

 $ vi /etc/sysconfig/iptables

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)

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Herstarten van de firewall om de nieuwe regel te laden:

 $ /sbin/service iptables restart

Apache herstarten:

 $ /sbin/service httpd restart -> geeft een fout:Failed, SSLCertificateFile does not exist or is empty
Dit komt omdat SELinux het bestand niet vertrouwt (tail /var/log/messages)
 $ chcon  user_u:object_r:httpd_config_t /etc/httpd/conf/ssl.crt/host_domain_tld.crt
 $ chcon  user_u:object_r:httpd_config_t /etc/httpd/conf/ssl.key/host_domain_tld.key

Voor fedora 13 minimal install:

 $ chcon user_u:object_r:httpd_config_t:s0 /etc/httpd/conf/ssl.crt/host_domain_tld.crt
 $ chcon user_u:object_r:httpd_config_t:s0 /etc/httpd/conf/ssl.key/host_domain_tld.key
 $ chcon user_u:object_r:httpd_config_t:s0 /usr/sbin/httpd

Apache herstarten:

 $ /sbin/service httpd restart -> werkt nu wel.

Installatie van PHP en PHP-MYSQL:

 $ yum -y install php php-mysql php-pear php-gd php-xml

Herstarten van Apache:

 $ /sbin/service httpd restart


We zijn klaar, dus su uitloggen:

 $ logout

Toepassing Drupal

bewerken

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:

 $ mysqladmin –u root –p create drupalDB

Inloggen op MySQL:

 $ mysql –u root –p

Gebruiker mysqlUser volledige toegang geven tot de database, m.a.w. mysqlUser dezelfde rechten als root geven:

 >GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON druppalDB.* TO ‘mysqlUser’@'localhost' IDENTIFIED BY ‘mysqlPassword’;
 >exit

Rechten op de map /var/www/html wijzigen:

 $ chown -R linuxUsername /var/www/html
 $ chgrp -R apache /var/www/html

De huidige directory zetten op /var/www/html:

 $ cd /var/www/html

Drupal downloaden:

 $ yum -y install wget
 $ wget https://ftp.drupal.org/files/projects/drupal-6.19.tar.gz

Files uitpakken:

 $ tar -xzvpf drupal-* --strip-components=1

Kopiëren van de standaard settings:

 $ cp ./sites/default/default.settings.php ./sites/default/settings.php

Rechten op de map wijzigen:

 $ chgrp -R apache .
 $ chown -R apache ./sites/default
 $ chgrp -R linuxUsername ./sites/default
 $ chmod -R g+w ./sites/default/settings.php

PHP extensions installeren

 $ yum install php-mbstring
 $ yum install php-gd

Inloggen op de webserver en de configuratie volgen.

Labo-opdracht: een Drupal appliance opzetten

bewerken

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.

  1. 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.
  2. Installeer MySQL op je appliance
  3. 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/).
  4. Installeer Drupal op je appliance. Zorg dat je Drupal-site bereikbaar is via een versleutelde verbinding.

Bibliografie

bewerken
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.