OBJECTIF

Cet article montre comment installer tous les éléments techniques nécessaires à la réalisation du PPE « serveur WEB ». Il est complété, corrigé, en collaboration avec les apprentis pendant la réalisation du PPE.
On n’aborde pas ici les parties obligatoires concernant la fiche de contexte, la gestion du temps ou encore la recherche et la comparaison de différentes solutions. Les schémas réseaux sont indispensables et leur réalisation est à la charge de l’apprenti. On indique simplement que l’ensemble des machines virtuelles seront créées en mode réseau NAT (ou BRIDGE) pour pouvoir profiter d’une connexion internet nécessaire au téléchargement des outils requis. Mais une fois l’ensemble des éléments installés, on basculera toutes les machines dans un réseau interne avec adressage IP fixe.

Voici les éléments décrits dans ce post:

INSTALLATION D’UN SERVEUR LAMP

Comment installer la pile Apache, MySQL et PHP sur un serveur CENTOS 7. Cette pile est indispensable par exemple à l’installation de WordPress. On travaille sur une machine Virtual Box avec son mode réseau par défaut: le mode NAT, qu’on utilise pour avoir accès à interne et pour récupérer les packages et la documentation nécessaire.

1 Prérequis

On aura besoin du dépot EPEL (Extra Packages for Entreprise Linux):

rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum -y install epel-release

2 Installation de MySQL / MariaDB

MariaDB est un fork de MySQL.

yum -y install mariadb-server mariadb

Démarrage du service et démarrage automatique au boot.

systemctl start mariadb.service
systemctl enable mariadb.service

Sécurisation des comptes et de la base.

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not foundNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!In order to log into MariaDB to secure it, we’ll need the current
password for the root user.  If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.Enter current password for root (enter for none): <–ENTER
OK, successfully used password, moving on…Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.Set root password? [Y/n]
New password: <–votre mot de passe
Re-enter new password: <–répéter votre mot de passe
Password updated successfully!
Reloading privilege tables..
… Success!By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.Remove anonymous users? [Y/n] <–ENTER
… Success!Normally, root should only be allowed to connect from ‘localhost’.  This
ensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] <–ENTER
… Success!By default, MariaDB comes with a database named ‘test’ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.Remove test database and access to it? [Y/n] <–ENTER
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.Reload privilege tables now? [Y/n] <–ENTER
… 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!
[root@server1 ~]#

3 Installation d’Apache2

Le packages CENTOS 7 sont fournis avec Apach 2:

yum -y install httpd

Démarrage du service et démarrage automatique au boot.

systemctl start httpd.service
systemctl enable httpd.service

Configuration du pare-feu de CentOS 7 pour laisser passer les connexions vers le port 80 (http) et le port 443 (https).

firewall-cmd –permanent –zone=public –add-service=http
firewall-cmd –permanent –zone=public –add-service=https
firewall-cmd –reload

Test sur http://localhost

4 Installation de PHP5

yum -y install php

systemctl restart httpd.service

5 Tester PHP5 / Détails de l’installation

Créer le fichier info.php dans le « Document Root » du serveur Apache

vi /var/www/html/info.php

<?php
phpinfo();
?>

