M22 M24/Session4 2

  • Search
  • Home
  • All
  • Files
  • New
  • Upload
  • Rename
  • Edit
  • History
  • Latest Changes

M22, Session #4

Réaliser les travaux pratiques ci-dessous.

Configuration réseau

Pour accéder aux ressources du réseau, un système hôte doit voir un certain nombre des paramètres de sa pile TCP/IP configurés :

Nom d’hôte
Affecter un nom d’hôte à un système lui fournit une identité vis-à-vis des services du réseau
Nom de domaine
Le nom de domaine est l’identifiant du domaine auquel appartient l’hôte sur internet. Le système de nom de domaine est hiérarchique et permet la définition de sous-domaines.
Configuration IP
Si le réseau ne propose pas de service DHCP, le configuration manuelle comprendra :
  • ladresse IP
  • le masque de sous-réseau
  • Pour permettre un accès à d’autres réseau, l’adresse IP d’une passerelle devra également être configurée
  • Pour faciliter l’accès aux ressources, la configuration de l’adresse IP d’un serveur DNS est préférable.

La configuration IP peut être effectuée temporairement à l’aide de la commande ip. La configuration DNS doit être écrite dans le fichier /etc/resolv.conf. Les commandes ping et dig (ou host à défaut) sont très largement utilisées pour effectuer le diagnostic du fonctionnement IP et DNS.

Pour garantir la pérennité de la configuration IP, celle-ci est également enregistrée dans les fichiers de configuration utilisés à l’initialisation du système pour le démarrage du service réseau :

/etc/hosts
noms des hôtes notables dont la machine elle-même,
/etc/sysconfig/network
(propre à RedHat et ses dérivées) activation du réseau IP avec NETWORKING, enregistrement du nom d’hôte (HOSTNAME) et de l’adresse de la passerelle (GATEWAY),
/etc/sysconfig/network-scripts/ifcfg-eth0
(propre à RedHat et ses dérivées) configuration IP de la première interface ethernet :
DEVICE
nom de la carte
BOOTPROTO
dhcp ou static
HWADDR
adresse matérielle de la carte réseau (MAC)
IPADDR
adresse IP statique
NETMASK
masque de sous-résea
NETWORK
adresse du réseau (optionnel car elle peut être déduite des deux précédents paramètres)
BROADCAST
adresse de diffusion (optionnel également, pour la même raison)
ONBOOT
activation de la carte au démarrage

Exemple :

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:11:22:33:44:55"
IPADDR="172.17.1.1"
NETMASK="255.0.0.0"
BROADCAST="172.255.255.255"
ONBOOT="yes"

SSH, le Secure SHell

Présentation générale

SSH est à la fois un protocole réseau et une application. Ils permettent d’obtenir — en toute sécurité — un shell (ou interpréteur de commandes) à distance sur une machine proposant ce service (c’est-à-dire sur laquelle « tourne » la partie serveur de l’application).

Il faut — évidemment — disposer d’un compte sur le serveur distant ; alors il est possible de s’authentifier avec un mot de passe (si le serveur le permet), voire — mieux ! — en utilisant une clé de chiffrement asymétrique.

Vulgarisation du mécanisme cryptographique

Les principes de base sont les suivants :

  1. Un utilisateur dispose d’une paire de clé :
    • une clé publique (qui peut/doit être distribuée)
    • et une autre privée (qui doit rester secrète).
  2. Ce que la clé publique chiffre, la clé privée le déchiffre : ce mécanisme garantit la confidentialité.
  3. Ce que la clé privée chiffre, la clé publique le déchiffre : ce mécanisme permet l’authentification.

Initialisation du sytème

Au démarrage, le BIOS se charge de lire le MBR (Master Boot Record), d’une taille de 512 octets. La routine de démarrage contenue dans le MBR (avec la table des partitions) lance le chargeur d’amorçage, et ce dernier à son tour lance le noyau (kernel) du système d’exploitation en usage sur l’ordinateur.

Un disque RAM d’initialisation (image disque montée en mémoire vive) permet d’avoir un noyau minimal, les pilotes requis au fonctionnement du système étant chargés par le noyau depuis le disque monté en RAM.

