Installation simple de CentOS 7

Logo CentOSCette page décrit de manière succincte l’installation et la configuration d’un système CentOS 7. Nous optons ici pour une installation minimale dépourvue d’interface graphique et réduite au minimum syndical de services. Toutes les applications – comme par exemple le serveur web Apache, le serveur de fichiers Samba ou une panoplie d’outils en ligne de commande – devront être installées par la suite selon les besoins individuels.

L’installateur de CentOS 7 requiert au moins 1 Go de mémoire vive ainsi qu’un processeur capable de faire tourner un OS 64-bits. Pour travailler plus sereinement, on préférera une machine dotée d’au moins 2 Go de RAM.

Notons que c’est surtout l’installateur qui se montre relativement gourmand en ressources. Une fois que CentOS est installé sur le disque, le système consomme moins de 100 Mo de RAM au repos.

Support d’installation

On choisira le CD minimal, mais rien n’empêche d’utiliser le DVD.

  • CentOS-7-x86_64-Minimal-1611.iso
  • CentOS-7-x86_64-DVD-1611.iso

Graver le CD ou le DVD à partir de l’ISO téléchargé.

Sur les machines dépourvues de lecteur optique comme par exemple les serveurs HP de la gamme Proliant Microserver, il faudra confectionner une clé USB d’installation. L’image ISO est hybride et peut s’écrire directement sur une clé USB.

# dd if=CentOS-7-x86_64-Minimal-1611.iso of=/dev/sdX

Démarrage

Débrancher clés USB, disques externes et autres périphériques amovibles. Autrement l’installateur les proposera au formatage. Évidemment, cela ne vaut pas pour la clé USB d’installation.

L’option par défaut Test this media & install CentOS Linux 7 permet de tester l’intégrité du support d’installation, ce qui n’est pas une mauvaise idée. Si l’on souhaite passer cette étape, on optera directement pour Install CentOS Linux 7

Enfin, l’option Run a memory test accessible via l’entrée de menu Troubleshooting permet d’effectuer un test minutieux de la mémoire vive du serveur, ce qui est recommandé pour une nouvelle installation.

Pour l’instant, nous laissons de côté les options Rescue a CentOS Linux system et Boot from local drive.

Langue et clavier

Dans l’écran de bienvenue, sélectionner la langue (Français) et la localisation (Français – France). La disposition du clavier sera définie par le biais de l’écran principal de l’installateur.

Nom d’hôte et réseau

Le réseau n’est pas activé par défaut, il faut donc songer à l’activer explicitement en cliquant sur le bouton en forme d’interrupteur, ce qui fait passer sa valeur de 0 à 1.

Notons au passage que les noms des interfaces réseau ont changé avec cette nouvelle version. Désormais, on n’a plus affaire à eth0, eth1, eth2, wlan0, etc. Le nouveau schéma de nommage est moins arbitraire et offre davantage de consistance en se basant sur l’emplacement physique de la carte dans la machine.

  • enp2s0
  • enp3s0
  • enp3s1
  • etc.

Pour le nom d’hôte de votre machine, choisissez-en un à votre convenance et notez-le en minuscules, en remplacement de localhost.localdomain par défaut. Voici quelques exemples pour vous donner une idée.

  • centosbox
  • serveur-linux
  • alphamule
  • grossebertha
  • etc.

Date et heure

Vérifier si le fuseau horaire (Europe/Paris) est correctement configuré. Éventuellement, activer Heure du réseau et vérifier les serveurs NTP.

Disposition du clavier

Si l’on souhaite remplacer le clavier AZERTY par un autre clavier, il faut mettre Français (variante) en surbrillance, cliquer sur le bouton pour le supprimer et sélectionner le clavier souhaité dans la liste des agencements.

Désactivation de Kdump

Kdump est un mécanisme de capture lors du plantage d’un noyau. Il peut être désactivé.

Partitionnement

Pour une première installation, on choisira le partitionnement automatique.

  1. Cliquez sur Destination de l’installation.
  2. Vérifiez si le disque dur est bien sélectionné.
  3. Gardez l’option Configurer automatiquement le partitionnement.
  4. Éventuellement, cochez Je voudrais libérer de l’espace pour faire de la place.
  5. Cliquez sur Terminé.
  6. Dans l’écran subséquent, supprimez toutes les partitions existantes le cas échéant. Cliquez sur Tout supprimer, puis sur Récupérer de l’espace, ce qui vous fait revenir à l’écran principal. L’installateur se chargera de calculer automatiquement le schéma de partitionnement et choisira les systèmes de fichiers adaptés.

Sélection de logiciels

Dans l’écran de sélection des logiciels du DVD, on optera pour le groupe de paquets Installation minimale proposé par défaut. Le CD minimal ne laisse pas le choix de toute façon.

À partir de là, on peut Démarrer l’installation.

Paramètres utilisateur

L’écran suivant vous somme de choisir un mot de passe administrateur et vous propose de créer un premier utilisateur « commun mortel ».

Un système Linux fait, en gros, la distinction entre deux types d’utilisateurs.

  1. Les utilisateurs du « commun des mortels » ont accès à certaines zones du système, si l’on peut dire. À condition que leur compte soit configuré correctement – nous verrons cela plus loin – ils ont suffisamment de droits pour travailler correctement mais, en aucun cas, une mauvaise manipulation de leur part ne pourra porter atteinte à l’intégrité du système. On peut comparer ce cas de figure à une entreprise où chaque employé possède son propre casier, son propre bureau avec ses propres tiroirs qui ferment à clé. Il bénéficie de l’infrastructure de l’entreprise et partage une partie de son travail s’il le souhaite, mais personne – à l’exception de l’administrateur root – ne pourra fouiner dans ses affaires personnelles.
  2. L’administrateur root, quand à lui, possède tous les droits sur la machine. C’est le vigile avec l’énorme trousseau de clés qui donne accès aux moindres recoins du bâtiment. Comme il a tous les droits, on l’appelle aussi parfois super-utilisateur.

Bien choisir son mot de passe

Linux a une préférence marquée pour les mots de passe compliqués, le genre de chaîne de caractères que vous obtenez lorsque le chat marche sur le clavier. 123456, 654321 ou le nom dudit chat ne sont pas de bons mots de passe, à moins que vous n’ayez l’habitude d’appeler votre animal domestique GnLpF3th ou Wgh8sTr5FgH. Vous verrez d’ailleurs que l’installateur protestera si le mot de passe que vous choisissez lui paraît trop simple. Dans ce cas, vous devrez soit en choisir un autre plus compliqué, soit confirmer par deux fois.

Créer un utilisateur

L’écran de création de l’utilisateur initial vous pose une série de questions. Rien ne vous oblige de respecter l’ordre Nom-Prénom dans le premier champ, et vous pouvez très bien indiquer Nicolas Kovacs, Gaston Lagaffe ou Jean-Kevin Tartempion.

En fonction de votre saisie initiale, l’installateur vous fera une suggestion pour le nom d’utilisateur, mais vous n’êtes pas obligé de la suivre. Il existe une série de règles et de conventions sur les systèmes Linux en ce qui concerne les noms d’utilisateur.

  • Il est interdit d’utiliser les caractères spéciaux et les espaces.
  • Préférez les lettres minuscules. C’est une convention, et rien ne vous empêche d’utiliser les majuscules.
  • Un nom d’utilisateur est généralement composé de la première lettre (initiale) du prénom, suivie du nom de famille. Là aussi, c’est une recommandation, et vous n’êtes pas obligé de vous y tenir.

Si nous respectons ces règles, l’utilisateur Gaston Lagaffe utilisera donc le nom d’utilisateur glagaffe, Jacques Martin s’identifiera sur le système en tant que jmartin, et le login de Jean-Kevin Tartempion ressemblera à quelque chose comme jktartempion.

Rien ne nous oblige pourtant à être aussi strict dans la définition du nom d’utilisateur. Kiki Novak pourra préférer kikinovak à knovak, Jean-Kevin Tartempion favorisera warlordz ou nemesis, Gaston Lagaffe utilisera un simple gaston, et rien n’empêchera Jean-Philippe Smet de s’identifier en tant que johnny, plus incisif que jpsmet.

Cochez éventuellement la case Faire de cet utilisateur un administrateur, mais c’est facultatif. Nous verrons plus loin ce que cela signifie.

Enfin, choisissez un mot de passe pour cet utilisateur, en respectant les mêmes règles que celles énoncées un peu plus haut pour le mot de passe root.

Il ne vous reste plus qu’à Terminer la configuration et à Redémarrer la machine. N’oubliez pas de retirer le support d’installation.

Redémarrage initial

L’ordinateur redémarre et vous affiche tout d’abord l’écran du chargeur de démarrage GRUB (GRand Unified Bootloader). Le réglagle par défaut prévoit un temps d’attente de cinq secondes avant le lancement automatique du système. Appuyez sur Entrée pour écourter ce délai et démarrer directement.

L’initialisation du système minimal se fait assez rapidement. Au terme du démarrage, vous vous retrouvez confronté à un message qui ressemble à peu de choses près à ceci :

CentOS Linux 7 (Core)
Kernel 3.10.0-514.el7.x86_64 on an x86_64

centosbox login: _

À l’heure actuelle, nous disposons de deux comptes sur notre machine.

  1. l’administrateur root
  2. l’utilisateur commun mortel (kikinovak par exemple)

Connectez-vous en tant qu’utilisateur normal. Notez que le mot de passe ne s’affiche pas sur l’écran.

centosbox login: kikinovak
Password: ********
[kikinovak@centosbox ~]$ _

Si tout s’est bien passé, vous vous retrouvez face à l’invite de commande.

Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Présentation de CentOS

Distributions LinuxL’utilisateur novice de Linux se retrouve d’abord confronté à un choix qui peut s’avérer déroutant. Linux, oui, mais lequel ? Ubuntu ? Debian ? Red Hat ? Fedora ? SUSE ? En effet, il ne s’agit pas d’un seul « système Linux », mais de toute une ribambelle de « distributions ».

Le portail Distrowatch.com recense actuellement plusieurs centaines de distributions Linux activement maintenues. Cette liste s’allonge toutes les semaines, et c’est sans compter les milliers de projets privés ou autrement confidentiels dans le monde entier.

Qu’est-ce qu’une distribution Linux ?

InstallationDans le cas d’une des grandes distributions courantes comme Red Hat Enterprise Linux, Debian, Ubuntu, CentOS, Fedora ou SUSE, une distribution Linux est un ensemble cohérent, composé en règle générale…

  • du système de base
  • d’une série d’outils d’administration
  • d’une panoplie logicielle
  • d’un installateur

Red Hat Enterprise Linux

Logo Red HatLa société Red Hat a été fondée en 1993. C’est actuellement la marque la plus reconnue dans le monde de l’Open Source. Red Hat est le leader de Linux en entreprise.

Red Hat Enterprise Linux est une distribution commerciale de qualité entreprise. Nous verrons un peu plus loin ce que cela signifie concrètement. Le modèle économique de Red Hat, c’est la souscription. Autrement dit, le client paye pour avoir accès au support technique de Red Hat. En dehors de cela, Red Hat respecte scrupuleusement les règles du logiciel libre en publiant l’ensemble des codes source de ses systèmes.

CentOS

Logo CentOSCentOS (Community Enterprise Operating System) est un clone parfait de la distribution Red Hat Enterprise Linux. Ses développeurs ont utilisé les sources de Red Hat et les ont recompilées à leur propre sauce, en prenant soin d’enlever tous les logos et icônes spécifiques à Red Hat. Cette opération est tout à fait légale, car les sources de tous les composants des systèmes Red Hat sont placées sous licence libre. Notons que cette démarche est d’ailleurs non seulement tolérée, mais aussi encouragée par la société, étant donné que les rapports d’erreurs des utilisateurs de CentOS sont à leur tour utilisés par Red Hat. Notons également que depuis la sortie de CentOS 7, Red Hat a décidé de salarier l’équipe de dévelopeurs bénévoles de cette distribution.

CentOS est donc un système techniquement identique et binairement compatible à Red Hat Enterprise Linux. La seule différence réside dans le fait que Red Hat fournit un support technique payant pour ses clients. En dehors de cela, c’est une distribution de qualité entreprise, solide et éprouvée, et qui ne réserve pas de mauvaises surprises.

La qualité entreprise

Enterprise LinuxEn règle générale, vous pouvez utiliser votre système Linux de façon sûre tant que vous disposez de mises à jour. Une fois que la période de support de votre version a expiré, vous devez mettre à jour l’ensemble de la distribution vers une version plus récente.

Imaginons maintenant que votre entreprise héberge son site de e-commerce sur un serveur Linux. Une faille de sécurité importante vient d’être découverte sur un des composants, et l’administrateur décide de mettre à jour le serveur. Malheureusement, l’application de e-commerce ne semble plus compatible avec certains des nouveaux composants. Le site ne fonctionne plus correctement, et il faut songer à revoir d’urgence l’intégralité du code pour l’adapter à la nouvelle version. C’est le scénario catastrophe.

Et c’est là où les distributions de qualité entreprise entrent en jeu. Leur ambition est de fournir une plate-forme robuste, stable et pérenne pour faire tourner des applications sans causer de problèmes de compatibilité. Les deux principes de base d’une telle distribution sont donc :

  1. l’extension de la durée de support
  2. la mise à disposition de mises à jour peu risquées

En pratique, pendant une période d’au moins cinq ans, parfois même beaucoup plus, un tel système bénéficiera de mises à jour de sécurité sans que celles-ci introduisent de nouvelles fonctionnalités susceptibles de causer des mauvaises surprises.

Les « grandes » distributions commerciales affichent cette qualité entreprise dans leur nom même :

  • Red Hat Enterprise Linux
  • Red Hat Enterprise Workstation
  • SUSE Linux Enterprise Server
  • SUSE Linux Enterprise Desktop

Chacun de ces produits bénéficie en effet d’une période de support étendu comprise entre sept et dix ans. En comparaison, la durée du système communautaire Fedora est limitée à dix-huit mois, ce qui est bien trop court pour un usage en entreprise.

Tout comme Red Hat Enterprise Linux en amont, chaque version de CentOS bénéficie d’un cycle de support de dix ans pour chaque version.

  • CentOS 6 est maintenu jusqu’au 30 novembre 2020.
  • CentOS 7 est maintenu jusqu’au 30 juin 2024.
Publié dans Documentation Microlinux | Marqué avec , | Laisser un commentaire

Introduction à Linux

Logo LinuxLinux est un système d’exploitation libre dérivé d’Unix. L’ancêtre a été créé en 1969 et a fait tourner les ordinateurs de la terre entière bien avant que l’humanité n’associe des mots de tous les jours comme windows ou apple à de l’informatique. Son clone libre a été développé depuis 1983, et les premières versions ont vu le jour en 1991. Linux conserve la robustesse légendaire des systèmes Unix. Ce qui le différence de ces derniers, c’est qu’il peut être librement copié et redistribué.

Pourquoi utiliser Linux ?

