Installeer en beveilig phpMyAdmin op CentOS 8

phpMyAdmin is een gratis en open-source programma om MySQL en MariaDB servers via een web-gebaseerde interface te beheren. Met phpMyAdmin kun je databases en gebruikers aanmaken en beheren, SQL-statements uitvoeren, gegevens importeren en exporteren, en database activiteiten uitvoeren zoals, maken, verwijderen, tabellen, kolommen, indexen, permissies en nog veel meer. phpMyAdmin is een van de populairste en meest gebruikte beheerprogramma’s, vooral voor webhosting diensten.

Kenmerken

  • Biedt een eenvoudige en gebruikersvriendelijke webinterface.
  • Importeer gegevens uit CSV en SQL.
  • Ondersteunt de meeste MySQL functies, waaronder, databases, tabellen, velden en indexen maken, kopiëren, verwijderen, hernoemen en wijzigen.
  • Stelt je in staat gegevens te exporteren naar verschillende formaten zoals, PDF, CSV, SQL, XML en nog veel meer.
  • Beheer van meerdere servers.
  • Complexe queries maken met behulp van Query-by-example (QBE).

In deze zelfstudie laten we je zien hoe je phpMyAdmin op een CentOS 8 server kunt installeren en beveiligen.

Vereisten

  • Een server die CentOS 8 draait.
  • Een root wachtwoord is op de server ingesteld.

Installeer een LAMP server

Eerst moet je Apache, MariaDB, PHP en andere PHP bibliotheken op je server installeren. Je kunt ze allemaal installeren met het volgende commando:

dnf install httpd mariadb-server php php-pdo php-pecl-zip php-json php-common php-fpm php-mbstring php-cli php-mysqlnd php-json php-mbstring wget unzip

Als alle pakketten geïnstalleerd zijn, start je de Apache en MariaDB service en zet je ze aan om te starten na een herstart van het systeem met het volgende commando:

systemctl start httpd
systemctl start mariadb
systemctl enable httpd
systemctl enable mariadb

Als je klaar bent, kun je verder gaan met de volgende stap.

MariaDB instellen

MariaDB is standaard niet beveiligd. Je zult het dus eerst moeten beveiligen. Je kunt dat doen door het script mysql_secure_installation uit te voeren:

mysql_secure_installation

Beantwoord alle vragen zoals hieronder aangegeven:

Set root password? [Y/n] Y
New password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Als je klaar bent, zou je de volgende uitvoer moeten zien:

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Op dit punt is je MariaDB installatie beveiligd.

Installeer phpMyAdmin

Standaard is phpMyAdmin niet beschikbaar in de standaard repository van CentOS 8. Je zult dus de nieuwste versie van phpMyAdmin moeten downloaden van hun officiële website. Je kunt het downloaden met het volgende commando:

wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip

Eenmaal gedownload pak je het gedownloade bestand uit met het volgende commando:

unzip phpMyAdmin-4.9.2-all-languages.zip

Verplaats vervolgens de uitgepakte inhoud naar de /usr/share directory zoals hieronder:

mv phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin

Verander vervolgens de directory in /usr/share/phpmyadmin en hernoem het bestand config.sample.inc.php:

cd /usr/share/phpmyadmin
mv config.sample.inc.php config.inc.php

Open het bestand vervolgens met je favoriete teksteditor zoals hieronder:

nano config.inc.php

Verander de volgende regel:

$cfg['blowfish_secret'] = 'your-secret-password';

Sla het bestand op en sluit het als je klaar bent. Importeer dan de create_tables.sql met het volgende commando:

mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p

Geef je root wachtwoord bij de vraag om de tabel te importeren.

Maak vervolgens een tmp directory voor phpmyadmin en geef de juiste permissies:

mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp

Configureer Apache voor phpMyAdmin

Vervolgens moet je een Apache virtual host configuratiebestand maken voor phpMyAdmin. Je kunt het maken met het volgende commando:

nano /etc/httpd/conf.d/phpmyadmin.conf

Voeg de volgende regels toe:

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny> 
      Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

Sla het bestand op en sluit het als je klaar bent. Herstart dan de Apache dienst met het volgende commando:

systemctl restart httpd

Je kunt de status van de Apache controleren met het volgende commando:

systemctl status httpd

Je zou de volgende uitvoer moeten zien:

? httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           ??php-fpm.conf
   Active: active (running) since Wed 2019-12-18 01:07:52 EST; 6s ago
     Docs: man:httpd.service(8)
 Main PID: 5636 (httpd)
   Status: "Started, listening on: port 80"
    Tasks: 213 (limit: 25044)
   Memory: 28.7M
   CGroup: /system.slice/httpd.service
           ??5636 /usr/sbin/httpd -DFOREGROUND
           ??5639 /usr/sbin/httpd -DFOREGROUND
           ??5640 /usr/sbin/httpd -DFOREGROUND
           ??5641 /usr/sbin/httpd -DFOREGROUND
           ??5642 /usr/sbin/httpd -DFOREGROUND

