Cet article explique de manière succincte la configuration d’un serveur LAMP (Linux + Apache + MariaDB + PHP) sur un serveur dédié sous Rocky Linux 8. Si vous voulez en savoir un peu plus sur les briques logicielles qui constituent cette configuration, je vous invite à lire les articles respectifs dans ce blog.
Installer le serveur de bases de données MariaDB :
# dnf install -y mariadb-server
Activer et démarrer le service :
# systemctl enable mariadb --now
Lancer la sécurisation initiale de MariaDB :
# mysql_secure_installation ... Enter current password for root (enter for none): [Entrée] ... Set root password? [Y/n] y New password: ********** Re-enter 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 ... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Ouvrir le moniteur MariaDB avec le mot de passe que l’on vient de définir :
# mysql -u root -p
Utiliser la base de données mysql
:
MariaDB [(none)]> use mysql;
...
Database changed
Afficher les utilisateurs :
MariaDB [mysql]> select user, host, password from user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *F424CF5D03C9AAE965E86FBF001AAB078229EDEB | | root | 127.0.0.1 | *F424CF5D03C9AAE965E86FBF001AAB078229EDEB | | root | ::1 | *F424CF5D03C9AAE965E86FBF001AAB078229EDEB | +------+-----------+-------------------------------------------+ 3 rows in set (0.000 sec)
Garder la seule entrée pour root@localhost
et supprimer les deux autres :
MariaDB [mysql]> delete from user where host != "localhost"; Query OK, 2 rows affected (0.001 sec)
Vérifier le résultat de l’opération :
MariaDB [mysql]> select user, host, password from user; +------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *F424CF5D03C9AAE965E86FBF001AAB078229EDEB | +------+-----------+-------------------------------------------+ 1 row in set (0.000 sec)
Quitter le moniteur MariaDB :
MariaDB [mysql]> quit; Bye
Ouvrir les ports 80 et 443 dans le pare-feu :
# firewall-cmd --permanent --add-service=http # firewall-cmd --permanent --add-service=https # firewall-cmd --reload
Installer Apache, le module SSL/TLS et Certbot :
# dnf install -y httpd mod_ssl certbot
Récupérer mon script de génération de certificats Let’s Encrypt :
# cd # git clone https://gitlab.com/kikinovak/rocky-8-server # ls rocky-8-server/el8/certbot/ mkcert.sh # mkdir -v bin mkdir: created directory 'bin' # cp -v rocky-8-server/el8/certbot/mkcert.sh bin/ 'rocky-8-server/el8/certbot/mkcert.sh' -> 'bin/mkcert.sh' # cd bin/ # chmod +x mkcert.sh
Éditer le script et renseigner l’adresse mail de notification et les domaines hébergés :
#!/bin/bash # # mkcert.sh # Create certs group if [ ! $(getent group certs) ] then echo "Adding group certs with GID 240." groupadd -g 240 certs fi # Stop Apache if ps ax | grep -v grep | grep httpd > /dev/null then echo "Stopping Apache server." systemctl stop httpd 1 > /dev/null 2>&1 fi # Generate SSL/TLS certificate certbot certonly \ --non-interactive \ --email info@microlinux.fr \ --preferred-challenges http \ --standalone \ --agree-tos \ --force-renewal \ -d sd-155842.dedibox.fr \ -d slackbox.fr \ -d mail.slackbox.fr \ -d www.slackbox.fr \ -d unixbox.fr \ -d mail.unixbox.fr \ -d www.unixbox.fr # Permissions echo "Setting file permissions." chgrp -R certs /etc/letsencrypt chmod -R g=rx /etc/letsencrypt # Start Apache echo "Starting Apache server." systemctl start httpd exit 0
Générer le certificat :
# ./mkcert.sh
Mettre en place la page par défaut du serveur :
# cd /var/www # cp -v /usr/share/testpage/index.html html/ '/usr/share/testpage/index.html' -> 'html/index.html' # chown -R nobody:nobody html/
Éditer la page par défaut html/index.html
pour la différencier de la page de bienvenue du serveur (aux alentours de la ligne 226) :
</style> </head> <body> <h1>HTTP Server <strong>sd-155842.dedibox.fr</strong></h1> <div class='row'> ...
Sauvegarder la configuration d’Apache :
# cd /etc/httpd/conf # mv -v httpd.conf httpd.conf.orig renamed 'httpd.conf' -> 'httpd.conf.orig' # cd /etc/httpd/conf.d/ # mv -v ssl.conf ssl.conf.orig renamed 'ssl.conf' -> 'ssl.conf.orig'
Installer mes templates :
# cd /root/rocky-8-server/el8/httpd/ # cp -v httpd.conf /etc/httpd/conf/ 'httpd.conf' -> '/etc/httpd/conf/httpd.conf' # cp -v ssl.conf /etc/httpd/conf.d/ 'ssl.conf' -> '/etc/httpd/conf.d/ssl.conf' # cp -v 00-sd-155842.dedibox.fr-ssl.conf /etc/httpd/conf.d/ '00-sd-155842.dedibox.fr-ssl.conf' -> '/etc/httpd/conf.d/00-sd-155842.dedibox.fr-ssl.conf'
Éditer /etc/httpd/conf/httpd.conf
en adaptant la configuration :
# /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin info@microlinux.fr
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" common
</IfModule>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset off
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
Vérifier les options globales dans /etc/httpd/conf.d/ssl.conf
:
# /etc/httpd/conf.d/ssl.conf Listen 443 https SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLCryptoDevice builtin # Cipher preferences SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM # HSTS Header always set Strict-Transport-Security \ "max-age=63072000; includeSubDomains" # Clickjacking Header always set X-Frame-Options DENY # MIME sniffing Header always set X-Content-Type-Options nosniff
Adapter la configuration de l’hôte virtuel pour la page par défaut du serveur :
# /etc/httpd/conf.d/00-sd-155842.dedibox.fr-ssl.conf
#
# http://sd-155842.dedibox.fr -> https://sd-155842.dedibox.fr
<VirtualHost *:80>
ServerName sd-155842.dedibox.fr
Redirect / https://sd-155842.dedibox.fr
</VirtualHost>
<VirtualHost _default_:443>
ServerAdmin info@microlinux.fr
DocumentRoot "/var/www/html"
ServerName sd-155842.dedibox.fr
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/sd-155842.dedibox.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sd-155842.dedibox.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/sd-155842.dedibox.fr/fullchain.pem
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
ErrorLog logs/sd-155842.dedibox.fr-error_log
CustomLog logs/sd-155842.dedibox.fr-access_log common
</VirtualHost>
Tester la configuration :
# apachectl configtest Syntax OK
Activer et lancer Apache :
# systemctl enable httpd --now
Vérifier le bon fonctionnement du serveur :
# systemctl status httpd
Ouvrir la page par défaut dans un navigateur web :
Lancer un audit de sécurité pour le chiffrement :
Activer le module PHP 7.4 qui bénéficie d’un support à long terme jusqu’en 2029 par Red Hat :
# dnf module -y reset php # dnf module -y enable php:7.4
Installer PHP 7.4 et les modules de base :
# dnf module -y install php:7.4/common # dnf install -y php-mysqlnd
Créer un fichier /etc/php.d/date.ini
pour configurer le fuseau horaire :
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Paris
Prendre en compte les modifications :
# systemctl restart httpd php-fpm
Éditer un fichier /var/www/html/phpinfo.php
pour tester PHP :
<?php phpinfo(); ?>
Afficher la page dans un navigateur web :
Notre serveur LAMP est prêt. Nous voilà armés jusqu’aux dents pour installer des applications web :
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire