Serveur web Apache sous CentOS

Apache est le principal serveur web du monde de l’Open Source. À l’origine, c’était la continuation du serveur libre développé par le NCSA (National Center for Supercomputing Applications) à l’Université de l’Illinois. Lorsque le projet officiel a été abandonné en 1994, une équipe de développeurs volontaires a continué à fournir du code sous forme de nombreux correctifs, ce qui explique la genèse du nom a patchy server, c’est-à-dire “serveur rafistolé”.

D’après les statistiques de Netcraft, un peu moins de la moitié des sites Web du monde tournent sur un serveur Apache. Ces dernières années, les parts de marché perdues par Apache sont reprises par Nginx, son principal concurrent, qui est orienté vers la performance tout en offrant moins de fonctionnalités.

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.

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

Le protocole HTTP et les URL

Le protocole HTTP (Hypertext Transfer Protocol, c’est-à-dire “protocole de transfert hypertexte”) est un protocole de communication client-serveur développé pour le World Wide Web. Il permet un transfert de fichiers (html, css, js, mp4, etc.) localisés grâce à une chaîne de caractères appelée URL entre un navigateur (le client) et un serveur web.

HTTP est un protocole “requête-réponse” de la couche application qui utilise le protocole TCP comme couche de transport.

  1. Le client ouvre une connexion TCP vers le serveur et envoie une requête.
  2. Le serveur analyse la requête et répond en fonction de sa configuration.

Une réponse HTTP est un ensemble de lignes envoyées au client par le serveur. Elle comprend une ligne de statut, les champs d’en-tête et le corps de la réponse. Voici un exemple de réponse HTTP.

$ curl --head --location http://www.slackware.com
HTTP/1.1 200 OK
Server: Apache/2.2.22
Last-Modified: Fri, 01 Jul 2016 20:15:06 GMT
ETag: "3c6282-2d8d-53698a47ae680"
Accept-Ranges: bytes
Content-Length: 11661
Content-Type: text/html
Date: Sun, 13 Aug 2017 06:56:59 GMT
Connection: keep-alive