Dec 18 01:07:52 centos8 systemd[1]: Stopped The Apache HTTP Server.
Dec 18 01:07:52 centos8 systemd[1]: Starting The Apache HTTP Server...
Dec 18 01:07:52 centos8 httpd[5636]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::200:d0>
Dec 18 01:07:52 centos8 httpd[5636]: Server configured, listening on: port 80
Dec 18 01:07:52 centos8 systemd[1]: Started The Apache HTTP Server.

Configureer SELinux en Firewall

Standaard is SELinux ingeschakeld in CentOS 8. Je zult dus SELinux moeten instellen om phpMyAdmin correct te laten werken.

Installeer eerst het pakket policycoreutils-python-utils om een SELinux omgeving te beheren met het volgende commando:

dnf install policycoreutils-python-utils

Geef vervolgens toegang tot de map /usr/share/phpmyadmin met het volgende commando:

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/phpmyadmin/'
semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/phpmyadmin/tmp(/.*)?"

Resulteer nu door alle bestanden in je phpmyadmin directory door het volgende commando uit te voeren:

restorecon -Rv '/usr/share/phpmyadmin/'

Vervolgens moet je een firewall regel maken om HTTP diensten van externe netwerken toe te staan. Je kunt dit toestaan met het volgende commando:

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

phpMyAdmin is nu geïnstalleerd en geconfigureerd. Nu is het tijd om te controleren of het werkt of niet.

Open je web browser en typ de URL http://your-server-ip/phpmyadmin. Je wordt doorgestuurd naar de volgende pagina:

PHPMyAdmin Inloggen

Beveilig phpMyAdmin

Op dit punt werkt de phpMyAdmin instantie naar behoren. Maar je phpMyAdmin instantie beveiligen tegen de buitenwereld is een belangrijke taak voor je. In dit gedeelte laten we je zien hoe je je phpMyAdmin instantie kunt beveiligen.

Sta phpMyAdmin toe vanaf een bepaald IP

Eerst moet je je phpMyAdmin zo instellen dat het alleen toegankelijk is vanaf het IP adres van je thuisverbinding.

Je kunt dit instellen door het bestand /etc/httpd/conf.d/phpmyadmin.conf te bewerken:

nano /etc/httpd/conf.d/phpmyadmin.conf

Zoek de volgende regels:

     <RequireAny>
       Require all granted
     </RequireAny>

En vervang ze door het volgende:

<RequireAny>
    Require ip your-home--connection-ip-address
    Require ip ::1
</RequireAny>

Sla het bestand op en sluit het als je klaar bent.

Configureer extra laag van authenticatie

Het is een goed idee om je phpmyadmin directory met een wachtwoord te beveiligen door een basis authenticatie in te stellen.

Maak daartoe een nieuw authenticatiebestand met het gereedschap htpasswd, zoals hieronder:

mkdir /etc/phpmyadmin
htpasswd -c /etc/phpmyadmin/.htpasswd admin

Je wordt gevraagd je admin wachtwoord op te geven zoals hieronder:

New password: 
Re-type new password: 
Adding password for user admin

Vervolgens moet je Apache configureren om het .htpasswd bestand te gebruiken. Je kunt dit doen door het bestand /etc/httpd/conf.d/phpmyadmin.conf te bewerken.

nano /etc/httpd/conf.d/phpmyadmin.conf

Voeg de volgende regels toe onder de regel “AddDefaultCharset UTF-8”:

    Options  +FollowSymLinks +Multiviews +Indexes
    AllowOverride None
    AuthType basic
    AuthName "Authentication Required"
    AuthUserFile /etc/phpmyadmin/.htpasswd
    Require valid-user

Sla het bestand op en herstart de Apache dienst om de veranderingen te laten inwerken:

systemctl restart httpd

Toegang tot phpMyAdmin

Nu is je phpMyAdmin instantie beveiligd met een extra laag beveiliging. Open je webbrowser en typ de URL http://your-server-ip/phpmyadmin. Je wordt gevraagd de inloggegevens in te voeren van de gebruiker die je eerder aanmaakte, zoals hieronder:

Beveiligd phpMyAdmin

Geef je admin gebruikersnaam en wachtwoord op, en klik dan op de OK knop. Je wordt doorgestuurd naar de phpMyAdmin login pagina:

Log in als root gebruiker in phpMyAdmin

Geef nu de inloggegevens van je MySQL administratieve gebruiker en klik op de Ga knop. Je zou de volgende pagina moeten zien:

phpMyAdmin databank dashboard

Conclusie

Gefeliciteerd! Je hebt phpMyAdmin met succes geïnstalleerd en beveiligd op de CentOS 8 server. Je kunt nu databases, gebruikers en tabellen aanmaken en ze beheren vanuit de web-gebaseerde interface. Stel me gerust als je nog vragen hebt.