Sur les serveurs, les avantages de Linux et des logiciels libres par rapport aux solutions propriétaires établies, sont significatifs.

  1. Stabilité. Un serveur Linux est robuste et stable. Vous obtenez un système réactif et rapide, qui permet de tourner en production sans vous soucier de plantages à répétition.
  2. Sécurité. Linux a été conçu dès le départ avec les concepts fondamentaux d’Unix, avec une séparation propre des processus, un système de permissions bien pensé et une couche réseau digne de ce nom. Un serveur Linux correctement configuré et maintenau met vos données à l’abri des attaques les plus communes qui sévissent sur Internet. L’adoption de technologies comme SELinux (Security Enhanced Linux) développé par la NSA vous permet d’avoir quelques longueurs d’avance sur des attaquants malveillants.
  3. Coût. Un serveur Linux est économique. Vous n’avez pas de frais de licence à payer, et le système est peu gourmand en ressources matérielles. Si vous adoptez un système comme CentOS, vous bénéficiez d’un OS de qualité entreprise, avec un cycle de support de dix ans pour les mises à jour de sécurité pour chaque version, et entièrement gratuit.

Qui utilise Linux ?

Au cours des vingt dernières années, Linux s’est répandu partout dans le monde, sans faire de bruit, sans campagnes publicitaires, et sans qu’une multinationale ne vienne « encourager » le déploiement à coups de lobbying et autres méthodes douteuses. Voici quelques exemples.

  1. L’infrastructure de l’Internet est assurée en grande partie par Linux. Les gigantesques parcs de serveurs des grandes entreprises comme Google, Facebook ou Amazon fonctionnent tous sous Linux.
  2. La totalité des 500 superordinateurs les plus puissants de la terre – comme par exemple ceux des grands centres de recherche scientifique de la NASA ou du CERN – tournent sous Linux. La majorité de ces machines tournent sous CentOS.
  3. Les systèmes Linux embarqués sont omniprésents dans notre quotidien et font tourner à peu près tout, du modem-routeur ADSL au téléviseur, du distributeur de billets de trains au système de navigation GPS, du téléphone portable au distributeur de boissons, etc.
  4. En France, la Gendarmerie Nationale a migré la majorité de son parc de 90.000 postes de travail de Microsoft Windows vers Linux.

Cette liste est loin d’être exhaustive.

Qu’est-ce qu’un logiciel libre ?

Le terme anglais free software comporte une ambiguïté, et il s’agit de distinguer…

  • free as in free speech : libre dans le sens de « liberté de la parole »
  • free as in free beer : gratuit dans le sens de « bière à gogo »

Selon la défintion proposée par Richard Stallman et la Free Software Foundation, un logiciel est libre s’il respecte les quatre conditions fondamentales.

  1. la liberté d’utiliser le logiciel
  2. la liberté de le copier
  3. la liberté d’en étudier le fonctionnement
  4. la liberté de le modifier et de redistribuer cette version modifiée

Une seule obligation permet de préserver ces quatre libertés. Toute personne qui souhaite apporter des modifications au code source d’un logiciel – en vue de l’améliorer ou d’en modifier le comportement – est tenue de publier ces modifications sous les mêmes conditions, en respectant à son tour les quatre libertés fondamentales. C’est l’application du principe du copyleft (un jeu de mots sur copyright, droits d’auteur) qui évite notamment l’appropriation du code source libre par une entreprise. Ce principe est entériné dans la licence publique GNU (ou licence GPL) que Richard Stallman publie en 1989.

Publié dans Documentation Microlinux | Marqué avec | Laisser un commentaire

Synchroniser un réseau local avec NTP sous CentOS 7

NTPLorsque plusieurs personnes manipulent des données partagées sur des postes clients différents, il est essentiel que ces postes soient tous à la même heure. Malheureusement, l’horloge intégrée dans les machines n’est pas suffisamment exacte.

Le protocole NTP (Network Time Protocol) permet aux machines d’un réseau de mettre leurs pendules à l’heure. Il permet la synchronisation des machines entre elles. Les serveurs de temps public sur Internet permettent de recevoir le temps exact. À partir de là, on a plusieurs possibilités d’utiliser NTP.

  • La commande ntpdate procède à un ajustement ponctuel de l’horloge du BIOS.
  • L’ajustement ponctuel ne suffit pas pour un serveur qui est censé tourner sans discontinuer. L’horloge du serveur risque de dévier de plus en plus de l’heure exacte. Dans ce cas, il faudra configurer le démon ntpd contenu dans le paquet ntp, qui se charge de contacter les serveurs de temps publics à intervalles réguliers pour procéder ensuite à une série de corrections de l’heure locale.
  • Le démon ntpd peut à son tour être configuré comme serveur de temps pour les machines locales.
  • Dans la pratique quotidienne, on utilisera ntpdate pour l’ajustement initiale de l’heure locale, et ntpd pour la synchronisation régulière.

Prérequis

Le démon ntpd utilise le port 123 en UDP. Il faut donc ouvrir ce port sur le serveur pour permettre aux postes clients de se connecter.

Installation

Voici les paquets relatifs à NTP :

# rpm -qa | grep ntp
ntp-4.2.6p5-19.el7.centos.x86_64
ntpdate-4.2.6p5-19.el7.centos.x86_64

Si ce n’est pas déjà fait, supprimer le serveur Chrony installé par défaut pour éviter les conflits.

# systemctl stop chronyd
# yum remove chrony

Basculer SELinux en mode permissif.

# setenforce 0

Synchronisation avec un serveur NTP public

Éventuellement, aller sur http://www.pool.ntp.org et choisir la liste des serveurs en fonction du pays.

Sauvegarder le fichier de configuration existant :

# cd /etc
# mv ntp.conf ntp.conf.orig

Configurer le service :

# /etc/ntp.conf

driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log

server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

server 127.127.1.0
fudge 127.127.1.0 stratum 10

restrict default nomodify nopeer notrap
restrict 127.0.0.1 mask 255.0.0.0

Le fichier journal /var/log/ntp.log sera créé à la volée au démarrage du service. Ce n’est donc pas la peine de le créer manuellement.

La directive fudge 127.127.1.10 stratum 10 constitue un serveur « bidon » en guise d’IP fallback, au cas où la source de temps extérieure deviendrait momentanément indisponible. En cas d’indisponibilité du serveur distant, NTP continuera à tourner en se basant sur ce fonctionnement-là.

NTP offre une panoplie de règles pour contrôler l’accès au service, que l’on pourra utiliser en-dehors des règles de pare-feu. Ici, les directives restrict signifient qu’on empêche les machines distantes de modifier la configuration du serveur (première ligne) et qu’on fait confiance à la machine elle-même (deuxième ligne). La directive restrict sans option derrière, mais suivie du seul nom d’hôte, équivaut à un allow all.

Gestion et utilisation

Éventuellement, effectuer l’ajustement initial de l’horloge :

# ntpdate fr.pool.ntp.org
17 Feb 07:04:05 ntpdate[1943]: adjust time server 212.83.131.33 
  offset 0.010439 sec

La commande ntpdate est normalement considérée comme obsolète, mais elle sert toujours à effectuer des corrections importantes. Théoriquement, c’est la commande ntpd -g qui est censée remplacer ntpdate, mais son utilisation s’avère problématique sur des systèmes déréglés de plus d’une heure.

Activer le service :

# systemctl enable ntpd

Gérer le service :

# systemctl start|stop|restart|status ntpd

Afficher la liste des serveurs auxquels on est connecté :

# ntpq -p
   remote     refid     st t when poll reach delay offset jitter
=================================================================
+tidore.ordimati 91.121.122.16  3 u 36 64 1  31.353 -2.014 0.000
+176.31.53.204   193.190.230.65 2 u 35 64 1 114.250 36.854 0.000
*ntp-2.arkena.ne 193.190.230.65 2 u 34 64 1  30.266 -2.454 0.000
 fr3.tomhek.net  195.154.216.35 3 u 33 64 1  34.424 -3.169 0.000
 LOCAL(0)        .LOCL.        10 l  - 64 0   0.000  0.000 0.000
  1. Le petit astérisque * en début de ligne signifie que la machine est correctement synchronisée avec le serveur distant. La première synchronisation peut nécessiter quelques minutes, parfois même une demi-heure.
  2. Pour guetter la première synchronisation, on peut invoquer watch ntpq -p.