Le noyau exécute ensuite un premier processus init (PID 1) qui se charge de l’initialisation séquentielle du système et des services. Le programme init issu dUnix System V (à ne pas confondre à celui des BSD) est compatible avec la majorité des distributions Linux. Cependant, certaines utilisent des versions alternatives, comme upstart sur Ubuntu.

System V init

Le fichier de configuration dinit est /etc/inittab définit le niveau de fonctionnement attendu du système (runlevel), situé entre 0 et 6 (0 : arrêt, 1 : monoutilisateur, 2 à 5 : personnalisable, 6 : redémarrage) auquel sont associés des programmes et services à démarrer et arrêter. À chaque runlevel correspond un répertoire /etc/rcX.d qui contient des liens symboliques vers des scripts situés dans /etc/init.d. Les scripts cibles sont lancés suivant l’ordre indiqué par le nom de leur lien, et avec un argument correspondant à l’action souhaitée (S : start, K : kill).

Systemd

Aujourd’hui la plupart des distributions (dans l’ordre chronologique : Gentoo, Debian, Archlinux, openSuse, Mandriva, Fedora) ont migré vers systemd qui permet une gestion plus fine des dépendances entre les services, un démarrage en parallèle, une utilisation moindre des scripts et la prise en charge des groupes de contrôle (cgroups).

Là où le processus init de system V utilisait un démarrage séquentiel des services, systemd assure un démarrage parallèle des services, tout en gérant les dépendances à un niveau très fin. Ainsi si le service A requiert que le service B ait ouvert une socket, systemd sera capable de démarrer A dès que la socket est disponible, potentiellement avant la fin du démarrage de B.

systemd introduit plusieurs niveaux pour déterminer la disponibilité d’un service :

  • ouverture d’une socket
  • utilisation de dbus
  • présence d’un périphérique
  • présence d’un chemin dans le système de fichiers
  • notion temporelle

Services

Le services sont généralement démarrés par le gestionnaire d’initialisation. Toutefois, il est possible de les gérer à la main depuis la ligne de commande.

System V init

Les scripts utilisés par init sont situés dans le répertoire /etc/init.d et permettent d’arrêter ou démarrer manuellement les services. La commande service, si elle est présente, permet de réaliser ces mêmes opérations.

Systemd

systemd est piloté par la commande systemctl. Les services sont gérés par systemd sous la forme d’unité de type… service. Il existe d’autres types d’unités (target, mount, automount, device, slice, path, scope, socket, timer, snapshot, swap).

La commande systemctl -t service list-units permet d’afficher les services connus. La commande systemctl start <nom_du_service> permet de démarrer le service, systemctl status <nom_du_service> d’afficher son état, systemctl enable <nom_du_service> d’activer le démarrage automatique du service…

Un autre type d’unité essentiel est target. La cible par défaut, visée au démarrage du système est généralement un lien symbolique. La commande systemctl show -p Wants -p Requires <target> permet d’afficher les besoins et pré-requis d’une cible.

De nombreux autres concepts et commandes étendent la portée de systemd (journalctl, systemd-cgls, systemd-cgtop)

Pour aller (beaucoup) plus loin : Blog de Lennart Poettering, développeur du controversé systemd

Services réseaux

Les services parmi les plus utiles sont généralement rendus accessibles au travers du réseau IP. Leur bon fonctionnement requiert une configuration réseau opérante.

Le bon fonctionnement des services peut être vérifié :

  • en vérifiant l’exécution effective du (ou des) processus avec ps,
  • en vérifiant que le (ou les) processus sont bien « à l’écoute » du réseau le cas échéant à l’aide de la commande ss (socket statistics),
  • en vérifiant les messages dans les journaux liée à l’activité générale ou propres au service.

Travaux pratiques

TP #2 : Configuration réseau de la VM

  1. Vérifier l’adresse IP de la carte ethernet de votre VM et sa validité. Quelles commandes avez-vous utilisées ? (Récupérer — si nécessaire et au préalable — une configuration IP complète en lançant le client DHCP dhclient.)
  2. Vérifier la route par défaut et sa validité. Quelles commandes avez-vous utilisées ?
  3. Vérifier la configuration DNS et sa validité. Quelles commandes avez-vous utilisées ?
  4. Configurer le système pour utiliser le nom et l’adresse IP qui lui ont été attribués dans le domaine de nom lpasrsi.net et le réseau IP 172.17.0.0/16. Quelles commandes avez-vous utilisées ?
  5. Configurer le système pour rendre cette configuration persistante. Quels fichiers avez-vous modifiés ? Quel est leur contenu ?