Le rôle du serveur web consiste à traduire une URL (comme par exemple http://www.slackware.com) en ressource locale. Consulter la page http://www.slackware.com revient à envoyer une requête HTTP à cette machine.

Une URL (Uniform Resource Locator, autrement dit “identifiant uniforme de ressources”) est une chaîne de caractères ASCII utilisée pour désigner les ressources sur Internet. Elle est informellement appelée “adresse web”, et elle est divisée en plusieurs parties, comme ceci.

<protocole>://<hôte>:<port>/<chemin>
  • Le protocole, c’est le langage utilisé pour communiquer sur le réseau, comme par exemple http, https, ftp, etc.
  • L’hôte, c’est l’ordinateur qui héberge la ressource demandée. Il est possible d’utiliser l’adresse IP, ce qui rend l’URL moins lisible.
  • Le numéro de port, c’est un numéro associé à un service qui permet de savoir quel type de ressource est demandé. Le port 80 est associé par défaut au protocole HTTP. Si l’on utilise ce port, ce n’est pas la peine de le spécifier explicitement.
  • Enfin, le chemin d’accès à la ressource permet au serveur de connaître l’emplacement du fichier demandé.

Ports et pare-feu

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

N0tons que théoriquement, l’administrateur peut choisir librement le port d’écoute du serveur.

Installation

Le serveur Apache est fourni par le paquet httpd.

# yum install httpd

L’installation du paquet crée un utilisateur système apache et un groupe système apache correspondant.

# grep apache /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
# grep apache /etc/group
apache:x:48:
# grep apache /etc/shadow
apache:!!:17352::::::

Premier lancement du serveur

Sous Red Hat et CentOS, Apache est préconfiguré pour afficher une page statique par défaut. Il suffit d’activer et de lancer le service.

# 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

Les fichiers de configuration

Initialement, la configuration du serveur Apache s’effectuait dans un seul fichier /etc/httpd/conf/httpd.conf. Avec le temps, ce fichier est devenu de plus en plus volumineux et de moins en moins lisible.

Les distributions modernes ont donc tendance à répartir la configuration d’Apache sur une série de fichiers *.conf répartis dans les répertoires /etc/httpd/conf.d et /etc/httpd/conf.modules.d, rattachés au fichier principal /etc/httpd/conf/httpd.conf par la directive Include.

Le fichier /etc/httpd/conf/httpd.conf est amplement documenté. Pour commencer, nous allons sauvegarder ce fichier par défaut et créer une version dépourvue de commentaires et plus lisible. Ici, la commande egrep filtre les lignes qui commencent soit par un commentaire (^#), soit par un espace (^$), soit par quatre espaces suivis d’un commentaire.

# cd /etc/httpd/conf
# mv httpd.conf httpd.conf.orig
# egrep -v '^#|^$|^    #' httpd.conf.orig > httpd.conf.lite
# cp httpd.conf.lite httpd.conf

La configuration par défaut

Jetons un oeil sur le fichier httpd.conf par défaut, et regardons de plus près les principales directives qui le constituent.

La directive ServerRoot permet de définir le répertoire dans lequel le serveur est installé.

ServerRoot "/etc/httpd"

La directive Listen permet à Apache d’écouter sur des adresses ou des ports spécifiques. Notons que cette directive est requise. Si elle est absente du fichier de configuration, Apache refuse de démarrer.

Listen 80

Comme nous l’avons vu un peu plus haut, la directive Include permet l’inclusion d’autres fichiers de configuration dans le fichier de configuration principal du serveur. IncludeOptional fonctionne comme Include, au détail près que la directive ne produira pas une erreur au cas où le métacaractère * ne correspond à aucun fichier. Le chemin est relatif par rapport à l’emplacement spécifié dans la directive ServerRoot.

Include conf.modules.d/*.conf
...
IncludeOptional conf.d/*.conf

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. Plus précisément, il est lancé par root pour ensuite changer de propriétaire.

User apache
Group apache

L’adresse mail de l’administrateur, définie par la directive ServerAdmin, apparaîtra sur certaines pages générées par le serveur, notamment les pages d’erreur.

ServerAdmin root@localhost

Les balises <Directory> et </Directory> permettent de regrouper un ensemble de directives qui ne s’appliquent qu’au répertoire précisé, à ses sous-répertoires, et aux fichiers situés dans ces sous-répertoires.

<Directory />
  AllowOverride none
  Require all denied
</Directory>
...
<Directory "/var/www">
  AllowOverride None
  Require all granted
</Directory>
<Directory "/var/www/html">
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

La directive DocumentRoot permet de définir le répertoire à partir duquel Apache va servir des fichiers.

DocumentRoot "/var/www/html"

Lorsque le serveur trouve un fichier .htaccess, il doit savoir lesquelles des directives placées dans ce fichier sont autorisées à modifier la configuration préexistante. Le traitement des fichiers .htaccess est contrôlé par la directive AllowOverride, qui ne peut être utilisée que dans les sections <Directory>. À partir du moment où elle est définie à none, les fichiers .htaccess sont totalement ignorés.

<Directory />
  AllowOverride none
  Require all denied
</Directory>

La directive Require permet de contrôler l’accès au système de fichiers du serveur. Require all denied bloque l’accès pour tous les utilisateurs, Require all granted autorise tout le monde.

<Directory />
  AllowOverride none
  Require all denied
</Directory>
...
<Directory "/var/www">
  AllowOverride None
  Require all granted
</Directory>

Comme son nom l’indique, la directive Options permet d’activer ou de désactiver une série d’options (ou de comportements) pour un répertoire donné. Ici par exemple, l’option Indexes affiche la liste des fichiers d’un répertoire en cas d’absence de fichier index.html. FollowSymlinks permet de suivre les liens symboliques.

<Directory "/var/www/html">
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Les balises <IfModule> et </IfModule> contiennent des directives qui ne s’appliquent qu’en fonction de la présence ou de l’absence d’un module spécifique. La directive DirectoryIndex spécifie le fichier à envoyer par Apache lorsqu’une URL se termine par / et concerne un répertoire entier.

<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

Les balises <Files> et </Files> contiennent des directives qui s’appliquent aux fichiers précisés.Ici par exemple, on interdit l’accès à tous les fichiers dont le nom commence par .ht, notamment .htaccess.

<Files ".ht*">
  Require all denied
</Files>

La directive ErrorLog définit le chemin vers le journal des erreurs. La verbosité de ce journal est contrôlée par la directive LogLevel.

ErrorLog "logs/error_log"
LogLevel warn

La directive CustomLog permet de contrôler la journalisation des requêtes destinées au serveur. Elle définit le nom et le format du fichier journal.

CustomLog "logs/access_log" combined

La directive AddDefaultCharset paramètre le jeu de caractères par défaut pour les pages de texte. Lorsqu’elle est désactivée (AddDefaultCharset off), Apache prend en compte l’encodage spécifié dans la balise <meta> des fichiers HTML à envoyer au navigateur.

meta http-equiv="Content-Type" content="text/html; charset=utf-8"

Ici en revanche, Apache utilise d’emblée le jeu de caractères spécifié en ignorant la balise <meta>.

AddDefaultCharset UTF-8

Configuration de base

Apache est immédiatement utilisable dans sa configuration par défaut. Avant d’héberger notre premier site, nous allons procéder à quelques ajustements.

Pour commencer, renseigner l’adresse mail de l’administrateur du serveur.

ServerAdmin info@microlinux.fr

Le nom du serveur peut être déterminé automatiquement, mais il vaut mieux le spécifier explicitement grâce à la directive ServerName.

ServerName amandine.microlinux.lan

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

ServerName sd-100246.dedibox.fr

Pour la journalisation, on choisira un format un peu moins bavard.

CustomLog "logs/access_log" common

Enfin, on permettra aux pages hébergées de spécifier leur propre encodage.

AddDefaultCharset off

Tester la nouvelle configuration.

# apachectl configtest
Syntax OK

Prendre en compte les modifications.

# systemctl reload httpd

Héberger un site statique

Dans la configuration par défaut, Apache est censé servir le contenu de /var/www/html. 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 de 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 \{} \;

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/00-amandine.microlinux.lan.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/00-amandine.microlinux.lan.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/amandine.microlinux.lan-error_log
  CustomLog logs/amandine.microlinux.lan-access_log common
</VirtualHost>

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/10-slackware.amandine.microlinux.lan.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.amandine.microlinux.lan-error_log
  CustomLog logs/slackware.amandine.microlinux.lan-access_log common
</VirtualHost>

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

# /etc/httpd/conf.d/10-freebsd.amandine.microlinux.lan.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.amandine.microlinux.lan-error_log
  CustomLog logs/freebsd.amandine.microlinux.lan-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

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/00-sd-100246.dedibox.fr.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/10-www.slackbox.fr.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/10-www.unixbox.fr.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

Documentation

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

Petit aperçu de la philosophie Unix

TerminalVous venez d’apprendre en tout et pour tout trois commandes et une poignée d’options. Peut-être sentez-vous monter en vous un vague sentiment de déception. C’est donc ça, Linux ? Des commandes qu’il faut taper fastidieusement dans une interface archaïque ?

Pour vous rassurer – et nous conforter dans notre démarche – je me permettrai de vous donner un exemple qui semblera familier à beaucoup d’entre vous. Imaginez que votre voiture tombe en panne un jour. Vous avez en gros deux possibilités pour la faire réparer.

  1. Vous la faites remorquer au garage Lapeau & Desfesses en ville. Un endroit très high tech avec beaucoup de chrome et de carrelage blanc, sans la moindre trace de cambouis ni de poussière. Les mécaniciens ressemblent à des ingénieurs en blouse blanche. Ils sont armés jusqu’aux dents d’ordinateurs portables et ne répondent à personne. Votre voiture est le seul objet sale dans cet endroit étincelant de propreté. L’ingénieur en chef dissimule à peine son dégoût, ouvre le capot et branche un câble dans une prise dont vous ignoriez l’existence jusque-là. Il retourne devant l’écran de son portable, clique sur une série de boutons dans son logiciel de diagnostic et vous annonce qu’il ne peut pas vous fixer un rendez-vous avant le début du mois prochain, mais qu’on peut déjà établir un devis.
  2. Vous décidez d’aller voir Tony, le mécanicien du village. En guise de bonjour, Tony vous présente son avant-bras à peine moins maculé de cambouis que ses mains. Il propose de s’occuper tout de suite de votre voiture, l’objet le plus propre dans tout le garage. Il ouvre le capot et contemple le moteur en sifflotant le refrain qui vient de passer à la radio. Puis il fouille dans sa boîte à outils et en extrait une clé tubulaire, un tournevis et une pince. À peine deux minutes plus tard, il vous annonce qu’il fallait juste nettoyer les bougies et refixer une durite qui s’était défaite. Il refuse de se faire payer malgré vos protestations réitérées.

Les commandes que nous venons d’apprendre sont certes aussi peu spectaculaires qu’une clé tubulaire, un tournevis ou une clé de douze. Vous serez d’ailleurs probablement surpris d’apprendre que ce sont des commandes Unix, le système d’exploitation dont Linux est un clone libre. Les principes de base d’Unix sont restés les mêmes pendant près de quarante ans. Douglas McIlroy, l’un des fondateurs d’Unix, a résumé la philosophie Unix en une série de trois impératifs catégoriques :

  1. Écrivez des programmes qui font une seule chose, et qui la font bien.
  2. Écrivez des programmes qui se combinent les uns avec les autres.
  3. Écrivez des programmes pour gérer des flux de texte, car c’est une interface universelle.

Même si vous n’avez pas l’intention d’écrire des programmes Unix (ou Linux), ces trois règles sont d’une importance capitale pour tout utilisateur de systèmes de cette famille. À partir du moment où vous maîtrisez ne serait-ce qu’une poignée de commandes Unix, vous apprendrez à les combiner pour résoudre les problèmes de manière efficace. Gardez ce principe à l’esprit lors de votre apprentissage, car nous verrons bientôt comment les tâches les plus complexes peuvent être décomposées en une série d’opérations simples.

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

Naviguer : ls, pwd et cd

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous initie à la navigation en ligne de commande sous forme d’atelier pratique.

Afficher le contenu d’un répertoire avec ls

La commande ls (comme list) affiche la liste des fichiers d’un répertoire. Invoquée sans arguments, elle montre le contenu du répertoire courant.

[root@centosbox ~]# ls
anaconda-ks.cfg

Comment lire ce résultat ? La commande ls nous a retourné un élément situé dans notre répertoire d’utilisateur. Notez que je me suis connecté en tant que root pour avoir quelque chose à me mettre sous la dent, étant donné que le répertoire d’utilisateur de kikinovak est encore vide. Pour le reste des opérations, nous allons travailler en tant qu’utilisateur “commun mortel”. Je vérifie, mon répertoire d’utilisateur est encore vide, effectivement.

[kikinovak@centosbox ~]$ ls

Le répertoire courant est celui dans lequel vous vous trouvez au moment où vous saisissez la commande. Pour afficher le contenu de la racine du système de fichiers, saisissez ceci.

[kikinovak@centosbox ~]$ ls /

Résultat :

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

Et pour voir ce qu’il y a dans /usr, il suffit d’invoquer la commande suivante.

[kikinovak@centosbox ~]$ ls /usr
bin  games    lib    libexec  sbin   src  
etc  include  lib64  local    share  tmp

Les habitués de Windows et de DOS l’auront deviné : ls sous Linux équivaut à la commande dir.

Décrypter les résultats de votre ordinateur

Les différentes couleurs de l’affichage nous suggèrent qu’il ne s’agit peut-être pas d’éléments du même type. Essayez.

[kikinovak@centosbox ~]$ ls /etc

Le résultat de cette commande dépassera probablement la taille d’un écran. Pour revenir en arrière, maintenez la touche Maj enfoncée et utilisez les touches PageHaut et PageBas pour faire défiler l’affichage en arrière et en avant.

Certains éléments apparaissent en bleu, d’autres en turquoise, d’autres en noir et blanc, et il y a même un peu de rouge. Pour en avoir le coeur net, il va falloir utiliser ls avec l’option -F, qui donne des détails.

[kikinovak@centosbox ~]$ ls -F /etc
adjtime                  hosts                     rc0.d@
aliases                  hosts.allow               rc1.d@
aliases.db               hosts.deny                rc2.d@
alternatives/            init.d@                   rc3.d@
anacrontab               inittab                   rc4.d@
asound.conf              inputrc                   rc5.d@
audisp/                  iproute2/                 rc6.d@
...

Réinvoquez ls -F pour afficher le contenu de /etc/ppp.

[kikinovak@centosbox ~]$ ls -F /etc/ppp
chap-secrets   ip-down*          ip-up.ipv6to4*  options
eaptls-client  ip-down.ipv6to4*  ipv6-down*      pap-secrets
eaptls-server  ip-up*            ipv6-up*        peers/

Vous constatez que certains éléments sont suivis d’une barre oblique /, d’autres d’une arobase @ ou d’une astérisque *; le reste des éléments ne contient aucun suffixe.

  • La barre oblique / (couleur par défaut : bleu) désigne un répertoire.
  • L’absence de suffixe (couleur par défaut : noir, blanc ou gris, selon votre terminal) indique qu’il s’agit d’un fichier régulier non exécutable.
  • L’arobase @ (couleur par défaut : turquoise) nous montre qu’il s’agit d’un lien symbolique, ce qui constitue l’équivalent d’un raccourci sous Windows. Nous verrons les liens symboliques un peu plus loin.
  • L’astérisque * (couleur par défaut : vert) nous indique qu’il s’agit d’un fichier régulier exécutable.

Il nous en manque encore quelques-uns, mais nous nous contenterons des éléments que nous avons pour l’instant.

Mais encore ?

Ces informations peuvent nous paraître un peu maigres. Nous pouvons en afficher davantage en utilisant l’option -l (comme long).

[kikinovak@centosbox ~]$ ls -l /etc/sysconfig
total 80
-rw-r--r--. 1 root root  429 23 mai   20:30 authconfig
drwxr-xr-x. 2 root root   43 23 mai   20:20 cbq
drwxr-xr-x. 2 root root    6  6 nov.   2016 console
-rw-r--r--. 1 root root  150 22 nov.   2016 cpupower
-rw-------. 1 root root  110 31 mars   2016 crond
-rw-------. 1 root root 1390  5 nov.   2016 ebtables-config
-rw-r--r--. 1 root root   73 11 nov.   2016 firewalld
...

L’utilisateur non averti trouvera cet affichage quelque peu énigmatique. En fait, il est facile à lire une fois que l’on sait à quoi correspond chaque terme.

Tout à fait à gauche, vous avez une série de dix caractères. Le tout premier vous indique s’il s’agit d’un fichier (tiret -) ou d’un répertoire (d comme directory). Ensuite, la série de neuf caractères (en fait, trois fois trois) indique les droits d’accès au fichier ou au répertoire. Nous traiterons la question des droits d’accès un peu plus loin. Les caractères r, w, x et - décrivent ce que l’on a le droit de faire avec le fichier ou le répertoire…

  • lire : r comme read ;
  • écrire (modifier) : w comme write ;
  • exécuter : x pour e[x]ecute ;
  • rien du tout : -.

Je disais : ce que l’on a le droit de faire. Ce on est en fait assez bien spécifié : les trois premiers caractères de la série concernent le propriétaire du fichier, les trois suivants le groupe et les trois derniers le reste du monde. Nous y reviendrons bientôt en détail.

Le chiffre qui suit (ici : la série de 1 et de 2 dans la deuxième colonne) n’est pas d’une grande importance pour nous. Précisons tout de même qu’il indique le nombre de liens pointant vers le fichier ou le répertoire.

Les deux indications immédiatement après nous montrent le propriétaire du fichier, ainsi que le groupe auquel il appartient. Dans l’exemple, fichiers et répertoires appartiennent à l’utilisateur root et au groupe root.

Humain, pas trop humain ?

La prochaine indication correspond à la taille du fichier. Ici, l’astuce est d’invoquer ls avec l’option supplémentaire -h ou --human-readable. Essayez.

[kikinovak@centosbox ~]$ ls -lh /etc/sysconfig
total 80K
-rw-r--r--. 1 root root  429 23 mai   20:30 authconfig
drwxr-xr-x. 2 root root   43 23 mai   20:20 cbq
drwxr-xr-x. 2 root root    6  6 nov.   2016 console
-rw-r--r--. 1 root root  150 22 nov.   2016 cpupower
-rw-------. 1 root root  110 31 mars   2016 crond
-rw-------. 1 root root 1,4K  5 nov.   2016 ebtables-config
-rw-r--r--. 1 root root   73 11 nov.   2016 firewalld
...

La taille des fichiers est tout de suite beaucoup plus lisible, car le système l’indique en kilo-octets (K), mégaoctets (M) ou gigaoctets (G).

En passant, nous faisons également deux autres constats. D’une part, les options des commandes peuvent se combiner. Nous aurions donc très bien pu invoquer la commande comme ceci :

[kikinovak@centosbox ~]$ ls -l -h /etc/sysconfig

D’autre part, bon nombre d’options de commande ont une version courte et une version longue. L’option -h (qui signifie “lisible par un humain”, comme si les informaticiens ne faisaient pas vraiment partie de l’espèce) peut donc très bien s’écrire comme dans l’exemple qui suit. Je vous conseille cette option uniquement si vous avez un penchant prononcé pour la dactylographie.

[kikinovak@centosbox ~]$ ls -l --human-readable /etc/sysconfig

Quant aux deux dernières colonnes, elles nous indiquent respectivement la date de la création ou de la dernière modification et, pour finir, le nom du fichier ou du répertoire.

Splendeur et misère des fichiers cachés

Une autre option fréquemment utilisée est -a (ou --all, tout). Appliquez-la sur votre répertoire utilisateur, et vous serez probablement surpris.

[kikinovak@centosbox ~]$ ls -a
.  ..  .bash_history .bash_logout .bash_profile .bashrc .lesshst

Cette option sert à afficher les fichiers et répertoires cachés. Dans un système Linux, les fichiers et répertoires dont le nom commence par un point ne s’affichent pas lorsque ls est invoqué normalement. Vous ne les verrez donc qu’en utilisant l’option -a.

Cachez cette configuration que je ne saurais voir

À quoi peuvent bien servir ces fichiers, et quel intérêt de les dissimuler ? Les fichiers cachés ou dotfiles (de l’anglais dot : point) contiennent la configuration personnalisée de vos applications. Concrètement, les fichiers ~/.bash_profile, ~/.bashrc et ~/.bash_logout contiennent la configuration de votre shell Bash (qui est une application). Quant au fichier ~/.bash_history, il renferme l’historique des commandes précédemment invoquées.

À la différence des fichiers situés dans /etc, qui définissent une configuration globale, c’est-à-dire valable pour tous les utilisateurs, les fichiers et répertoires cachés que nous rencontrons ici ne sont valables que pour vous seul. Nous aborderons le rôle du répertoire /etc un peu plus loin.

Vous vous demandez certainement ce que signifie le tilde ~ que j’ai utilisé à plusieurs reprises. Sur les systèmes Linux (tout comme dans Unix), ce symbole désigne votre répertoire utilisateur. Le fichier ~/.bashrc de l’utilisateur kikinovak sera donc /home/kikinovak/.bashrc dans sa notation explicite, tandis que le fichier ~/.bashrc de glagaffe correspondra à /home/glagaffe/.bashrc. Étant donné que chaque utilisateur est libre de configurer le shell Bash à sa guise (ce que nous verrons également plus loin), tout le monde aura donc son propre fichier .bashrc.

Notons que certains d’entre vous auront probablement déjà remarqué le tilde ~ dans l’invite de commande :

[kikinovak@centosbox ~]$

Comprendre l’invite de commande

Jetons un oeil sur l’invite de commande dans sa configuration par défaut. Elle est très simple à décrypter.

  • La première indication, c’est le nom de l’utilisateur (ex : kikinovak).
  • Il est séparé du nom de la machine (ex : centosbox) par une arobase @.
  • La troisième indication, c’est le répertoire courant (ex : ~ à savoir /home/kikinovak, puisque c’est l’utilisateur kikinovak)
  • Et enfin, le $ signifie par convention qu’il s’agit d’un utilisateur du “commun des mortels”. S’il s’agissait de l’utilisateur root, nous verrions ici un dièse # à la place du $.

Et ne partez pas en courant si je vous dis que l’aspect même de l’invite peut être paramétré à souhait.

Afficher les informations détaillées d’un répertoire

Il nous reste à voir une dernière option importante pour ls. Admettons que vous souhaitiez afficher les informations détaillées pour le répertoire /etc : les droits d’accès, le propriétaire, le groupe, etc. Vous invoquez donc hardiment ls suivi de l’option -l et de l’argument /etc ; et vous voyez… les informations détaillées de tout le contenu du répertoire, mais pas du répertoire lui-même.

Comment faire ? Tout simplement en invoquant l’option supplémentaire -d (comme directory, c’est-à-dire “répertoire”), qui affiche les répertoires avec la même présentation que les fichiers, sans lister leur contenu :

[kikinovak@centosbox ~]$ ls -ld /etc
drwxr-xr-x. 76 root root 8192 25 mai   07:09 /etc

pwd : “Vous êtes ici !”

La commande pwd (print working directory) s’acquitte d’une seule tâche. Elle vous affiche (print) le nom du répertoire courant (working directory), c’est-à-dire le répertoire dans lequel vous vous situez actuellement.

[kikinovak@centosbox ~]$ pwd
/home/kikinovak

Lorsque vous vous promenez dans une grande ville, il vous arrive de vous perdre. Avec un peu de chance, vous tombez sur un de ces grands plans de la ville, avec une flèche et un petit rond bien visibles, qui vous indique : “VOUS ÊTES ICI”. C’est exactement ce que fait pwd. Et maintenant que nous savons nous repérer, apprenons à nous déplacer.

On bouge avec cd !

La commande cd (change directory) est utilisée pour changer de répertoire courant. Il suffit de la faire suivre du chemin du répertoire dans lequel on veut se placer. Dans l’exemple ci-après, l’invocation de la commande pwd après cd montre que nous sommes bien dans le répertoire demandé.

[kikinovak@centosbox ~]$ cd /
[kikinovak@centosbox /]$ pwd
/
[kikinovak@centosbox /]$ cd bin
[kikinovak@centosbox bin]$ pwd
/bin
[kikinovak@centosbox bin]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd /usr/bin
[kikinovak@centosbox bin]$ pwd
/usr/bin

Chemin relatif ou absolu ?

Lorsque je me trouve dans le répertoire racine / et que je souhaite me déplacer vers le répertoire /bin, je peux écrire cd bin. Cela correspond au chemin relatif, c’est-à-dire le chemin indiqué à partir du répertoire dans lequel je me situe, soit /. Quant à cd /bin, c’est le chemin absolu, autrement dit l’emplacement à partir du répertoire racine.

En revanche, lorsque je me trouve dans le répertoire /etc et que je veux me rendre dans /bin, je suis obligé – pour l’instant – d’utiliser un chemin absolu. Pour saisir la distinction, je vous donne un exemple de ce qu’il ne faut pas faire…

[kikinovak@centosbox bin]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd bin
-bash: cd: bin: Aucun fichier ou dossier de ce type

Ces deux exemples de la vie courante vous permettront peut-être de saisir la nuance :

  • “Remontez la rue devant vous, tournez à gauche, continuez deux cents mètres, puis tournez à droite et encore à droite” (chemin relatif) ;
  • “Partez du Vieux Port, remontez la Canebière, puis prenez le boulevard Longchamp et arrêtez-vous au Palais Longchamp” (chemin absolu).

Dans l’exemple précédent, nous nous situons dans le répertoire /etc. Si nous écrivons cd bin sans la barre oblique / qui précède, l’interpréteur de commandes cherchera un répertoire inexistant /etc/bin et affichera une erreur.

À court d’arguments

Pour revenir dans votre répertoire d’utilisateur, il suffit d’invoquer cd tout court, sans arguments :

[kikinovak@centosbox etc]$ cd /etc
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd
[kikinovak@centosbox ~]$ pwd
/home/kikinovak

“Ici” et “à l’étage”

Voyons maintenant deux répertoires un peu particuliers. Affichez la totalité du contenu de votre répertoire d’utilisateur.

[kikinovak@centosbox ~]$ ls -aF
./  ../  .bash_history .bash_logout .bash_profile .bashrc .lesshst

Vous remarquez qu’en début de liste, vous avez un répertoire nommé . et un autre nommé ... Affichez maintenant le contenu d’un autre répertoire, avec la même option -a combinée avec l’option -F.

[kikinovak@centosbox ~]$ ls -aF /usr
./   bin/  games/    lib/    libexec/  sbin/   src/
../  etc/  include/  lib64/  local/    share/  tmp@

Si vous répétez l’opération sur d’autres répertoires au hasard, vous constaterez que chaque liste débute invariablement par ces mêmes répertoires . et ..

  • . est le répertoire courant.
  • .. est le répertoire parent.

Là encore, la mise en pratique vous aidera à saisir le concept. Essayez ceci.

[kikinovak@centosbox ~]$ cd /etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ cd ..
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ..
[kikinovak@centosbox etc]$ pwd
/etc
[kikinovak@centosbox etc]$ cd ..
[kikinovak@centosbox /]$ pwd
/

Chaque appel à cd .. nous fait ainsi remonter d’un cran dans l’arborescence, jusqu’à ce que nous nous retrouvions à la racine.

Quant au point ., il faut se le représenter comme le fameux “VOUS ÊTES ICI” sur le plan de la ville. Admettons que je me situe dans le répertoire /etc et que je veuille me rendre dans le sous-répertoire sysconfig. Je pourrais utiliser indépendamment ces deux notations, qui reviendraient au même…

[kikinovak@centosbox /]$ cd /etc
[kikinovak@centosbox etc]$ cd sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig

Ou alors :

[kikinovak@centosbox ~]$ cd /etc
[kikinovak@centosbox etc]$ cd ./sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig

L’utilité de cette notation vous apparaîtra un peu plus loin. Pour l’instant, retenez simplement que . signifie “ici”.

Notez aussi que .. peut très bien faire partie d’un chemin. Admettons que vous soyez dans le répertoire /etc/sysconfig et que vous souhaitiez vous rendre dans /etc/ssh. Vous pourriez vous y prendre comme ceci :

[kikinovak@centosbox ~]$ cd /etc/sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ..
[kikinovak@centosbox etc]$ cd ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Il y a moyen de faire plus court et plus élégant.

[kikinovak@centosbox ~]$ cd /etc/sysconfig
[kikinovak@centosbox sysconfig]$ pwd
/etc/sysconfig
[kikinovak@centosbox sysconfig]$ cd ../ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Si vous vous demandez pourquoi j’invoque pwd à chaque changement de répertoire, c’est uniquement à des fins de démonstration, pour bien expliciter le répertoire courant.

Vous pouvez également monter de plusieurs crans, si cela est nécessaire. Si votre répertoire courant est /etc/sysconfig/network-scripts et si vous souhaitez vous rendre dans /etc/ssh, il va falloir que vous montiez de deux crans, pour ensuite entrer dans le répertoire ssh. En pratique, cela ressemblerait à l’exemple suivant.

[kikinovak@centosbox ~]$ cd /etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[kikinovak@centosbox network-scripts]$ cd ../../ssh
[kikinovak@centosbox ssh]$ pwd
/etc/ssh

Lire la suite…

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

Introduction à la ligne de commande

TerminalCet article fait partie de mes cours d’introduction à l’administration des systèmes Linux. Il vous prend par la main et vous fait faire vos premiers pas dans le shell sous forme d’atelier pratique.

L’invite de commandes

Pour travailler en ligne de commande, vous devez tout d’abord vous retrouver face à une “invite de commande” (command prompt), c’est-à-dire quelque chose qui ressemble à ceci.

[kikinovak@centosbox ~]$ _

Si nous nous sommes connectés en tant que root, cette invite se présente un peu différemment.

[root@centosbox ~]# _

Se connecter à un serveur Linux depuis Windows avec PuTTY

PuTTY est un client SSH libre pour Windows, écrit par Simon Tatham et publié sous licence MIT. Téléchargez-le sur la page du projet, installez-le et lancez-le.

Pour ouvrir une session distante avec PuTTY, je dois lui fournir quelques paramètres de base comme le nom d’hôte ou l’adresse IP, le port et le type de connexion.

  • Host Name : centosbox
  • IP address : 192.168.2.20 (si la machine n’est pas joignable par nom d’hôte)
  • Port : 22
  • Connection type : SSH
  • Cliquer sur Open

PuTTY affiche un avertissement quant à la clé publique du serveur distant. Nous décidons de lui faire confiance en cliquant sur Oui. À partir de là, la console de PuTTY nous demande de nous identifier.

login as: kikinovak
kikinovak@centosbox's password: ********
Last login: Wed May 24 08:14:24 2017 from alphamule.microlinux.lan
[kikinovak@centosbox ~]$ _

Se connecter à un serveur Linux depuis Mac OS X

Pour nous connecter au serveur Linux depuis un poste de travail tournant sous Mac OS X, nous invoquerons SSH depuis un émulateur de terminal.

Sous Mac OS X, rendez-vous dans le dossier Applications/ et repérez l’application Terminal dans le sous-dossier Utilitaires/.

Pour me connecter en tant qu’utilisateur kikinovak sur le serveur, j’invoque la commande suivante.

$ ssh kikinovak@centosbox

Pour fournir l’adresse IP plutôt que le nom d’hôte, la syntaxe sera la suivante.

$ ssh kikinovak@192.168.2.20

Pour me connecter en tant qu’administrateur root, la commande ressemblera à ceci.

$ ssh root@centosbox

Lors de la première connexion, SSH m’affiche un avertissement quant à l’identité de la machine. Répondez par l’affirmative.

Basculer entre les consoles virtuelles

Si vous êtes connecté physiquement au serveur – autrement dit, si vous n’avez pas ouvert une session distante – vous pouvez basculer entre les consoles virtuelles.

La commande tty affiche le nom du terminal associé à l’entrée standard.

[kikinovak@centosbox ~]$ tty
/dev/tty1

Utilisez le raccourci clavier Alt+F2 pour basculer vers la deuxième console virtuelle. Connectez-vous et invoquez la commande tty.

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

centosbox login: kikinovak
Password: ********
[kikinovak@centosbox ~]$ tty
/dev/tty2

Dans la configuration par défaut, CentOS dispose de six consoles virtuelles auxquelles vous accédez par le raccourci clavier Alt+F1, Alt+F2 et ainsi de suite jusqu’à Alt+F6.

Basculez vers la troisième console virtuelle (Alt+F3), connectez-vous en tant que root et, là aussi, invoquez tty. Puis revenez vers la première console avec Alt+F1.

Quitter la console

Pour fermer la session et revenir à l’invite de connexion, invoquez la commande suivante.

$ logout

Alternativement, vous pouvez également vous déconnecter comme ceci :

$ exit

Enfin, le raccourci clavier Ctrl+D permet de faire la même chose plus rapidement.

Pour vous entraîner, connectez-vous successivement en tant que root, puis en tant qu’utilisateur normal.

Premiers pas en ligne de commande

Commencez par taper n’importe quoi et regardez la réaction de votre système. Par exemple :

[kikinovak@centosbox ~]$ make love
make: *** Aucune règle pour fabriquer la cible « love ». Arrêt.
[kikinovak@centosbox ~]$ 

Vous venez de taper votre première commande (tty ne compte pas vraiment)… et vous vous retrouvez face à votre premier message d’erreur. Mais que s’est-il passé exactement ?

  • L’interpréteur de commandes vous a affiché une invite [kikinovak@centosbox ~]$. Il vous a ainsi signifié qu’il était prêt à recevoir une ou plusieurs commandes.
  • Vous avez tapé une commande : make.
  • Vous avez fait suivre la commande make d’un argument : love.
  • L’interpréteur a essayé en vain d’exécuter ce que vous lui avez demandé de faire et vous a dit plus ou moins clairement ce qu’il en pense, en l’occurrence : make: *** Aucune règle pour fabriquer la cible « love ». Arrêt.
  • L’interpréteur de commandes vous affiche à nouveau l’invite, pour vous indiquer qu’il est prêt à recevoir une ou plusieurs commandes.

À présent, nous n’avons qu’à essayer avec des commandes qui ont un peu plus de sens pour votre machine.

Le shell Bash et les autres

Le shell est un programme ayant pour fonction d’assurer l’interface entre l’utilisateur et le système Linux. C’est un interpréteur de commandes. Les systèmes Unix et Linux disposent de toute une panoplie de shells au choix.

  • le Bourne Shell (sh)
  • le C-Shell (csh)
  • le Korn Shell (ksh)
  • le Z Shell (zsh)
  • le Bourne Again Shell (bash)

Nous nous concentrerons sur le shell Bash, qui est devenu la norme sur les systèmes Linux.

Lire la suite…

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

Installer CentOS dans VirtualBox

VirtualBoxVirtualBox (“machine virtuelle”) est un logiciel de virtualisation de systèmes d’exploitation. En utilisant les ressources matérielles de l’ordinateur (système hôte), VirtualBox permet la création d’un ou de plusieurs ordinateurs virtuels dans lesquels s’installent d’autres systèmes d’exploitation (systèmes invités). Les systèmes invités fonctionnent en même temps que le système hôte, mais seul ce dernier a accès directement au véritable matériel de l’ordinateur.

VirtualBox est un logiciel libre développé par la société Oracle. Il est disponible pour  les plateformes Microsoft Windows, Mac OS X, Linux et Solaris.

Créer la machine virtuelle

Dans l’exemple qui suit, nous allons installer CentOS 7 dans une machine virtuelle.

Démarrer VirtualBox et cliquer sur Nouvelle pour créer une nouvelle machine virtuelle.

  • Nom : CentOS 7
  • Type : Linux
  • Version : Red Hat (64-bit)

Définir la quantité de mémoire vive que l’on souhaite allouer à la machine virtuelle. L’assistant suggère 1 gigaoctet, ce qui est le minimum requis pour que l’installateur fonctionne correctement. Rien n’empêche d’allouer davantage de mémoire en fonction de la RAM disponible sur le système hôte.

La prochaine étape consiste à créer un disque dur virtuel. Garder l’option par défaut Créer un disque dur virtuel maintenant et cliquer sur Créer.

  • Type de fichier de disque dur : VDI (Image Disque VirtualBox)
  • Dynamiquement alloué
  • Taille du disque : 8 gigaoctets (minimum prédéfini)

Configurer la machine virtuelle

L’icône de la nouvelle machine virtuelle apparaît dans l’écran principal de VirtualBox. Vérifier si elle est bien en surbrillance et cliquer sur Configuration.

L’onglet Système nous permet éventuellement de rectifier le tir pour la quantité de mémoire vive allouée à la machine virtuelle.

Le sous-menu Système > Processeur permet d’augmenter le nombre de processeurs disponibles pour la machine virtuelle, en fonction de la machine. Sur un système Intel Core i7 muni de 8 coeurs, on pourra en utiliser 4 pour une machine virtuelle.

L’onglet Affichage ne nous concerne pas vraiment, étant donné que nous installons un système en mode console, c’est-à-dire dépourvu d’interface graphique. Notons quand-même que pour un système invité muni d’une telle interface, il faut généralement augmenter la mémoire vidéo au maximum disponible. C’est également une bonne idée de cocher l’option Activer l’accélération 3D.

L’onglet Stockage nous affiche notre disque dur virtuel CentOS 7.vdi relié au Contrôleur SATA. Pour le support d’installation, nous avons le choix.

  1. Si nous utilisons un CD-Rom ou un DVD pour installer CentOS, nous devons cliquer sur le champ Vide relié au Contrôleur IDE, et dans le champ à droite du menu déroulant Lecteur optique – symbolisé par un CD-Rom – nous pouvons sélectionner Lecteur de l’hôte et cocher Mode direct.
  2. Si nous avons téléchargé le fichier ISO de CentOS et que nous ne l’avons pas encore gravé, nous pouvons directement fournir l’ISO à VirtualBox, ce qui nous permettra éventuellement d’économiser un CD vierge. Dans ce cas, au lieu de choisir Lecteur de l’hôte, nous sélectionnons l’option Choisissez un fichier de disque optique virtuel, ce qui lance un navigateur de fichiers qui nous permet de retrouver l’ISO en question, par exemple CentOS-7-x86_64-Minimal-1611.iso.

Il ne nous reste plus que l’onglet Réseau à configurer. Dans la configuration par défaut, la machine virtuelle est en accès NAT (Network Address Translation). Autrement dit, elle se situera dans son propre sous-réseau, elle aura accès à Internet, mais elle ne pourra pas communiquer directement avec les machines qui sont dans le même réseau que l’hôte.

Dans le menu déroulant Mode accès réseau, sélectionnez Accès par pont, ce qui aura pour effet de créer une machine virtuelle accessible dans la même plage d’adresses que l’hôte et les autres machines du réseau local. Éventuellement, dans le sous-menu Avancé, vous pouvez prédéfinir une adresse MAC personnalisée pour la carte réseau de la machine virtuelle, par exemple 080027ABCDEF, ce qui vous permet d’emblée de configurer votre serveur DHCP local en attribuant une adresse IP statique et un nom d’hôte correspondant à votre machine virtuelle.

Confirmez par OK et revenez dans l’écran principal. Il ne reste plus qu’à Démarrer la machine virtuelle.

Pour aller plus loin

VirtualBox fait partie des applications du genre “usine à gaz” qui peuvent intimider par une myriade de fonctionnalités et d’options. Si vous souhaitez aller plus loin, n’hésitez pas à jeter un oeil sur l’excellente documentation du projet, qui existe également en traduction française. Elle a peut-être une ou deux version de retard, mais ce n’est pas bien grave.

Nous ne traitons pas ici l’installation des Additions Invité, qui ne sont réellement nécessaires que sur un poste de travail.

Lire la suite…

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

Installer et utiliser Lynis sous CentOS

Logo CISOfyLynis est un outil de sécurité développé par la société CISOfy, qui permet d’effectuer un audit simple, rapide et complet d’un système Linux, Unix ou BSD. CISOfy propose une version libre et une version entreprise de l’outil. La version libre est disponible sous licence GPLv3 et ne laisse rien à désirer en termes de fonctionnalités.

Installation

Lynis est certes fourni par le dépôt communautaire EPEL, mais la version proposée est un peu à la traîne par rapport à la dernière version disponible chez CISOfy. Or, pour un outil d’audit de sécurité, il vaut mieux disposer de la toute dernière version. Heureusement pour nous, CISOfy met à disposition son propre dépôt de paquets pour RHEL et CentOS, et qui fournit le seul paquet lynis.

Éditer un fichier /etc/yum.repos.d/lynis.repo comme ceci.

[lynis]
name=CISOfy Software - Lynis package
baseurl=https://packages.cisofy.com/community/lynis/rpm/
enabled=1
priority=5
gpgkey=https://packages.cisofy.com/keys/cisofy-software-rpms-public.key
gpgcheck=1

Remarque : étant donné que j’ai défini une priorité de 10 pour le dépôt EPEL, j’attribue une priorité de 5 pour le dépôt de CISOfy.

Une fois que le dépôt est en place, on peut installer le paquet.

# yum install lynis

Utilisation

Invoqué sans arguments, lynis affiche un résumé des commandes disponibles.

# lynis

Lynis

Pour en savoir plus, on peut invoquer lynis show options ou consulter lynis(8).

L’audit du système fonctionne sans configuration préalable.

# lynis audit system

Lynis audit

L’audit complet du système est assez rapide. Au terme de l’analyse, Lynis affiche les résultats directement à l’écran, sous forme d’avertissements (Warning) et de suggestions (Suggestion).

Lynis audit

Parallèlement, l’audit est enregistré dans le fichier /var/log/lynis.log. On pourra effectuer un filtrage sur les termes Warning et Suggestion, comme ceci.

# grep Warning /var/log/lynis.log
2017-07-25 09:48:19 Warning: Couldn't find 2 responsive nameservers 
[test:NETW-2705] 
2017-07-25 09:48:25 Warning: PHP option expose_php is possibly 
turned on, which can reveal useful information for attackers. 
[test:PHP-2372] 
# grep Suggestion /var/log/lynis.log
2017-07-25 09:48:19 Suggestion: Check your resolv.conf file and 
fill in a backup nameserver if possible [test:NETW-2705] 
...
Publié dans CentOS, Documentation Microlinux | Marqué avec , , , | Laisser un commentaire

Installer Dropbox sous CentOS 6

Dropbox LogoJe viens d’installer CentOS 6 sur le vieux portable Dell Inspiron 1300 d’un ami. Il utilise le service de stockage en réseau Dropbox. Voici la procédure d’installation pour le client correspondant.

La page de téléchargement sur le site de Dropbox offre une série de liens vers des paquets binaires pour Ubuntu, Fedora et Debian.

Dropbox

J’opte pour le paquet Fedora (.rpm) 32-bit en croisant les doigts qu’il veuile bien fonctionner sur CentOS. Je crée un répertoire local /root/dropbox et je range le fichier téléchargé dans ce répertoire.

Un premier test s’annonce plutôt bien.

# rpm -ivh --test nautilus-dropbox-2015.10.28-1.fedora.i386.rpm 
attention: nautilus-dropbox-2015.10.28-1.fedora.i386.rpm: 
Entête V3 RSA/SHA1 Signature, key ID 5044912e: NOKEY
Préparation... ########################################### [100%]

J’installe le paquet pour de bon.

# yum localinstall nautilus-dropbox-2015.10.28-1.fedora.i386.rpm

Après l’installation du paquet, je dispose d’une nouvelle entrée Applications > Internet > Dropbox. Un clic sur cette entrée déclenche le téléchargement de Dropbox et l’ouverture du navigateur Firefox, qui me somme de fournir mon identifiant et mon mot de passe Dropbox.

Un répertoire ~/Dropbox est créé, et la synchronisation initiale s’effectue. À partir de là, Dropbox est intégré de manière transparente (si l’on peut dire) dans Nautilus.

Dropbox Nautilus

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

Installation de KDE neon sur un portable Asus X751S

KDE neonUn ami m’a récemment confié l’ordinateur portable de sa compagne pour le passer de Windows à Linux. C’est un Asus X751S, doté d’une carte mère Intel Atom. Une première tentative d’installer un poste de travail CentOS 7 a lamentablement échoué, même en utilisant un kernel récent du dépôt ELRepo. Pour ce genre de matériel exotique, la seule solution viable passe par l’utilisation d’une distribution bleeding edge. Mon choix s’est porté sur KDE neon, un mélange assez sympathique de rolling release sur base d’une Ubuntu LTS 16.04.

Installation KDE neon

Confection du support d’installation

Télécharger l’ISO de la User Edition.

L’ISO est hybride et peut s’écrire directement sur une clé USB.

# dd if=neon-userltsedition-20170712-0018-amd64.iso of=/dev/sdc

Configuration du BIOS

Le portable était initialement livré avec Windows 8 dessus, ce qui veut dire que tout est verrouillé à la sauce Microsoft.

Étant donné que Windows 8 est le genre de système qui refuse de s’éteindre pour de bon, il faut d’abord appuyer avec insistance sur le bouton Off pendant au moins dix secondes. Ensuite, l’accès au BIOS se fait de manière classique par la touche F2.

Dans un premier temps, je charge la configuration par défaut via Restore Defaults > Load Optimized Defaults > Yes.

Dans l’onglet Boot, je définis Boot Option #1 > UEFI: USB DISK 2.0 PMAP. Quant à Boot Option #2, je remplace Windows Boot Manager par Disabled.

Je me débarrasse ensuite de l’infâme Secure Boot de Microsoft. Dans l’onglet Security > Secure Boot Menu, je passe Secure Boot Control à Disabled.

Enfin, j’enregistre les modification du BIOS : Save Changes & Exit.

Installation

KDE neon utilise l’installateur d’Ubuntu, et la procédure d’installation est triviale. Une fois qu’on a démarré le système Live, cliquer sur l’icône Install neon userlts sur le Bureau.

Installation KDE neon

  1. Sélectionner la langue : Français.
  2. Cocher Télécharger les mises à jour pendant l’installation de neon.
  3. Cocher Installer les logiciels tiers pour le matériel graphique et le Wifi, Flash, MP3 et autres supports.
  4. Opter pour le partitionnement assisté – utiliser un disque entier.
  5. Définir le fuseau horaire.
  6. Choisir la disposition du clavier.
  7. Saisir le nom et l’identifiant correspondant, choisir un mot de passe  et définir un nom d’hôte pour la machine.

Redémarrage initial

Après le premier redémarrage, on se retrouve dans une version très épurée et très propre de KDE, une base saine pour pouvoir configurer un poste de travail aux petits oignons.

KDE neon

Après avoir arrangé l’aspect du Terminal (thème solarisé, police Monospace 11), j’active le compte root.

$ sudo passwd root

Curieusement, SSH n’est pas installé par défaut.

# apt-get install openssh-server

Configuration initiale de KDE

La configuration de KDE est assez potable telle quelle, mis à part le fond d’écran aux couleurs criardes. Je modifie juste quelques menus détails.

  • Dans les Effets de Bureau, j’active les Fenêtres en gélatine, un effet que je trouve assez réussi.
  • Je remplace le simple clic de la souris par un double clic pour ouvrir les fichiers et les dossiers.
  • Pour le thème du pointeur, j’opte pour Brise neigeuse.
  • Je change la disposition du bureau par Vue de dossier, et je supprime les deux icônes ~/Bureau/Home.desktop et ~/Bureau/Trash.desktop via le terminal.
  • J’agrandis la taille par défaut des icônes dans Dolphin.
  • J’augmente l’intervalle de verrouillage de l’écran de 5 à 30 minutes.

Installer une panoplie d’applications

Pour l’instant, l’installation de KDE est réduite au strict minimum. À première vue, on dispose de Firefox, Dolphin, Konsole, VLC, Okular, Gwenview, KWalletManager et KSysGuard, et c’est tout.

Internet & Réseau

La prochaine étape consiste donc à installer une panoplie cohérente d’applications. Pour faire ça de manière organisée, on va procéder catégorie par catégorie, et on va commencer par les applications Internet et Réseau.

  • Un bloqueur de pubs pour Mozilla Firefox
  • Le client mail Mozilla Thunderbird
  • Le client de messagerie instantanée Pidgin
  • Le client BitTorrent Transmission
  • Le client FTP/SFTP Filezilla
  • Le client de stockage réseau Dropbox

Une remarque en passant. Autant j’aime bien KDE et je l’utilise au quotidien sur ma station de travail, autant j’évite certaines applications de type “usine à gaz” comme KMail, Kopete ou KTorrent. Je préfère les remplacer par des équivalents GTK plus légers comme Thunderbird, Pidgin ou Transmission.

Installer un bloqueur de pubs pour Mozilla-Firefox :

# apt-get install xul-ext-ublock-origin

Installer Mozilla Thunderbird :

# apt-get install thunderbird thunderbird-locale-fr

Quelques paquets optionnels pour Thunderbird :

  • enigmail pour chiffrer les mails
  • xul-ext-lightning pour le calendrier

Installer Pidgin :

# apt-get install pidgin pidgin-plugin-pack

Installer Transmission :

# apt-get install transmission-gtk

Installer Filezilla :

# apt-get install filezilla

L’ajout de Dropbox se fait depuis un dépôt tiers. Éditer un fichier /etc/apt/sources.list.d/dropbox.list comme ceci.

deb http://linux.dropbox.com/ubuntu xenial main

Récupérer la clé d’authentification du projet.

# apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E

Recharger la liste des paquets et installer Dropbox.

# apt-get update
# apt-get install dropbox

Bureautique

Dans le rayon Bureautique, nous installerons les applications suivantes.

  • La suite bureautique LibreOffice intégrée à KDE
  • Un jeu complet de polices Microsoft
  • La visionneuse PDF Evince en supplément d’Okular

Installer LibreOffice avec l’intégration KDE :

# apt-get install libreoffice libreoffice-kde

Installer un jeu de polices Microsoft :

# apt-get install ttf-mscorefonts-installer

L’installateur affiche quelques avertissements sans conséquence, visiblement parce que la commande n’a pas été invoquée via sudo. Ne pas oublier d’accepter la licence pour les polices téléchargées.

Ubuntu ne fournit aucun paquet pour installer les polices Vista comme Calibri ou Cambria, nécessaires pour afficher correctement les documents confectionnés avec les versions récentes de Microsoft Office. En revanche, on trouve une série de scripts en ligne pour extraire ces polices depuis PowerPoint Viewer.

Voici un script qui fonctionne parfaitement :

Récupérer le script, installer la dépendance fontforge et rendre le script exécutable avant de le lancer.

# apt-get install fontforge
# chmod +x ttf-vista-fonts-installer.sh
# ./ttf-vista-fonts-installer.sh

Les documents PDF sont déjà gérés par Okular. J’installe Evince en plus, parce qu’il gère mieux certains PDF générés par les portails en ligne de l’administration française.

# apt-get install evince

Graphisme

Une panoplie raisonnablement complète d’applications graphiques peut ressembler à ceci.

  • L’application GIMP avec une série de plugins pratiques
  • Le gestionnaire de photos Digikam
  • L’application de DAO LibreCAD
  • L’application de PAO Scribus
  • Le logiciel de dessin vectoriel Inkscape
  • Le logiciel d’acquisition d’images Skanlite

Installer GIMP :

# apt-get install gimp gimp-data-extras gimp-help-fr gimp-lensfun \
  gimp-ufraw pandora

Installer Digikam :

# apt-get install digikam digikam-doc

Note : j’ai tenté d’installer KSnapshot, ce qui s’est soldé par une erreur, étant donné que l’utilitaire de capture d’écran de KDE 5, c’est Spectacle (paquet kde-spectacle), qui est déjà installé. Il n’apparaît pas dans le menu, mais on peut l’invoquer par la touche ImprÉcran.

Installer LibreCAD :

# apt-get install librecad

Installer Scribus :

# apt-get install scribus scribus-doc

Installer Inkscape :

# apt-get install inkscape

Installer Skanlite :

# apt-get install skanlite

Multimédia

Dans le domaine Multimédia, nous disposons déjà de VLC et d’une série de codecs et de plug-ins. Voici les applications que nous allons installer en plus.

  • Le lecteur de musique simple Audacious
  • Le lecteur vidéo MPlayer en version sans interface graphique
  • L’éditeur audio Audacity
  • L’encodeur vidéo HandBrake
  • L’extracteur audio Asunder
  • L’éditeur vidéo Openshot
  • Le transcodeur vidéo WinFF
  • Le logiciel de gravure K3B

Installer Audacious :

# apt-get install audacious

Installer MPlayer sans interface graphique :

# apt-get install mplayer

Installer Audacity :

# apt-get install audacity

Installer HandBrake :

# apt-get install handbrake

Installer Asunder :

# apt-get install asunder

Installer Openshot :

# apt-get install openshot

Installer WinFF :

# apt-get install winff-qt

Installer K3B :

# apt-get install k3b k3b-i18n k3b-extrathemes normalize-audio sox

Touches finales

Le fond d’écran par défaut n’est probablement pas au goût de tout le monde. On va donc installer un jeu de fonds d’écran.

# apt-get install kdewallpapers

Supprimer les paquets inutiles.

# apt-get autoremove fontforge
Publié dans Documentation Microlinux | Marqué avec , | 4 commentaires

Installer et utiliser Nikto sous CentOS

Scanner de sécurité pour serveurs webNikto est un scanner de sécurité pour les serveurs web (Web Server Assessment Tool) écrit en Perl. Il permet d’auditer un serveur web à la recherche de failles connues, de tester quelques milliers de vulnérabilités, de vérifier l’obsolescence du serveur et de ses composants et de rechercher des dossiers pouvant contenir des informations sensibles.

Nikto n’est pas exactement un scanner furtif. Il vise la rapidité et ne se gêne pas de bombarder le serveur de requêtes, en inondant les logs. Utilisez-le donc uniquement sur vos propres serveurs, ou alors sur des machines où vous avez le consentement de l’administrateur.

Installation

Nikto est fourni par le dépôt EPEL.

# yum install nikto

Mise à jour initiale

L’option -update permet de mettre à jour les plugins de Nikto. Un bug bénin affiche un avertissement à cause du fichier inexistant /usr/share/nikto/docs/CHANGES.txt. Il suffit de créer un fichier vide correspondant pour éviter le blocage.

# mkdir /usr/share/nikto/docs
# touch /usr/share/nikto/docs/CHANGES.txt

Lancer la mise à jour.

# nikto -update
+ Retrieving 'nikto_report_csv.plugin'
+ Retrieving 'nikto_headers.plugin'
+ Retrieving 'nikto_cookies.plugin'
+ Retrieving 'db_tests'
+ Retrieving 'db_parked_strings'
+ Retrieving 'CHANGES.txt'
+ CIRT.net message: Please submit Nikto bugs to 
  https://github.com/sullo/nikto

Configuration initiale

Éditer /etc/nikto/config et décommenter l’option RFIURL aux alentours de la ligne 20.

# RFI URL. This remote file should return a phpinfo call, 
# for example: <?php phpinfo(); ?>
# You may use the one below, if you like.
RFIURL=http://cirt.net/rfiinc.txt?

Sans cette option, Nikto affichera l’avertissement suivant lors de l’utilisation.

*** RFIURL is not defined in nikto.conf--no RFI tests will run ***

RFI (Remote File Inclusion) est un type de vulnérabilité que l’on trouve souvent sur les serveurs web. Il permet à un attaquant d’inclure un fichier distant, généralement par le biais d’un script sur le serveur.

Utilisation

La prise en main de Nikto est triviale. Il suffit de fournir le nom d’hôte du serveur en argument.

$ nikto -host sd-100246.dedibox.fr
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    sd-100246.dedibox.fr
+ Target Port:        80
+ Start Time:         2017-07-22 09:46:59 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...

Alternativement, on peut fournir l’adresse IP.

$ nikto -host 163.172.220.174
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    sd-100246.dedibox.fr
+ Target Port:        80
+ Start Time:         2017-07-22 09:49:31 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...

Nikto scanne le port 80 par défaut. L’option -port permet de spécifier un autre port.

$ nikto -host slackbox.fr -port 443
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    slackbox.fr
+ Target Port:        443
+ Start Time:         2017-07-22 09:52:09 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...

L’option -port accepte plusieurs arguments. Pour un scan plus complet, on pourra donc utiliser -port 80,443.

$ nikto -host 163.172.220.174 -port 80,443
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    sd-100246.dedibox.fr
+ Target Port:        80
+ Start Time:         2017-07-22 10:08:58 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...
+ End Time:           2017-07-22 10:15:33 (GMT2) (395 seconds)
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    sd-100246.dedibox.fr
+ Target Port:        443
+ Start Time:         2017-07-22 10:15:33 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...

Dans le cas d’un hébergement sécurisé, l’option -ssl permet d’accélérer le scan.

$ nikto -host slackbox.fr -port 443 -ssl
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          163.172.220.174
+ Target Hostname:    slackbox.fr
+ Target Port:        443
-----------------------------------------------------------------
+ SSL Info:        Subject: /CN=slackbox.fr
                   Ciphers: ECDHE-RSA-AES256-GCM-SHA384
                   Issuer:  /C=US/O=Let's Encrypt/
                            CN=Let's Encrypt Authority X3
+ Start Time:         2017-07-22 09:52:32 (GMT2)
-----------------------------------------------------------------
+ Server: Apache
  ...

Nikto affiche les vulnérabilités trouvées au fur et à mesure. Voici à quoi peut ressembler un rapport complet.

$ nikto -host amandine.microlinux.lan
- Nikto v2.1.5
-----------------------------------------------------------------
+ Target IP:          192.168.2.5
+ Target Hostname:    amandine.microlinux.lan
+ Target Port:        80
+ Start Time:         2017-07-22 09:57:58 (GMT2)
-----------------------------------------------------------------
+ Server: Apache/2.4.6 (CentOS) PHP/5.4.16
+ Server leaks inodes via ETags, header found with file /, 
  fields: 0x1321 0x5058a1e728280 
+ The anti-clickjacking X-Frame-Options header is not present.
+ No CGI Directories found (use '-C all' to force check all 
  possible dirs)
+ OSVDB-877: HTTP TRACE method is active, suggesting the host 
             is vulnerable to XST
+ 6545 items checked: 0 error(s) and 3 item(s) reported on 
                      remote host
+ End Time: 2017-07-22 09:58:10 (GMT2) (12 seconds)
-----------------------------------------------------------------
+ 1 host(s) tested

La correction des failles de sécurité trouvées par Nikto fera l’objet d’une série d’articles détaillés.

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

Installer et utiliser OpenVAS sous CentOS

Logo OpenVASOpenVAS (Vulnerability Assessment Scanner) est un outil qui permet d’effectuer un audit de sécurité d’une machine ou d’un réseau entier. Dans le monde de l’open source, OpenVAS est sans doute le logiciel phare dans la catégorie des scanners de vulnérabilité. C’est un fork libre de Nessus, publié sous licence GPL jusqu’à la version 2.2, et qui est devenu propriétaire lors de son passage à la version 3.0. L’application est officiellement supportée par le BSI (Bundesamt für Sicherheit in der Informationstechnik, l’agence fédérale allemande chargée de la sécurité des technologies de l’information et de la communication).

OpenVAS n’est pas très bien documenté, hormis une série de tutos en ligne qui relaient des informations parfois un peu fantaisistes. Je me suis donc familiarisé avec les documents disponibles, j’ai expérimenté pas mal, j’ai pris des notes, et j’ai décidé de rédiger ma propre documentation.

L’outil OpenVAS est un framework (comprendre “usine à gaz”), et son installation n’est pas tout à fait triviale. Sur une configuration récente, il faut compter près de trois quarts d’heure pour disposer d’une installation fonctionnelle. En revanche, une fois qu’OpenVAS est en place, sa prise en main est extrêmement simple.

OpenVAS

Quel dépôt tiers choisir ?

Pour Red Hat Enterprise Linux et CentOS, OpenVAS est fourni par deux dépôts de paquets tiers concurrents.

La plupart des tutos en ligne font référence au dépôt tiers Atomicorp, fournissant un seul paquet openvas qui contient tout ce qu’il faut. Curieusement,  la documentation officielle sur le site de l’éditeur renvoie même vers un de ces tutos.

Pour ma part, je préfère m’en tenir au dépôt EPEL, qui fournit des paquets de qualité pour Red Hat Enterprise Linux et CentOS, et que j’utilise sur mes serveurs aussi bien que sur mes postes de travail. Les paquets EPEL fournissent une série de paquets pour OpenVAS, étant donné qu’il s’agit là d’un véritable framework avec une série de composants.

  • openvas-scanner
  • openvas-libraries
  • openvas-manager
  • openvas-cli
  • openvas-gsa

OpenVAS Scanner

La pièce centrale d’OpenVAS, c’est OpenVAS Scanner. Je vais donc l’installer en premier.

# yum install openvas-scanner

D’après la documentation officielle, ce paquet contient un script shell openvas-check-setup qui permet de vérifier l’état de l’installation d’OpenVAS. À partir de là, je vais adopter une démarche quelque peu originale pour installer et configurer OpenVAS. Je vais me servir des messages d’erreur et autres avertissements du script openvas-check-setup pour compléter la mosaïque pas à pas.

Création du certificat SSL

Une première invocation du script me renvoie ceci.

# openvas-check-setup 
...
Checking OpenVAS Scanner ... 
OK: OpenVAS Scanner is present in version 5.0.6.
ERROR: No CA certificate file of OpenVAS Scanner found.
FIX: Run 'openvas-mkcert'.

Je génère le certificat SSL comme le script me le suggère. J’opte pour une validité de dix ans pour être tranquille.

# openvas-mkcert
...
CA certificate life time in days [1460]: 3650
Server certificate life time in days [365]: 3650
Your country (two letter code) [DE]: FR
Your state or province name [none]: Gard
Your location (e.g. town) [Berlin]: Montpezat
Your organization [OpenVAS Users United]: Microlinux

Le serveur Redis

Redis (Remote Dictionary Server) est un système de gestion de bases de données clé/valeur. Il fait partie de la famille des bases NoSQL et vise la performance. Et notre système OpenVAS a visiblement besoin d’un serveur Redis pour fonctionner correctement.

# openvas-check-setup
...
ERROR: No redis-server installation found.
FIX: You should install redis-server for improved scalability and 
     ability to trace/debug the KB

On va donc installer Redis.

# yum install redis

Éditer /etc/redis.conf et spécifier un emplacement approprié pour le fichier socket, aux alentours de la ligne 100.

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen 
# for incoming connections. There is no default, so Redis will not 
# listen on a unix socket when not specified.
#
unixsocket /run/redis/redis.sock

Ensuite, éditer /etc/openvas/openvassd.conf et ajouter une ligne pour spécifier l’emplacement de la Knowledge Base.

# KB test replay :
kb_dont_replay_scanners = no
kb_dont_replay_info_gathering = no
kb_dont_replay_attacks = no
kb_dont_replay_denials = no
kb_max_age = 864000
kb_location = /run/redis/redis.sock
#--- end of the KB section

Activer et démarrer Redis.

# systemctl enable redis
# systemctl start redis
# systemctl status redis

Récupérer les tests de vulnérabilité

OpenVAS se sert d’une base de près de 50.000 tests de vulnérabilité, nommée NVT (Network Vulnerability Tests). Pour l’instant nous ne disposons pas de cette base.

# openvas-check-setup
...
ERROR: The NVT collection is very small.
FIX: Run a synchronization script like openvas-nvt-sync 
     or greenbone-nvt-sync.

Nous allons utiliser la commande openvas-nvt-sync pour récupérer les NVT.

# openvas-nvt-sync
...
zabbix_web_detect.nasl.asc
znc_detect.nasl
znc_detect.nasl.asc
zone_alarm_local_dos.nasl
zone_alarm_local_dos.nasl.asc
[i] Download complete
[i] Checking dir: ok
[i] Checking MD5 checksum: ok

OpenVAS Manager

Le prochain élément du framework, c’est OpenVAS Manager, le service qui contrôle OpenVAS Scanner via le protocole OTP (OpenVAS Transfer Protocol). Cette pièce nous manque pour l’instant.

# openvas-check-setup
...
ERROR: No OpenVAS Manager (openvasmd) found.
FIX: Please install OpenVAS Manager.

Il faut donc installer le paquet correspondant.

# yum install openvas-manager

Générer le certificat SSL client

OpenVAS Manager a besoin d’un certificat SSL client pour se connecter.

# openvas-check-setup
...
ERROR: No client certificate file of OpenVAS Manager found.
FIX: Run 'openvas-mkcert-client -n -i'

Ici, nous allons dévier quelque peu de la procédure suggérée. L’option -n exécute le script en mode non-interactif en acceptant les valeurs par défaut. Nous allons nous contenter de l’option -i qui se charge d’installer le certificat, et là aussi, nous allons générer un certificat SSL valable pour dix ans.

# openvas-mkcert-client -i
Client certificates life time in days [365]: 3650
Your country (two letter code) [DE]: FR
Your state or province name [none]: Gard
Your location (e.g. town) [Berlin]: Montpezat
Your organization [none]: Microlinux
Your organizational unit [none]:
e-Mail []: info@microlinux.fr

Construire la base de données

Pour l’instant, OpenVAS Manager ne dispose pas de base de données.

# openvas-check-setup
...
ERROR: No OpenVAS Manager database found. 
       (Tried: /var/lib/openvas/mgr/tasks.db)
FIX: Run 'openvasmd --rebuild' while OpenVAS Scanner is running.

Dans un premier temps, on va activer et démarrer OpenVAS Scanner.

# systemctl enable openvas-scanner
# systemctl start openvas-scanner
# systemctl status openvas-scanner

Ensuite, on va construire la base de données. L’option --progress ne nous dit pas grand-chose sur l’avancement des opérations, mais au moins, la petite animation qui s’excite progressivement suggère que ça mouline sous le capot. Étant donné qu’il y a plus de 50.000 entrées à traiter, l’opération peut durer un petit moment. Même sur une machine rapide, on a largement le temps d’aller boire un café.

# openvasmd --rebuild --progress
Rebuilding NVT cache... \

Créer un utilisateur

La prochaine étape consiste à créer un utilisateur qui puisse se connecter à OpenVAS Manager.

# openvas-check-setup
...
ERROR: No users found. You need to create at least one user 
       to log in.
It is recommended to have at least one user with role Admin.
FIX: create a user by running 'openvasmd --create-user=<name>
     --role=Admin && 
     openvasmd --user=<user> --new-password=<password>'

Attention au mot de passe qui s’affiche en clair dans le terminal.

# openvasmd --create-user=microlinux --role=Admin
User created with password 'd6edadcd-ce9e-45cf-bb3c-4382b6d6e071'.
# openvasmd --user=microlinux --new-password=*********

Récupérer la base SCAP

La prochaine étape consiste à récupérer la base SCAP (Security Content Automation Protocol).

# openvas-check-setup
...
ERROR: No OpenVAS SCAP database found. 
(Tried: /var/lib/openvas/scap-data/scap.db)
FIX: Run a SCAP synchronization script like openvas-scapdata-sync 
     or greenbone-scapdata-sync.

La commande openvas-scapdata-sync nous permet de récupérer la base. Cette opération peut durer une bonne vingtaine de minutes.

# openvas-scapdata-sync
[i] This script synchronizes a SCAP data directory with the 
    OpenVAS one.
...
[i] Updating CVSS scores and CVE counts for CPEs
[i] Updating CVSS scores for OVAL definitions
[i] Updating placeholder CPEs

Récupérer la base CERT

La troisième et dernière base de données nécessaire pour le bon fonctionnement d’OpenVAS, c’est la base CERT.

# openvas-check-setup 
...
ERROR: No OpenVAS CERT database found. 
       (Tried: /var/lib/openvas/cert-data/cert.db)
FIX: Run a CERT synchronization script like openvas-certdata-sync 
     or greenbone-certdata-sync.

De manière similaire, c’est la commande openvas-certdata-sync qui nous permet de récupérer cette base.

# openvas-certdata-sync
[i] This script synchronizes a CERT advisory directory with the 
    OpenVAS one.
...
[i] Updating Max CVSS for CERT-Bund
[i] Updating Max CVSS for DFN-CERT

Greenbone Security Assistant

Le troisième composant du framework, c’est le Greenbone Security Assistant.

# openvas-check-setup
...
ERROR: No Greenbone Security Assistant (gsad) found.
FIX: Please install Greenbone Security Assistant.

Installer le paquet correspondant.

# yum install openvas-gsa

OpenVAS CLI

Enfin, le quatrième et dernier composant du framework, c’est OpenVAS CLI.

# openvas-check-setup
...
ERROR: No OpenVAS CLI (omp) found.
FIX: Please install OpenVAS CLI.

Là aussi, il suffit d’installer le paquet correspondant.

# yum install openvas-cli

Activer et démarrer les services

Le service openvas-scanner est déjà activé et lancé, mais il nous manque encore les deux autres.

# openvas-check-setup
...
ERROR: OpenVAS Manager is NOT running!
FIX: Start OpenVAS Manager (openvasmd).
ERROR: Greenbone Security Assistant is NOT running!
FIX: Start Greenbone Security Assistant (gsad).

Activer et démarrer OpenVAS Manager.

# systemctl enable openvas-manager
# systemctl start openvas-manager
# systemctl status openvas-manager

Procéder de même avec le Greenbone Security Assistant.

# systemctl enable openvas-gsa
# systemctl start openvas-gsa
# systemctl status openvas-gsa

Installer les outils tiers

OpenVAS utilise une série d’outils tiers, qui ne sont pas fournis par une installation par défaut.

# openvas-check-setup
...
WARNING: Could not find pdflatex binary, the PDF report format will 
         not work.
SUGGEST: Install pdflatex.
...
WARNING: Could not find alien binary, LSC credential package 
         generation for DEB based targets will not work.
SUGGEST: Install alien.
WARNING: Could not find makensis binary, LSC credential package 
         generation for Microsoft Windows targets will not work.
SUGGEST: Install nsis.

Installer les paquets manquants comme ceci.

# yum install texlive-latex-bin-bin alien mingw32-nsis

Note: la génération de PDF échoue toujours, malgré l’installation de pdflatex. L’erreur PDF generation failed, most likely due to missing LaTeX packages est dûe au paquet manquant texlive-collection-latexextra, qui n’est pour l’instant pas disponible pour CentOS 7.

Premier essai avec l’assistant

La dernière invocation du script openvas-check-setup nous a certes encore affiché quelques avertissements, mais aucune erreur et rien de prohibitif. Le moment est venu de faire un premier test.

# openvas-check-setup
...
It seems like your OpenVAS-8 installation is OK.

Dans la configuration par défaut, le Greenbone Security Assistant écoute sur le port 9443. Étant donné que j’ai installé le serveur et le client sur la même machine, je dois me connecter à https://localhost:9443. L’avertissement sur la connexion non sécurisée est tout à fait normal, vu que j’utilise un certificat SSL auto-signé. Je clique sur Avancé.

OpenVAS

Je clique sur Ajouter une exception.

OpenVAS

Et enfin, je confirme l’exception de sécurité de façon permanente.

OpenVAS

La fenêtre de connexion du Greenbone Security Assistant s’affiche. Je fournis l’identifiant et le mot de passe définis lors de l’installation.

OpenVAS

La prise en main du Greenbone Security Assistant est extrêmement simple. Le champ Quick Start permet de saisir l’adresse IP ou le nom d’hôte d’une machine à scanner. Il peut s’agir d’une machine publique ou d’un poste dans le réseau local. Il est tout à fait possible de scanner plusieurs machines en même temps. Un simple clic sur le lien correspondant à une machine nous amène au rapport de vulnérabilité.

OpenVAS

Voici comment se présente le rapport de sécurité d’une machine. Les vulnérabilités sont classées par ordre de sévérité, et un clic sur chaque lien fournit les détails de la faille en question ainsi que la solution pour y remédier.

OpenVAS

La correction des failles de sécurité trouvées par OpenVAS fera l’objet d’une série d’articles détaillés.

 

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