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
Apache
[bewerken]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)
SSL
[bewerken]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.
PHP
[bewerken]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.
- 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.