TP #3 : Connexion SSH à la VM

  1. Générer une paire de clés sans utiliser de passphrase
  2. Afficher le contenu de la clé privée (~/.ssh/id_rsa) et les permissions sur le fichier
  3. Supprimer la paire de clés
  4. Générer une paire de clés en veillant bien à chiffrer la clé privée par une passphrase
  5. Afficher le contenu de la clé privée (~/.ssh/id_rsa) et les permissions sur le fichier
  6. Copier votre clé publique sur de le répertoire adhoc sur votre VM. Il existe plusieurs solutions impliquant par exemple ssh-copy-id, scp, copier/coller, voire un tiers de confiance ou disposant des accès requis
  7. Se connecter en SSH sur la VM depuis le compte et le poste de travail ayant servi à générer la paire de clé.
  8. Se connecter en SSH sur le conteneur depuis un autre compte et un autre poste de travail que celui ayant servi à générer la paire de clé.

TP #4 : Sécurisation SSH

Afin de limiter la visibilité du service SSH, on souhaite déporter le service sur un port atypique (ex : 1337)

Préliminaire : pour éviter tout conflit de ce changement de configuration avec les outils de sécurité intégrés

  • Désactiver selinux : sudo setenforce 0
  • Arrêter et désactiver le parefeu : sudo systemctl stop firewalld

Première phase :

  1. Décomposer cet objectif fonctionnel en étapes techniques.
  2. Pour chaque étape, fournir la (suite de) commande qui permettra de vérifier le bon déroulement.

Deuxième phase, en possession d’une procédure donnée :

  1. Mettre en œuvre les étape une-à-une telles que le précise la procédure en effectuant scrupuleusement chaque vérification.
  2. Constater les éventuelles dérives, les expliquer et proposer une remédiation.

Autres éléments de sécurisation :

  1. Après avoir généré une paire de clé sur votre poste de travail et publié votre clé publique sur le serveur, configurer SSH pour interdire la connexion par mot de passe et sécuriser ainsi un peu plus le service. Quels directives de configuration avez-vous mis en place ?
  2. Quelles autres solutions — organisationnelles ou techniques — peut-on mettre en œuvre pour sécuriser le service ?
  3. Mettre en œuvre les mesures techniques.

TD #3 : Identités

  1. Expérimenter les commandes who, id, ls -ld ~, getent passwd asrsi, getent group users, getent passwd www-data, getent group www-data
  2. Soit une application web installée dans un sous-répertoire de l’espace personnel l’utilisateur asrsi. Celui-ci doit pouvoir lire et écrire tous les fichiers.
  3. Le serveur web (uid www-data) doit pouvoir écrire dans le sous-répertoire data de l’application. Quelle est la solution à cette problématique ?
  4. Écrivez un script qui prend une liste de sous-répertoires en entrée et qui applique la solution du point 3.

TP #5 : Application Web

Préliminaire : pour éviter tout conflit de ce changement de configuration avec les outils de sécurité intégrés

  • Désactiver selinux : sudo setenforce 0
  • Arrêter et désactiver le parefeu : sudo systemctl stop firewalld
  1. Installer le serveur web sur votre VM (paquetage apache2)
  2. Installer une application Web (Dokuwiki par exemple) en suivant les consignes du TD #3
  3. Décrire la méthodologie utilisée et les étapes qui permettent de faire fonctionner l’application.

TP #6 : Serveur DNS

Préliminaire : pour éviter tout conflit de ce changement de configuration avec les outils de sécurité intégrés

  • Désactiver selinux : sudo setenforce 0
  • Arrêter et désactiver le parefeu : sudo systemctl stop firewalld
  1. Installer les paquetages bind et bind-utils
  2. Éditer le fichier de configuration /etc/named.conf
    • activer le service sur l’adresse IP de la carte ethernet (listen-on)
    • identifier le répertoire de travail (directory)
    • autoriser les requêtes depuis l’ensemble du réseau (allow-query)
    • ajouter une zone lpasrsi.net secondaire, le maître étant 172.17.100.128 :