NTP et SELinux

Rien de particulier à signaler avec notre configuration.

# sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Rebasculer en mode strict.

# setenforce 1
Publié dans CentOS, Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Tester les performances de son réseau avec Iperf

IperfIperf fait partie des outils indispensables pour tout administrateur réseau qui se respecte. C’est un outil de mesure de performance réseau qui se présente sous la forme d’une ligne de commande à exécuter sur deux machines disposées aux extrémités du réseau à tester.

Iperf fonctionne comme un client-serveur. La première machine lance Iperf en « mode serveur », la seconde en « mode client ». Par défaut le test réseau se fait en utilisant le protocole TCP.

Prérequis

Iperf utilise le port 5001 en TCP. Il faut donc songer à ouvrir ce port sur la machine qui sert de « serveur ».

Installation

Pour CentOS et RHEL, Iperf est fourni par le dépôt EPEL :

# yum install iperf

Utilisation basique

Sur une des deux machines de test, nous allons lancer le serveur grâce à la commande suivante :

# iperf -s 
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Sur l’autre machine, il ne reste plus qu’à lancer le client en précisant l’adresse du serveur :

# iperf -c nestor
------------------------------------------------------------
Client connecting to nestor, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.2 port 38947 connected with 192.168.2.1 
      port 5001

Le rapport s’affiche au bout de dix secondes de test :

[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   934 Mbits/sec

Utilisation avancée

Pour afficher des rapports intermédiaires, il suffit de le spécifier sur le client et/ou le serveur. Côté serveur :

# iperf -s -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.2.1 port 5001 connected with 192.168.2.2 
      port 38953
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 1.0 sec   111 MBytes   932 Mbits/sec
[  4]  1.0- 2.0 sec   111 MBytes   934 Mbits/sec
[  4]  2.0- 3.0 sec   111 MBytes   934 Mbits/sec
[  4]  3.0- 4.0 sec   111 MBytes   934 Mbits/sec
[  4]  4.0- 5.0 sec   111 MBytes   934 Mbits/sec
[  4]  5.0- 6.0 sec   111 MBytes   934 Mbits/sec
[  4]  6.0- 7.0 sec   111 MBytes   934 Mbits/sec
[  4]  7.0- 8.0 sec   111 MBytes   934 Mbits/sec
[  4]  8.0- 9.0 sec   111 MBytes   934 Mbits/sec
[  4]  9.0-10.0 sec   111 MBytes   934 Mbits/sec
[  4]  0.0-10.0 sec  1.09 GBytes   933 Mbits/sec

Côté client :

# iperf -c nestor -i 1
------------------------------------------------------------
Client connecting to nestor, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.2 port 38953 connected with 192.168.2.1 
      port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec   112 MBytes   935 Mbits/sec
[  3]  1.0- 2.0 sec   112 MBytes   935 Mbits/sec
[  3]  2.0- 3.0 sec   111 MBytes   933 Mbits/sec
[  3]  3.0- 4.0 sec   112 MBytes   935 Mbits/sec
[  3]  4.0- 5.0 sec   111 MBytes   933 Mbits/sec
[  3]  5.0- 6.0 sec   112 MBytes   935 Mbits/sec
[  3]  6.0- 7.0 sec   111 MBytes   933 Mbits/sec
[  3]  7.0- 8.0 sec   111 MBytes   934 Mbits/sec
[  3]  8.0- 9.0 sec   111 MBytes   934 Mbits/sec
[  3]  9.0-10.0 sec   111 MBytes   933 Mbits/sec
[  3]  0.0-10.0 sec  1.09 GBytes   934 Mbits/sec

Une autre option permet de fixer au niveau du client la durée totale du test en
secondes :

# iperf -c nestor -t 60 -i 10
------------------------------------------------------------
Client connecting to nestor, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local 192.168.2.2 port 38963 connected with 192.168.2.1 
      port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   934 Mbits/sec
[  3] 10.0-20.0 sec  1.09 GBytes   934 Mbits/sec
[  3] 20.0-30.0 sec  1.09 GBytes   934 Mbits/sec
[  3] 30.0-40.0 sec  1.09 GBytes   934 Mbits/sec
[  3] 40.0-50.0 sec  1.09 GBytes   934 Mbits/sec
[  3] 50.0-60.0 sec  1.09 GBytes   934 Mbits/sec
[  3]  0.0-60.0 sec  6.53 GBytes   934 Mbits/sec
Publié dans CentOS, Documentation Microlinux | Marqué avec , | Un commentaire

Synchroniser un client CentOS 7 avec un serveur NTP

NTPCette page décrit la synchronisation NTP d’une station de travail tournant sous CentOS 7 avec un serveur NTP. Au lieu de synchroniser chaque poste avec un serveur NTP sur Internet, on va procéder de façon plus économique et préférer la synchronisation avec le serveur local.

Vérifier si les paquets correspondant au service sont bien installés :

# rpm -qa | grep ntp
ntp-4.2.6p5-19.el7.centos.x86_64
ntpdate-4.2.6p5-19.el7.centos.x86_64

Effectuer l’ajustement initial. Le service doit être arrêté :

# systemctl status ntpd
ntpd.service - Network Time Service
 Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled)
 Active: inactive (dead)
# ntpdate pool.ntp.org
 6 Mar 07:48:59 ntpdate[1659]: step time server 195.154.108.164 
 offset 1.215424 sec

Sauvegarder le fichier de configuration par défaut :

# cd /etc
# mv ntp.conf ntp.conf.orig

Configurer le service. Dans l’exemple, le serveur NTP est la machine 192.168.2.1 du réseau local :

# /etc/ntp.conf

driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log

server 192.168.2.1 

server 127.127.1.0 
fudge 127.127.1.0 stratum 10 

restrict default ignore 
restrict 127.0.0.1 mask 255.0.0.0 
restrict 192.168.2.1 mask 255.255.255.255

Les directives restrict signifient ici qu’on bloque tout le trafic NTP, excepté pour la machine elle-même et le serveur.

Activer le service :

# systemctl enable ntpd

Gérer le service :

# systemctl start|stop|restart|status ntpd

Vérifier si l’on est bien synchronisé avec le serveur local :

# ntpq -p
    remote      refid      st t when poll reach delay offset jitter
===================================================================
*nestor.microlin 91.121.165.146 3 u   61   64 1 0.601 -6.553  0.000
 LOCAL(0) .LOCL.               10 l    -   64 0 0.000  0.000  0.000

Il faudra éventuellement attendre quelques minutes avant la première synchronisation.

Publié dans CentOS, Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Configurer l’authentification par clé SSH

Connexion par clé SSHCet article décrit la mise en place d’une connexion SSH sans mot de passe, à l’aide d’une paire de clés. Si l’on se connecte quotidiennement à une machine distante, la connexion SSH sans mot de passe évite d’avoir à saisir le mot de passe à chaque fois. Dans l’exemple ci-dessous, l’utilisateur kikinovak souhaite se connecter depuis la machine buildbox.microlinux.lan à la machine nestor.microlinux.lan sans avoir à saisir son mot de passe à chaque connexion.

Générer la paire de clés

Sur la machine buildbox.microlinux.lan, créer une clé d’identification SSH. Accepter l’emplacement par défaut pour la sauvegarde de la clé en appuyant sur [Entrée]. De même, laisser la zone du mot de passe vide en appuyant deux fois de suite sur [Entrée] :

[kikinovak@buildbox:~] $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kikinovak/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kikinovak/.ssh/id_rsa.
Your public key has been saved in /home/kikinovak/.ssh/id_rsa.pub.