Tester (par exemple: http://localhost/info.php):

Par contre, vous pouvez voir que MySQL n’est pas listée dans la liste des support PHP

6 Activer le support MySQL par PHP5

yum search php

Dans la liste retournée, récupérer le support php pour MySQL

yum -y install php-mysql

Et récupérer aussi la lupart des support habituellement requis pourles CMS

yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

Redémarrer Apache2:

 systemctl restart httpd.service

Retester les différents modules sur l’adresse http://localhost/info.php

7 Installation de phpMyAdmin

phpMyAdmin est une interface WEB de gestion des bases de données MySQL.

yum install phpMyAdmin

On commente et on réécrit la rubrique <Directory « /usr/share/phpmyadmin« > pour avoir accès à phpMyAdmin même depuis une autre machine que la machine localhost:

vi /etc/httpd/conf.d/phpMyAdmin.conf

[...]
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

#<Directory /usr/share/phpMyAdmin/>
#   <IfModule mod_authz_core.c>
#     # Apache 2.4
#     <RequireAny>
#       Require ip 127.0.0.1
#       Require ip ::1
#     </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/>
        Options none
        AllowOverride Limit
        Require all granted
</Directory>

[...]

Puis faire en sorte que l’authentification à phpMyAdmin ne se fasse plus par cookie mais par http:

vi /etc/phpMyAdmin/config.inc.php

[...]
$cfg['Servers'][$i]['auth_type']     = 'http';    // Authentication method (config, http or cookie based)?
[...]

Redémarrer Apache:

systemctl restart  httpd.service

Vérifier: http://localhost/phpmyadmin/:


INSTALLATION D’UN SERVEUR WORDPRESS

On se réfère à l’article ci-dessous:

https://fr.wordpress.org/txt-install

qui explique les grandes lignes de l’installation de WordPress et permet le téléchargement de la version française.

reproduction locale de l’article:

WordPress est célèbre pour pouvoir être installé et prêt à publier en 5 minutes ! Voici comment :

  1. Téléchargez et décompressez WordPress si ça n’est pas déjà fait,
  2. Créez une base de données pour WordPress sur votre serveur Web, de sorte que MySQL ait tous les privilèges en accès et en modification,
  3. Déposez les fichiers de WordPress à l’emplacement désiré sur votre serveur Web :
    • Si vous souhaitez placer WordPress à la racine de votre domaine (par exemple http://www.example.com/), déplacez ou téléchargez tout le contenu du répertoire WordPress décompressé (en excluant le répertoire lui-même) dans le répertoire racine de votre serveur Web.
    • Si vous souhaitez placer votre installation de WordPress dans un sous-répertoire de votre site Web (par exemple http//www.example.com/blog/), renommez le répertoire wordpress avec le nom que vous avez choisi pour le sous-répertoire et déplacez ou téléchargez-le vers votre serveur Web. Par exemple, si vous voulez que votre installation de WordPress soit présente dans le sous-répertoire appelé « blog », vous devez renommer le répertoire appelé « wordpress » en « blog » et le télécharger dans le répertoire racine de votre serveur Web.
  4. Lancer le script d’installation en ouvrant l’adresse de WordPress dans votre navigateur Web préféré. Suivez les instructions de l’installateur, et validez.

INSTALLATION D’UN CLIENT


L’installation d’un client ne pose aucun problème. Il suffit d’utiliser la machine virtuelle Cent-OS fournie par le formateur. Cette machine contient déjà un navigateur firefox.

BASCULE EN RESEAU INTERNE IP FIXE

La bascule des machines en réseau interne IP fixe se fait en :

  • machines virtuelles éteintes
  • changement du mode réseau en mode réseau interne depuis l’interface Virtual Box (donner comme nom de rseau interne: « PPE WordPress »

Le changement en IP fixe se fait une fois la machine virtuelle démarrée:

  • cliquer sur l’icône « réseau » dans la barre supérieure du bureau Cent-OS
  • cliquer sur le bouton de configuration (roue dentée en bas à droite de la fenêtre)
  • cliquer sur IPV4
  • remplacer DHP par MANUAL
  • ip = 192.168.100.1
  • netmask: = 255.255.255.0
  • gateway = 0.0.0.0
  • Redémarrer le réseau: « systemctl restart network » ou carrément « init 6 »

Pour en savoir plus, reportez-vous à l’article: http://www.neavak.com/index.php/2016/07/10/exemple-de-configuration-reseau-sous-virtualbox/

Faites de même pour le client (avec une adresse ip fixe différente bien sûr).

Modifier le fichier /etc/hosts du client pour faire correspondre le nom de domaine www.cfalamare.re à l’adresse IP fixe que vous avez allouée au serveur WORDPRESS (cette étape est très importante). Elle est reprise dans le paragraphe suivant au cas où …

CONFIGURATION VIRTUAL HOST

  • choisir comme nom de domaine www.cfalamare.re
  • configurer le fichier /etc/hosts de votre machine en insérant ce nom de domaine. Bien comprendre que nous faisons cela car nous ne disposons pas d’un DNS sur lequel ce nom est enregistré

CORRIGER LA BASE WORDPRESS

  • exporter la base wordpress dans un fichier:
    mysqldump –user=<wordpress_user> –password=<wordpress_password> <wordpress_base> > ./wordpress.dump
  • Remplacer dans le fichier wordpress.dump toutes les occurrences de 127.0.0.1 ou localhost.localdomain par www.cfalamare.re
  • Recharger la base wordpress avec cette nouvelle configuration:
    mysql –user=<wordpress_user> –password=<wordpress_password> <wordpress_base> < ./wordpress.dump

CREATION DU VIRTUAL HOST www.cfalamare.re

  • Tester une connexion sur http://www.cfalamare.re et constater qu’elle ne fonctionne pas. Il faut écrire: http://www.cfalamare.re/cfa où cfa est le répertorie web sous lequel a été enregistré le site wordpress.Pour éviter l’ajout du répertoire, on doit créer un host virtuel dans la configuration d’Apache.
  • Sous /etc/httpd/conf.d, créer le fichier sio.conf suivant en adaotant les IP bien sûr:
    NameVirtualHost 192.168.1.21:80
    <VirtualHost 192.168.1.21:80>
    ServerName ww.cfalamare.re
    DocumentRoot  /var/www/html/cfa
    Options +FollowSymLinks
    </VirtualHost>
  • Redémarrer le serveur (systemctl httpd restart) et vérifier que la connexion http://www.cfalamare.re fonctionne maintenant correctement.

INSTALLATION DU SERVEUR FTP

  • Vérifier que l’installateur de packets (yum) ne tourne pas déjà (pour d’éventuelles mises à jour automatiques par exemple). Si c’est le cas, tuer le processus par un “kill -9 <numero_de_processus>”.
  • Récupération et installation du package client ftp par: “yum install ftp”
  • Récupération et installation du package serveur vsftpd par: “yum install vsftpd”
  • Démarrer le service vsftpd par “service vsftpd start”
  • Faire en sorte que le service démarre automatiquement à chaque démarrage de la machine: “chkconfig vsftpd on”
  • Vérifier par un “ps-ef | grep vsftpd” que vsftpd tourne bien

FICHIER DE CONFIGURATION PRINCIPAL

Ce fichier s’appelle “/etc/vsftpd/vsftpd.conf”

On passe ici en revue les différents éléments de configuration proposés par le fichier:

Après avoir lu et compris les différentes directives ci-dessous, il vous est demandé de:

  • créer un utilisateur Linux sur le serveur FTP qui sera appelé pour les sauvegardes (avec droits d’écriture)
  • chrooter cet utilisateur

 

anonymous_enable=YES

Permet la connexion anonyme (anonymous/anonymous) au serveur FTP. Le répertoire par défaut offert aux connexions anonymes est /var/ftp qui contient un sous répertoire pub. Il peut être changé par l’utilisation de la directive “anon_root”.

On notera que quelques soient les droits des fichiers déposés dans ce répertoire pub, il est impossible par défaut au user anonymous de supprimer ces fichiers.

 

local_enable=YES

Permet la connexion des utilisateurs définis sur la même machine que le serveur FTP.

 

write_enable=YES

Permet l’écriture (le dépôt) de fichier (pour un utilisateur autre que l’utilisateur ‘anonymous’ ou l’utilisateur ‘root’). Attention si SELINUX est positionné à enforce, même un write_enable à YES ne permettra pas l’écriture.

 

local_umask=022

C’est le masque (AND NOT) appliqué aux permissions 666 pour les fichiers et 777 pour les répertoires, et ce pour les utilisateurs locaux, c’est à dire pour les utilisateurs qui ont un compte sur la machine offrant le service FTP.

Exemple:

  • si local_mask=022 alors les fichiers seront créés avec les permissions
    666 & !022 soit 110.110.110 & !000.010.010 <=> 110.110.110 & 111.101.101
    ce qui donne: 110.100.100

 

anon_upload_enable=YES

Permet l’upload anonyme de fichiers. Attention, il faut que le répertorie d’upload soit en mode “writable” pour le user ftp et que la directive globale vue plus haut de write_enable soit aussi et préalablement ixée à YES.

On écrira donc:

  • cd /var/ftp
  • chown ftp.ftp ./pub

 

anon_mkdir_write_enable=YES

Permet au user “anonymous” de créer des répertoires et des sous-répertoires dans le répertoire pub sous le répertoire de connexion ftp anonyme qui est par défaut /var/ftp. Il faut que les droits soient fixés comme dans le paragraphe ci-dessus concernant le user ftp.

 

dirmessage_enable=YES

Lorsque cette option est positionnée à YES, le contenu du fichier .message situé dans le répertoire dans lequel le user se positionne ou repositionne est automatiquement affiché (au moment justement du changement de répertoire).

 

xferlog_enable=YES

Avec cette option, les logs de connexion et de transfert de fichiers sont activés vers le fichier de logs spécifié par la directive vsftpd_log_file qui est par défaut le fichier /var/log/xferlog

 

connect_from_port_20=YES

S’assure que toutes les requêtes de data arriveront bien sur le port 20

 

chown_uploads=YES
chown_username=<quelqu’un>

Ces deux directives indiquent que les fichiers uploadés par le user anonymous vont appartenir au user “quelqu’un”

 

xferlog_file=/var/log/xferlog

Définit le fichier de log lorsque l’option xferlog_enable est activée.

 

xferlog_file=/var/log/xferlog

On trouve ici le nom du fichier log enregistrant les requêtes et erreurs de transfert.

 

idle_session_timeout=600

Temps maximum d’attente de la réponse à une commande.

 

data_connextion_timeout=120

Temps maximum d’attente de reprise lorsqu’un transfert de donnée s’ interrompt

 

nopriv_user=ftpsecure

Il s’agit ici du nom de user sans aucun privillège -nopriv). Cet utilisateur est l’utilisateur le plus “secure”. Il est recommandé mais non obligatoire d’en créer un.

 

async_abor_enable=YES

Permet d’interrompre des transferts de manière asynchrone, c’est à dire bien après le lancement de la commande de transfert. Cette directive est dangereuse.

 

ascii_upload_enable=YESascii_download_enable=YES

directives permettant le transfert ascii. En pratique, ces directives ne sont presque plus utilisées aujourd’hui. On transfère tout en binaire.

 

ftpd_banner=Bienvenue sur le serveur FTP du CFA

Bannière d’accueil

 

deny_email_enable=YES

Si cette directive existe, alors quand on se loggue en anonymous, on doit donner son adresse-mail comme mot de passe et cette directive indique que le serveur FTP peut refuser les connexions anonymes dont le password est défini dans le fichier suivant:

 

banned_email_file=/etc/vsftpd/banned_email

Fichier contenant les mot de passe (email) interdits pour connexion anonyme.

 

chroot_local_users=YES

Avec cette directive, les users locaux (à la machine serveur ftp) sont “chrootés” automatiquement lors de la connexion FTP. Attention, pour ce faire:

  • SELINUX doit être positionné à Permissive
  • le répertoire HOME de l’utilisateur ne doit pas être “writable

 

chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list

Avec cette directive, si “chroot_local_users” est positionné à YES, alors les users présents dans le fichier “chroot_list_file” NE SONT PAS CHROOTES, et inversement si “chroot_local_users” est positionné à NO, alors les users présents dans chroot_list SONT CHROOTES.

 

ls_recurse_enable=YES

Permet l’utilisation de la commande ls avec l’option R et donc un parcours récursif de l’arborescence

 

listen=NO

Si la directive “listen” est positionnée à YES, alors vsftpd est utilisé en mode standalone.

 

listen_ipv6=YES

Vsftpd peut écouter en STANDALONE des requêtes en ipv6. Et de plus si il écoute en ipv6, il écoute aussi en ipv4. Donc si cette directive est positionnée à YES, il faut absolument que la directive précédente “listen” soit positionnée à NO

 

pam_service_name=vsftpd

Nom du service/système d’authentification

 

userlist_enable=YES

Lorsque cette directive est positionnée à YES, les utilisateurs listés dans le fichier spécifié dans “userlist_file” voient leur accès refusé avant même qu’ils aient envoyé leur mot de passe sur le réseau..

 

tcp_wrappers=YES

Si vsftpd est défini en tant que wrapper dans /etc/xinetd.d ET QUE les directives listen ET listen_ipv6 sont positionnées toutes deux à NO (donc pas de mode standalone), alors les connexions se font par wrapper.

RETOUR SUR LE CHROOTAGE (PRECISIONS)

vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES

useradd domi

passwd domi

chmod a-w /home/domi

cd /home/domi

mkdir pub

chown domi.domi ./pub

setenforce permissive

systemctl restart vsftpd

Sauvegardes par FTP

Reportez-vous à l’article qui suit:
http://www.neavak.com/index.php/2016/10/08/un-exemple-pratique-de-sauvegarde-par-ftp/

Sauvegarde par RSYNC

Reportez-vous à larticle qui suit. Attention, il faut adater vos commandes à votre cas !

http://www.neavak.com/index.php/2016/10/09/rsync-installation-et-usage/

Réplication MySQL

En pré-requis on doit disposer du serveur internet (et donc de mariadb en tant que maître) et d’un serveur mariadb en tant qu’esclave. Les deux machines pourront se trouver sur le m^me réseau interne.

Elles sont supposées être configurées en adresses IP fixes:

  • serveur MySQL (mariadb) maître : 192.168.1.100
  • serveur MySQL (mariadb) esclave : 192.18.1.101

 

Ouvrir le fichier de configuration de mysql (mariadb) my.cnf avec l’éditeur VI (par exemple).

# vi /etc/my.cnf

Ajouter les lignes suivantes dans la section [mysqld] en remplacant ma_base  par le nom de la database que vous voulez répliquer sur l’exclave

server-id = 1
binlog-do-db=ma_base
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Redémarrer le service MySQL .

# systemctl restart mariadb

Logguez vous sur le serveur MySQL en tant que root et créez un utilisateur slave auquel il faudra octroyer (grant) les privilèges de réplication.

# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 472      | cfa		 |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> quit;

Retenez bien le nom du fichier (mysql-bin.000001) et sa position (472) , qui seront indispensables à l’initialisation du serveur Slave. Maintenant faites un dump de la base avec la commande mysqldump

#  mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

Télécharger le ficheir dump sur le serveur Slave (192.168.1.101) en utilisant par exemple la commande scp.

scp /root/dbdump.db root@192.168.1.101:/root/

La configuration du serveur  Master est terminée.

On passe à la confguration du serveur SLAVE

# vi /etc/my.cnf

Entrer les informations suivantes dans la section [mysqld] an adaptant l’ IP du serveur Master ,  le nom de la database etc.

server-id = 2
#master-host=192.168.1.100
#master-connect-retry=60
#master-user=slave_user
#master-password=yourpassword
replicate-do-db=ma_base
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Importer maintenant le dump de la base du serveur

# mysql -u root -p < /root/dbdump.db
# /etc/init.d/mysqld restart

Redémarrer le service:

Systemctl restart mariadb

Puis sur l’esclave, déclarer le master dans la base. Attention à bien reprendre le fichier et la position.

# mysql -u root -p
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=472;
mysql> slave start;
mysql> show slave status\G

Tester la replication en créant une table dans la base cfa du serveur:

create table test_replication(nom varchar(100));
insert into test_replication values('toto');
select * from test_replication;

Passer sur l'esclave et vérifier que la nouvelle table a bien été créée

TESTS DES DENIS DE SERVICE (DOS)

Se référer à l’article sur le sujet sur ce même site.

Leave a Comment