zone "lpasrsi.net" IN {
    type slave;
    file "lpasrsi.net";
    masters { 172.17.100.128; };
};
  1. [@3] Utiliser les commandes named-checkconf et named-checkzone pour valider la configuration
  2. Démarrer le service named
  3. Dépanner les éventuels problèmes avec la commande systemctl status -l named
  4. Vérifier son bon fonctionnement avec la commande dig
  5. Modifier la configuration DNS pour utiliser le service
  6. Activer le service pour le prochain démarrage

Contenus additionnels

Distributions Linux

  • Une distribution Linux est définie par le dispositif d’installation du système qu’elle propose, l’environnement graphique fourni par défaut à l’utilisateur, le système de gestion des paquetages logiciels qu’elle utilise, les programmes propres au format de paquetage afférent, les logiciels spécifiques qui l’accompagne, le support aux utilisateurs et ses modalités (communautaire, commercial, … ), la distribution de binaires ou des sources (rolling release), …
  • Il existe une grande variété de distributions Linux, qu’il est possible de trier suivant différents critères : parts de marché, format de paquetage des logiciels, facilité de mise en œuvre, fréquence de mise à jour, qualité, stabilité, positionnement par rapport aux principes fondamentaux du logiciel libre, …
  • Les principaux formats de paquetages sont DEB (Debian) et RPM (RPM Package Manager).
  • Certaines distributions s’appuient sur tout ou partie de distributions préexistantes (ex : Ubuntu issue de Debian), d’autres encore sont des versions partielles, de développement ou recompilées de distributions préexistantes. Aussi, il est possible de définir la filiation des distributions (non exhaustive) :
    Slackware
    la plus ancienne distribution GNU/Linux a servi de base à Suse, la première distribution commerciale, devenue Suse Linux Enterprise et OpenSuse sa version libre et communautaire.
    Debian
    distribution non commerciale, régie par un contrat social, supportant de très nombreuses architectures, au cycle de développement très rigoureux (rigide ?), extrêmement stable, est à la base de la distribution grand public Ubuntu, ayant elle-même généré de nombreux dérivés qui souvent reviennent à une base Debian (Backtrack devenu Kali Linux, Mint, …).
    Red Hat
    dont sont issues RHEL et Fedora, sa version communautaire au cycle de développement rapide et CentOS, version strictement recompilée de ses sources.

Voir aussi :

  • Linux from scratch

Gestion des paquetages logiciels

Le gestionnaire de paquetages des distributions de la lignée Redhat est yum (Yellowdog Updater Modified). C’est une surcouche de l’outil de gestion de paquetage unitaire rpm qui permet de gérer :

  • plusieurs sources de paquetages,
  • la mise à jour des listes de paquetages fournis par les sources (yum check-update),
  • la gestion de la liste globale des paquetages (yum search ou yum provides par exemple),
  • les dépendances entre paquetages,
  • le téléchargement des paquetages,
  • l’installation de nouveaux paquetages (yum install),
  • la mise à jour des paquetages eux-même (yum update),
  • la mise à jour de l’ensemble du système (yum upgrade).

Journalisation

Tout système Linux enregistre son activité et celle des processus fonctionnant en tâche de fond dans des journaux (log). Ceux-ci sont disponibles sous forme de simples fichiers dans le répertoire /var/log.

Un processus dédié à la journalisation, appelé démon de journalisation système (le plus souvent syslogd) est chargé de recevoir les enregistrements à journaliser. La cible d’un enregistrement est déterminée par la configuration du démon.

La journalisation des événements est une technique de sécurité majeure. Elle permet d’effectuer des analyses diverses, en temps réel ou a posteriori, en corrélant les journaux avec d’autres événements. La mise en œuvre d’une centralisation de la journalisation permet d’accéder à des niveaux fonctionnels et de sécurité optimaux.

Sur un système enregistrant les événements dans des fichiers, la connaissance des commandes de recherche et de manipulation de texte et de fichiers texte est essentiel pour l’exploitation des journaux : grep et tail principalement ; voire cut, awk, ou – mieux encore – perl.

Last edited by Olm, 2017-10-20 15:03:09

Delete this Page