On vient de créer une clé privée ~/.ssh/id_rsa et une clé publique ~/.ssh/id_rsa.pub :

[kikinovak@buildbox:~] $ tree -a .ssh/
.ssh/
|-- id_rsa
|-- id_rsa.pub
`-- known_hosts

Transférer la clé publique

Maintenant, il faut transférer la clé publique (et non PAS la clé privée) sur la machine distante, en l’occurrence nestor.microlinux.lan :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub kikinovak@nestor
The authenticity of host 'nestor (192.168.2.1)' 
can't be established.
ECDSA key fingerprint is 
08:16:b0:b0:81:c3:73:96:99:ea:8c:b6:e7:38:b7:d3.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the 
new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- 
if you are prompted now it is to install the new keys
kikinovak@nestor's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'kikinovak@nestor'"
and check to make sure that only the key(s) you wanted were added.

Contrôler les clés installées

À présent, on peut se connecter à la machine distante :

[kikinovak@buildbox:~] $ ssh kikinovak@nestor
Linux 3.10.17.

Il ne reste plus qu’à contrôler le fichier ~/.ssh/authorized_keys pour vérifier qu’on n’a pas ajouté des clés supplémentaires indésirables :

[kikinovak@nestor:~] $ cat ~/.ssh/authorized_keys
AAAAB3NzaC1yc2EAAAADAQABAAABAQC2QQSfCGvvt7T9Fx/iSUIe1c/7c6wfQ0sdpF
t6tmhvPWRgwjfxhB4XZLZnEduUAfEcxgjsZ/fw4kIYWKlcndnOdeiUxCz1ebSg1+4H
KBMBLtWEjg1koKZEoX6hnB6Lg6qxoF9aye3bft7hMiY2v66MdsjLOHnom0g2s2l0op
8Q4o6QBJOn3L4VgeEZbPYw8fs/IXmSscoCGkUmMlmUo0Mka/Gv96ccSAsSywANaKlD
2n0X2dRyWHhTMHc7J047xyCxa0c6A1NeoX6sn8oI3pECIJEoZ4ml1OQfj3VPGFCNoL
+WciQRf kikinovak@buildbox.microlinux.lan

Se connecter sans mot de passe

Dorénavant, la connexion SSH ne requiert pas la saisie du mot de passe :

[kikinovak@buildbox:~] $ ssh nestor
Last login: Wed Dec  9 08:15:32 2015 from buildbox.microlinux.lan
Linux 3.10.17.
[kikinovak@nestor:~] $ 
Publié dans Documentation Microlinux | Marqué avec | Laisser un commentaire

Serveur de sauvegardes avec Rsnapshot sous CentOS

SauvegardeCet article décrit la mise en place d’un serveur de sauvegardes incrémentales avec Rsnapshot sous CentOS. Rsnapshot est une solution de sauvegarde robuste et efficace écrite en PERL et basée sur Rsync. En combinaison avec SSH, Rsnapshot permet d’effectuer des sauvegardes à distance. Une fois que la première synchronisation des données est effectuée, les sauvegardes se font de manière incrémentale moyennant une série de liens durs (hard links), ce qui évite la duplication inutile.

Rsnapshot tourne sur le serveur de sauvegardes. Les machines dont il faut sauvegarder les données sont totalement passives, il faut juste qu’elles aient un serveur SSH activé.

Prérequis

Le serveur de sauvegardes doit pouvoir se connecter via SSH aux machines distantes. Il faut donc configurer l’authentification par clé SSH au préalable.

Installation

Rsnapshot est fourni par le dépôt EPEL, qu’il faudra donc activer en conséquence.

# yum install rsnapshot

Configuration sur un serveur dédié

Rsnapshot se configure par le biais du fichier /etc/rsnapshot.conf. Le fichier fourni par défaut est amplement commenté et pourra servir de point de départ. La page de manuel rsnapshot(1) fournit la référence complète. Au lieu d’éditer le fichier /etc/rsnapshot.conf, nous allons le renommer et repartir de zéro.

# cd /etc
# mv rsnapshot.conf rsnapshot.conf.orig

Éditer une configuration personnalisée comme ceci, par exemple.

# /etc/rsnapshot.conf

# Version
config_version  1.2

# Emplacement des sauvegardes
snapshot_root   /srv/backup

# Programmes externes
cmd_cp              /usr/bin/cp
cmd_rm              /usr/bin/rm
cmd_rsync           /usr/bin/rsync
cmd_ssh             /usr/bin/ssh
cmd_logger          /usr/bin/logger
cmd_du              /usr/bin/du
cmd_rsnapshot_diff  /usr/bin/rsnapshot-diff

# Fréquence des sauvegardes
retain  hourly  6
retain  daily   7
retain  weekly  4
retain  monthly 3

# Affichage des infos
verbose 2

# Logs
loglevel        3
logfile /var/log/rsnapshot

# Fichier de verrouillage
lockfile        /var/run/rsnapshot.pid

# Fichiers à ne pas sauvegarder
exclude_file    /etc/rsnapshot_exclude.list

# sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/etc            sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/home           sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/var/named      sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/var/www/vhosts sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/usr/local/sbin sd-48975.dedibox.fr
backup  root@sd-48975.dedibox.fr:/sqldump        sd-48975.dedibox.fr

Quelques remarques.

  • Il faut impérativement utiliser les tabulations comme séparateurs. Si l’on utilise l’éditeur Vim, l’option :set list permettra d’afficher les tabulations dans le fichier. Si l’on a activé l’option :set expandtab qui remplace les tabulations par une série d’espaces, il faut également la désactiver grâce à :set noexpandtab.
  • L’emplacement des sauvegardes spécifié par la directive snapshot_root sera créé au besoin par Rsnapshot.
  • Les commandes correspondent à un système CentOS 7, et plus généralement à la plupart des distributions Linux.
  • La directive retain hourly 6 correspond à une sauvegarde complète toutes les quatre heures.
  • Le fichier spécifié dans la directive exclude_file contiendra éventuellement les types de fichiers et de répertoires sur lesquels on pourra faire l’impasse.
  • Dans l’exemple ci-dessus, on spécifie les arborescences de données à sauvegarder, plutôt que de choisir l’ensemble du système à la louche pour ensuite exclure les parties du système que l’on ne veut pas sauvegarder.
  • Les bases de données sont récupérées par le biais d’un script sqldump.sh installé sur la machine distante, qui range les sauvegardes SQL soigneusement ficelées dans un répertoire /sqldump. Voir la fin de l’article sur MySQL/MariaDB pour plus de détails.

Tester la configuration

Une fois qu’on a édité la configuration, on peut vérifier si l’on n’a pas fait d’erreurs de syntaxe.

# rsnapshot configtest
Syntax OK

L’option -t permet ensuite de simuler une sauvegarde. Dans ce cas, Rsnapshot nous affiche toutes les opérations qu’il effectuerait, sans réellement les exécuter.

# rsnapshot -t hourly

Synchronisation initiale

Si le serveur distant contient quelques centaines de gigaoctets de données, la première synchronisation peut être assez longue. La bonne politique consiste à effectuer cette première opération à la main, comme ceci.

# rsnapshot hourly

Dans une deuxième console, on peut se faire une idée de la progression du transfert.

# watch du -sh /srv/backup

Au bout de l’opération, on pourra vérifier si tout s’est bien déroulé.

# less /var/log/rsnapshot

[2016-12-22T18:18:11] /usr/bin/rsnapshot hourly: started
[2016-12-22T18:18:11] echo 8430 > /var/run/rsnapshot.pid
[2016-12-22T18:18:11] mkdir -m 0700 -p /srv/backup/
[2016-12-22T18:18:11] mkdir -m 0755 -p /srv/backup/hourly.0/
[2016-12-22T18:18:11] /usr/bin/rsync -a --delete ...
                        ...
[2016-12-22T18:42:49] touch /srv/backup/hourly.0/
[2016-12-22T18:42:50] rm -f /var/run/rsnapshot.pid
[2016-12-22T18:42:50] /usr/bin/rsnapshot hourly: completed

Définition des tâches automatiques

Une fois que la synchronisation initiale s’est correctement déroulée, on peut songer à mettre en place une série de tâches automatiques.

# crontab -l
...
# Rsnapshot
0  */4 * * *  /usr/bin/rsnapshot hourly
45 3   * * *  /usr/bin/rsnapshot daily
30 3   * * 1  /usr/bin/rsnapshot weekly
15 3   1 * *  /usr/bin/rsnapshot monthly

Utilisation au quotidien

Au bout de quinze jours, voilà à quoi ressemble le répertoire des sauvegardes.

# ls -l /srv/backup/
total 60
drwxr-xr-x 3 root root 4096 janv. 20 04:00 daily.0
drwxr-xr-x 3 root root 4096 janv. 19 04:00 daily.1
drwxr-xr-x 3 root root 4096 janv. 18 04:00 daily.2
drwxr-xr-x 3 root root 4096 janv. 17 04:00 daily.3
drwxr-xr-x 3 root root 4096 janv. 16 04:00 daily.4
drwxr-xr-x 3 root root 4096 janv. 15 04:00 daily.5
drwxr-xr-x 3 root root 4096 janv. 14 04:00 daily.6
drwxr-xr-x 3 root root 4096 janv. 21 08:00 hourly.0
drwxr-xr-x 3 root root 4096 janv. 21 04:00 hourly.1
drwxr-xr-x 3 root root 4096 janv. 21 00:00 hourly.2
drwxr-xr-x 3 root root 4096 janv. 20 20:01 hourly.3
drwxr-xr-x 3 root root 4096 janv. 20 16:01 hourly.4
drwxr-xr-x 3 root root 4096 janv. 20 12:01 hourly.5
drwxr-xr-x 3 root root 4096 janv.  8 04:00 weekly.0
drwxr-xr-x 3 root root 4096 janv.  1 04:00 weekly.1

L’option du permet d’afficher un rapport détaillé sur l’espace disque occupé par les sauvegardes.

# rsnapshot du
23G	/srv/backup/hourly.0/
76M	/srv/backup/hourly.1/
298M	/srv/backup/hourly.2/
76M	/srv/backup/hourly.3/
412M	/srv/backup/hourly.4/
553M	/srv/backup/hourly.5/
838M	/srv/backup/daily.0/
964M	/srv/backup/daily.1/
991M	/srv/backup/daily.2/
833M	/srv/backup/daily.3/
829M	/srv/backup/daily.4/
815M	/srv/backup/daily.5/
761M	/srv/backup/daily.6/
50G	/srv/backup/weekly.0/
1,2G	/srv/backup/weekly.1/
82G	total

Configuration pour un réseau local

Dans mon réseau local, la configuration de Rsnapshot est quelque peu différente. J’effectue une seule sauvegarde par jour, et je conserve les données pendant une semaine.

# Fréquence des sauvegardes
retain  daily   7

Voici la définition des sauvegardes distantes.

# alphamule.microlinux.lan
backup  root@alphamule:/etc      alphamule
backup  root@alphamule:/home     alphamule
backup  root@alphamule:/root/sql alphamule

# balthazar.microlinux.lan
backup  root@balthazar:/etc      balthazar
backup  root@balthazar:/home     balthazar

La sauvegarde quotidienne doit être lancée à 13h00.

# crontab -l
# Rsnapshot
00 13 * * * /usr/bin/rsnapshot daily

Téléchargement

Des modèles de fichiers de configuration pour Rsnapshot sont disponibles dans mon dépôt Github, dans le répertoire centos/el7/rsnapshot.

$ git clone https://github.com/kikinovak/centos
Publié dans CentOS, Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Serveur web Apache sous CentOS

ApacheApache est le principal serveur Web du monde de l’Open Source. D’après les statistiques de Netcraft, plus de la moitié des sites Web du monde tournent sur un serveur Apache.

Une installation typique d’Apache est généralement constituée d’un assemblage cohérent de paquets.

  • le serveur Apache à proprement parler
  • des bibliothèques diverses et variées
  • des plug-ins
  • des langages de programmation
  • etc.

Cette page décrit la configuration d’un serveur Web de type LAMP (Linux + Apache + MySQL/MariaDB + PHP) sur CentOS 7.

Prérequis

Apache utilise le port 80 en TCP pour le protocole HTTP. Il faudra donc songer à ouvrir ce port dans le pare-feu.

Installation

Le serveur Apache est fourni par le paquet httpd.

# yum install httpd

Passer SELinux en mode permissif.

# setenforce 0

Activer et lancer Apache.

# systemctl enable httpd
# systemctl start httpd

Tester le bon fonctionnement du serveur.

# links http://localhost

On doit voir quelque chose de ce genre.

=================================================================
                           Testing 123..
This page is used to test the proper operation of the Apache HTTP
server after it has been installed. If you can read this page it 
means that this site is working properly. This server is powered 
by CentOS.
=================================================================

Dans le réseau local, ouvrir l’adresse IP du serveur avec un navigateur.

  • http://192.168.2.5

On peut également invoquer le nom d’hôte.

  • http://amandine.microlinux.lan

Sur un serveur dédié, on essaiera successivement l’adresse IP, le nom de domaine et l’alias associé.

  • http://163.172.220.174
  • http://slackbox.fr
  • http://www.slackbox.fr

Voici à quoi ressemble la page par défaut dans un navigateur graphique.

Apache Test

Configuration de base

Le principal fichier de configuration d’Apache, c’est /etc/httpd/conf/httpd.conf. Avant de modifier quoi que ce soit, on va faire une copie du fichier de configuration par défaut.

# cd /etc/httpd/conf
# cp httpd.conf httpd.conf.orig

On peut déjà renseigner quelques directives.

# /etc/httpd/conf/httpd.conf
...
ServerAdmin info@microlinux.fr
...
ServerName  amandine.microlinux.lan
...
  • L’adresse mail de l’administrateur apparaîtra sur certaines pages générées par le serveur, notamment les pages d’erreur.
  • Le nom du serveur peut être déterminé automatiquement, mais il vaut mieux le spécifier explicitement.

Sur un serveur dédié, on aura ceci.

# /etc/httpd/httpd.conf
...
ServerName sd-100246.dedibox.fr
...

Prendre en compte les modifications.

# systemctl reload httpd

Organisation des fichiers de configuration

Le fichier /etc/httpd/conf/httpd.conf ne contient pas l’intégralité de la configuration d’Apache. Jetons un oeil à la dernière ligne de ce fichier.

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

En langage tam-tam, cela signifie qu’il faut également tenir compte de tous les fichiers *.conf contenus dans le répertoire /etc/httpd/conf.d.

# cd /etc/httpd/conf.d/
# ls *.conf
autoindex.conf userdir.conf welcome.conf

Héberger un site statique

Apache est immédiatement utilisable dans sa configuration par défaut. Le serveur affiche le contenu du répertoire /var/www/html, défini par la directive DocumentRoot dans le fichier /etc/httpd/conf/httpd.conf.

DocumentRoot "/var/www/html"

Ce répertoire est vide par défaut. En l’absence de contenu, c’est la page de test qui s’affiche, en fonction de la configuration prédéfinie dans /etc/httpd/conf.d/welcome.conf.

Pour nous épargner la corvée de créer du contenu bidon, nous pouvons très bien récupérer un site web existant. On choisira la documentation de Slackware, qui vient sous forme d’une série de pages HTML statiques.

# cd /var/www/html/
# wget -r -np -nH --cut-dirs=1 http://www.slackbook.org/html/

Ouvrir le site dans un navigateur (Firefox, Links, Lynx) et apprécier le résultat.

Apache et les permissions des fichiers

Apache n’est pas censé tourner en tant que root, mais en tant qu’utilisateur spécial défini par les directives User et Group dans /etc/httpd/conf/httpd.conf.

User apache
Group apache

Une règle de sécurité générale, c’est que les contenus du serveur web ne doivent pas appartenir au processus qui fait tourner le serveur.Ici, nous attribuons les contenus à l’utilisateur non privilégié microlinux et au groupe associé microlinux. En passant, nous en profitons pour restreindre les droits d’accès du groupe.

# cd /var/www/html
# chown -R microlinux:microlinux *
# find . -type d -exec chmod 0755 \{} \;
# find . -type f -exec chmod 0644 \{} \;

Apache et SELinux

Jetons un premier coup d’oeil sur ce que pense SELinux de notre configuration.

# sealert -a /var/log/audit/audit.log 
100% done
found 0 alerts in /var/log/audit/audit.log

On notera que le site web statique récupéré avec wget a été créé d’emblée avec le contexte de sécurité approprié httpd_sys_content_t. Tout va donc très bien jusqu’ici.

Héberger plusieurs sites sur un serveur local

Le principe des hôtes virtuels (Virtual Hosts) consiste à faire fonctionner un ou plusieurs sites Web sur une même machine. L’utilisateur final ne perçoit pas qu’en fait il s’agit d’un même serveur physique.

Sur un serveur local, on pourra essayer d’héberger trois sites.

  • http://slackware.amandine hébergera la documentation de Slackware.
  • http://freebsd.amandine affichera la documentation de FreeBSD.
  • http://amandine pointera vers la page par défaut du serveur.

Pour commencer, on va déplacer le site existant dans un nouveau répertoire slackware/html.

# cd /var/www/html
# mkdir -pv ../slackware/html
mkdir: création du répertoire « ../slackware »
mkdir: création du répertoire « ../slackware/html »
# mv * ../slackware/html/
# mv ../slackware/ .

Puis, on va créer un autre répertoire freebsd/html, dans lequel on va télécharger un autre site, en l’occurrence la documentation de FreeBSD.

# mkdir -pv freebsd/html
mkdir: création du répertoire « freebsd »
mkdir: création du répertoire « freebsd/html »
# cd freebsd/html
# wget -r -p -np -nH --cut-dirs=4 \
  http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/

Enfin, on va mettre en place une page par défaut dans le répertoire default/html. Pour ce faire, on va utiliser la page qui s’affiche lorsqu’il n’y a pas de contenu.

# cd /var/www/html/
# mkdir -pv default/html
mkdir: création du répertoire « default »
mkdir: création du répertoire « default/html »
# cp -R /usr/share/httpd/noindex/* default/html/

Au total, on a donc…

# ls -l
total 12
drwxr-xr-x 3 root root 4096 23 févr. 06:36 default
drwxr-xr-x 3 root root 4096 23 févr. 06:21 freebsd
drwxr-xr-x 3 root root 4096 23 févr. 06:19 slackware

On va définir les permissions à la louche.

# chown -R microlinux:microlinux *
# find . -type d -exec chmod 0755 \{} \;
# find . -type f -exec chmod 0644 \{} \;

Créer un fichier /etc/httpd/conf.d/default.conf. Ce fichier définira le site affiché par défaut, c’est-à-dire lorsqu’on invoque l’adresse IP ou le nom d’hôte de la machine.

# /etc/httpd/conf.d/default.conf
#
# Page par défaut
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/default/html"
  ServerName amandine.microlinux.lan
  ServerAlias amandine
  ErrorLog logs/default-error_log
  CustomLog logs/default-access_log common
</VirtualHost>

Une remarque en passant. Nous aurions pu très bien ajouter cette stance dans le fichier /etc/httpd/conf/httpd.conf. La création de fichiers *.conf individuels dans /etc/httpd/conf.d est motivée avant tout par un souci de clarté et de lisibilité.

Prendre en compte les modifications.

# systemctl reload httpd

Vérifier si la page par défaut du serveur s’affiche comme prévu.

 # links http://amandine.microlinux.lan

À présent, nous pouvons ajouter les deux autres sites. Le site http://slackware.amandine sera configuré comme ceci.

# /etc/httpd/conf.d/slackware.conf
#
# http://slackware.amandine.microlinux.lan
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/slackware/html"
  ServerName slackware.amandine.microlinux.lan
  ServerAlias slackware.amandine
  ErrorLog logs/slackware-error_log
  CustomLog logs/slackware-access_log common
</VirtualHost>

La configuration de http://freebsd.amandine suivra la même logique.

# /etc/httpd/conf.d/freebsd.conf
#
# http://freebsd.amandine.microlinux.lan
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/freebsd/html"
  ServerName freebsd.amandine.microlinux.lan
  ServerAlias freebsd.amandine
  ErrorLog logs/freebsd-error_log
  CustomLog logs/freebsd-access_log common
</VirtualHost>

Pour l’instant, les noms d’hôtes slackware.amandine et freebsd.amandine ne correspondent à rien dans notre réseau local. Nous devons les ajouter à /etc/hosts sur le serveur.

# Amandine
192.168.2.5 amandine.microlinux.lan amandine
192.168.2.5 freebsd.amandine.microlinux.lan freebsd.amandine
192.168.2.5 slackware.amandine.microlinux.lan slackware.amandine

Redémarrer Dnsmasq pour propager l’info DNS.

# systemctl restart dnsmasq

Prendre en compte la nouvelle configuration d’Apache.

# systemctl reload httpd

Tester les deux sites en local avec Links ou Firefox sur une machine du réseau local.

  • http://slackware.amandine.microlinux.lan
  • http://freebsd.amandine.microlinux.lan

Régler les problèmes d’encodage

Dans la configuration actuelle, la documentation de FreeBSD n’affiche pas correctement les caractères accentués.

Encodage ISO

Ce comportement est dû à la directive AddDefaultCharset dans le fichier /etc/httpd/conf/httpd.conf.

AddDefaultCharset UTF-8

Or, le code source de la page d’accueil de FreeBSD spécifie un encodage différent.

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>

Pour remédier à cela, il suffit de commenter la directive AddDefaultCharset, ce qui permettra aux pages hébergées de spécifier leur propre encodage.

#AddDefaultCharset UTF-8

Ne pas oublier de prendre en compte la nouvelle configuration.

# systemctl reload httpd

Une fois que l’on a rectifié l’encodage, Links affiche correctement la page. Firefox est plus dur de la feuille, et il faut éventuellement rectifier l’encodage manuellement (Affichage > Encodage de caractères) pour une page présente dans le cache du navigateur.

Héberger plusieurs sites sur une machine publique

Sur un serveur dédié avec un ou plusieurs domaines publiquement accessibles, la configuration de la page par défaut ressemblera à ceci.

# /etc/httpd/conf.d/default.conf
#
# http://sd-100246.dedibox.fr
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/default/html"
  ServerName sd-100246.dedibox.fr
  ErrorLog logs/sd-100246.dedibox.fr-error_log
  CustomLog logs/sd-100246.dedibox.fr-access_log common
</VirtualHost>

La documentation de Slackware sera hébergée sur l’hôte www.slackbox.fr.

# /etc/httpd/conf.d/slackware.conf
#
# http://www.slackbox.fr
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/slackware/html"
  ServerName www.slackbox.fr
  ServerAlias slackbox.fr
  ErrorLog logs/www.slackbox.fr-error_log
  CustomLog logs/www.slackbox.fr-access_log common
</VirtualHost>

Et pour l’hébergement de la documentation de FreeBSD, on suivra la même logique.

# /etc/httpd/conf.d/freebsd.conf
#
# http://www.unixbox.fr
<VirtualHost *:80>
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/html/freebsd/html"
  ServerName www.unixbox.fr
  ServerAlias unixbox.fr
  ErrorLog logs/www.unixbox.fr-error_log
  CustomLog logs/www.unixbox.fr-access_log common
</VirtualHost>

Tester l’affichage des différents sites.

    • http://www.slackbox.fr (documentation de Slackware)
    • http://slackbox.fr
    • http://www.unixbox.fr (documentation de FreeBSD)
    • http://unixbox.fr
    • http://sd-100246.dedibox.fr (page par défaut)

Héberger des sites dynamiques avec PHP

Installer PHP.

# yum install php

Mettre en place un hôte virtuel http://phpinfo.amandine et éditer la configuration correspondante. L’hôte virtuel contiendra une seule page index.php que l’on éditera comme ceci.

<?php
 echo phpinfo();
?>

Ajouter une entrée correspondante dans la configuration DNS et redémarrer Apache.

# systemctl restart httpd

Afficher la page http://phpinfo.amandine dans un navigateur. On doit obtenir quelque chose qui ressemble grosso modo à ceci.

Infos PHP

Le fichier /etc/php.ini contient la configuration de PHP. On peut commencer par définir le fuseau horaire du serveur, nécessaire pour le bon fonctionnement de certaines applications.

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Paris

Redémarrer Apache et vérifier les données correspondantes dans la page qui affiche les infos PHP.

Utiliser MySQL/MariaDB à partir de PHP

Pour utiliser MySQL/MariaDB à partir de PHP, il suffit d’installer le module correspondant et de redémarrer Apache.

# yum install php-mysql
# systemctl restart httpd

Téléchargement

Des modèles de fichiers de configuration pour les hôtes virtuels sont disponibles dans mon dépôt Github centos, dans le répertoire el7/vhosts :

$ git clone https://github.com/kikinovak/centos
Publié dans CentOS, Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Serveur de bases de données MySQL/MariaDB sous CentOS

MySQLCet article décrit la mise en place d’un serveur de bases de donnéesMySQL/MariaDB sous CentOS. MySQL est le système de bases de données le plus populaire du monde de l’Open Source. Un grand nombre d’applications web (wikis, moteurs de blogs et de forums, systèmes de gestion de contenu, etc.) utilisent MySQL comme moteur de bases de données.

On entend parfois dire que MySQL n’est pas un « vrai » système de bases de données en comparaison à des systèmes comme Oracle ou DB/2. Contentons-nous de savoir que MySQL est utilisé, entre autres, par Facebook, Google et Yahoo!

CentOS 7 a remplacé MySQL par le fork communautaire MariaDB, suite au rachat de MySQL par Sun Microsystems et Oracle. La gouvernance du projet MariaDB est assurée par la fondation MariaDB. Elle confère au logiciel l’assurance de rester libre.

Installation et configuration

Installer MySQL/MariaDB.

# yum install mariadb-server mariadb

Le client mariadb est automatiquement installé par le paquet mariadb-server.

Activer et démarrer le service.

# systemctl enable mariadb
# systemctl start mariadb

Sécuriser le serveur MySQL/MariaDB

MySQL/MariaDB dispose de l’utilitaire mysql_secure_installation pour assurer la sécurité d’une installation fraîche sur une machine de production. Ce programme permet d’effectuer quelques démarches de sécurisation essentielles.

  1. Définir un mot de passe root MySQL (ne pas confondre avec le compte root Linux).
  2. Supprimer les comptes root MySQL accessibles de l’extérieur.
  3. Supprimer les connexions anonymes.
  4. Supprimer la base de données de test.

Lancer la sécurisation.

# mysql_secure_installation

NOTE: 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): [Entrée]
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] y
New password: **********
Re-enter new password: **********
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] y
 ... 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] y
 ... 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] y
 - 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] y
 ... 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!

Dorénavant, il faut se connecter au moniteur MySQL/MariaDB avec le mot de passe que l’on vient de définir un peu plus haut.

$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.
...
MariaDB [(none)]>

Afficher les bases de données.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

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 | *6883419C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
| root | 127.0.0.1 | *6883419C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
| root | ::1       | *6883419C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
+------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

On va 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.00 sec)

Vérifier le résultat de l’opération.

MariaDB [mysql]> select user, host, password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6883419C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)

Quitter la console.

MariaDB [mysql]> quit;
Bye

Exemple de base de données

Se connecter au moniteur MySQL.

# mysql -u root -p
mysql>

Créer une base de données webapp.

mysql> create database webapp;

Afficher les bases de données.

mysql> show databases;

Créer un utilisateur webappuser qui aura tous les droits sur webapp.

mysql> grant all on webapp.* to webappuser@localhost
   - > identified by 'motdepasse';

Attention, le mot de passe apparaît en clair dans le moniteur MySQL.

mysql> quit;

Si l’on souhaite supprimer cette base de données.

mysql> drop database webapp;

Sauvegarde

La commande mysqldump permet de sauvegarder une base de données MySQL sous forme d’une série d’instructions SQL.

L’exemple suivant effectue une sauvegarde complète de la base de données cmsms.

$ mysqldump -u root -p cmsms > sauvegarde_cmsms.sql

L’option --all-databases permet de sauvegarder l’ensemble des bases de données d’un serveur.

$ mysqldump -u root -p --all-databases > sauvegarde.sql

Les fichiers SQL résultants sont parfois très volumineux, étant donné qu’il s’agit d’un format texte simple. Dans ce cas, on peut les compresser durant la sauvegarde même. Voici ce que cela donne pour les deux exemples précédents.

$ mysqldump -u root -p cmsms | gzip -c > sauvegarde_cmsms.sql.gz
$ mysqldump -u root -p --all-databases | gzip -c > sauvegarde.sql.gz

Restauration

Dans l’exemple suivant, on va restaurer la base de données cmsms depuis le fichier de sauvegarde créé ci-dessus.

$ mysqladmin -u root -p create cmsms
$ mysql -u root -p cmsms < sauvegarde_cmsms.sql

Pour restaurer « à la louche » une sauvegarde globale, il suffit d’invoquer la commande suivante qui gère également la création des bases de données.

$ mysql -u root -p < sauvegarde.sql

La restauration à partir d’une sauvegarde compressée peut s’effectuer comme ceci.

$ mysqladmin -u root -p create cmsms
$ gunzip -c sauvegarde_cmsms.sql.gz | mysql -u root -p cmsms

Et pour une sauvegarde globale.

$ gunzip -c sauvegarde.sql.gz | mysql -u root -p

Si l’on obtient des erreurs de connexion aux bases restaurées, il faudra se connecter au moniteur MySQL, puis…

mysql> flush privileges;

Sauvegardes automatiques

Mon dépôt Github centos fournit un script Bash sqldump.sh dans le répertoire el7/backup. Ce script permet d’effectuer des sauvegardes automatiques de l’ensemble des bases MySQL d’un serveur, individuellement et « à la louche ». Les sauvegardes se présentent sous forme d’une série de fichiers compressés *.sql.gz rangés dans le répertoire /sqldump. Par la suite, ces fichiers pourront être récupérés par un serveur de sauvegardes.

# cd
# git clone https://github.com/kikinovak/centos
# cd centos/el7/backup/
# cp sqldump.sh /usr/local/sbin/
# chmod 0700 /usr/local/sbin/sqldump.sh
# vim /usr/local/sbin/sqldump.sh

Une fois qu’on a édité le script à sa convenance, on peut définir une tâche automatique.

# crontab -e
# Backup MySQL databases
05 10 * * * /usr/local/sbin/sqldump.sh 1> /dev/null

Dans l’exemple, on définit une sauvegarde quotidienne à 10h05.

Publié dans CentOS, Documentation Microlinux | Marqué avec , , , | Laisser un commentaire