Supervision - Contrôle TP - Jeudi 13 février 2025

Environnement de travail

Créez un dossier ~/r5b08-ctp et copiez-y le fichier ctp/Vagrantfile fourni ici (son contenu est également présent en fin de sujet).

Construisez dans ce dossier l'environnement de travail avec vagrant en utilisant le fichier fourni.

L'environnement est celui des TP de la ressource :

  • 3 machines
    • moniteur d'adresse 192.168.62.10
    • poste1 d'adresse 192.168.62.21
    • poste2 d'adresse 192.168.62.22
  • l'utilisateur root de chacune des machines autorise les connexions ssh avec votre clé publique par défaut (celle dans ~/.ssh/id_rsa.pub)
  • les commandes de la bibliothèque net-snmp sont installées avec les MIBS standards sur moniteur
  • poste1 et poste2 ont un agent SNMP opérationnel
    • avec lecture comme communauté ro
    • avec ecriture comme communauté rw
    • qui répond pour les requêtes sous l'OID 1.3.6.1.2

Modifiez votre configuration ssh de façon à ce que :

  • ssh moniteur vous connecte root sur moniteur sans interaction
  • ssh poste1 vous connecte root sur poste1 sans interaction
  • ssh poste2 vous connecte root sur poste2 sans interaction

Utilisation net-snmp

Il existe une imprimante sur le réseau du département dont l'adresse ip est 172.18.48.121.

Cette imprimante offre un accès SNMP :

  • la communauté ro est fixée à public en version snmpv2c ;
  • elle offre un accès à tous les objets définis dans la mib /home/public/r5b08/ctp/HP-LASERJET-COMMON-MIB.mib ;
  • cette mib crée un module nommé HP-LASERJET-COMMON-MIB.

À partir de ces informations et en utilisant les commandes de la librairie net-snmp depuis votre moniteur :

  1. déterminez la commande permettant de récupérer le nombre total de page imprimés sur le media 2 (nommé Plain) de l'imprimante ;
  2. déterminez ce nombre ;
  3. placez dans le fichier texte /etc/ctp la réponse aux deux questions précédentes (une réponse par ligne).

Installation outils de métrologie

  1. Installer smokeping sur votre moniteur ;
  2. Lire la documentation de smokeping dont au moins :
    • /usr/share/doc/smokeping
    • smokeping_config(5)
    • smokeping::probes::fping(3)
    • smokeping::probes::dns(3)
  3. Fixer les paramètres des bases à 5 sondages de 3 tentatives concurrentes toutes les minutes ;
  4. Configurer smokeping
    1. mettre en place le menu principal sous le nom BUT-B et le titre Contrôle TP avec, par défaut, des aperçus sur la dernière heure et des détails sur la dernière heure, le dernier quart d'heure et la dernière minute ;
    2. mettre en place un sous-menu Réseau avec des sondes FPing sur poste1 et poste2 ;
    3. mettre en place un sous-menu DNS avec des sondes DNS pour la résolution de www.ffdn.org et de www.univ-lille.fr par le serveur DNS d'adresse 172.18.48.31.

Sauvegarde déduplicative

  1. Installez les paquets borgbackup et borgbackup-doc sur votre moniteur
  2. Lisez au minimum la documentation de la commande borg(1)
  3. Créez un dépôt (repository) dans /srv/borg qui devra être chiffré avec le mot protection.
  4. Créez une archive, nommée ctp, dans votre dépôt contenant une sauvegarde de l'intégralité du dossier /etc.

Retour

En fin de TP copiez une archive au format tar.gz dont le nom doit être de la forme LOGIN-MACHINE.tar.gz (avec LOGIN remplacé par votre identifiant et MACHINE par moniteur, poste1 ou poste2) dans le répertoire /home/public/r5b08/etu. Ces archives doivent contenir l'intégralité du répertoire /etc et /srv de moniteur, ainsi que l'intégralité du répertoire /etc de poste1 et poste2

Les commandes suivantes, regroupées dans le script shell recuperer-ctp permettent de faire tout ça depuis votre machine physique :

login=$(id -un)
ssh moniteur "cd / && tar -zcf $login.tar.gz etc srv"
scp moniteur:/$login.tar.gz /home/public/r5b08/etu/$login-moniteur.tar.gz
ssh poste1 "cd / && tar -zcf $login.tar.gz etc srv"
scp poste1:/$login.tar.gz /home/public/r5b08/etu/$login-poste1.tar.gz
ssh poste2 "cd / && tar -zcf $login.tar.gz etc srv"
scp poste2:/$login.tar.gz /home/public/r5b08/etu/$login-poste2.tar.gz

Annexes

Vagrantfile

Vagrant.configure("2") do |config|

  # configuration virtualbox
  config.vm.provider "virtualbox" do |vbox|
    vbox.linked_clone = true
  end
  config.vm.box = "debian/bookworm64"

  # accès par nom
  $hosts = <<-EOF
    grep -q moniteur /etc/hosts || echo "192.168.62.10 moniteur" >>/etc/hosts
    grep -q poste1 /etc/hosts || echo "192.168.62.21 poste1" >>/etc/hosts
    grep -q poste2 /etc/hosts || echo "192.168.62.22 poste2" >>/etc/hosts
  EOF
  config.vm.provision "shell", run: "always", inline: $hosts

  # Montage dossier
  config.vm.synced_folder ".", "/vagrant", owner: "root", group: "root", mount_options: ["uid=0", "gid=0"]

  # installation des outils
  $outils = <<-EOF
    export DEBIAN_FRONTEND=noninteractive
    sed -i 's/main.*$/main contrib non-free-firmware non-free/' /etc/apt/sources.list
    apt-get -qy update
    apt-get -qy install file less netcat-openbsd net-tools nmap screen emacs vim gnuplot rrdtool xauth
    apt-get -qy clean
  EOF
  config.vm.provision "shell", inline: $outils

  # Accès SSH
  config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "/tmp/id_rsa.pub", run: "always"
  $ssh = <<-EOF
    mkdir -p /root/.ssh
    cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
    rm /tmp/id_rsa.pub
    cat ~vagrant/.ssh/authorized_keys >> /root/.ssh/authorized_keys
  EOF
  config.vm.provision "shell", inline: $ssh, run: "always", privileged: true

  # moniteur
  $superviseur = <<-EOF
  apt-get -qy install snmp snmp-mibs-downloader
  cp /etc/snmp/snmp.conf /etc/snmp/snmp.conf.dpkg
  sed -i -e 's/^mibs :/#mibs :/' /etc/snmp/snmp.conf
  EOF

  $postes = <<-EOF
  apt-get -qy install snmpd
  cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.dpkg
  echo "agentAddress udp:161" >/etc/snmp/snmpd.conf
  echo "rocommunity lecture moniteur 1.3.6.1.2" >>/etc/snmp/snmpd.conf
  echo "rwcommunity ecriture moniteur 1.3.6.1.2" >>/etc/snmp/snmpd.conf
  systemctl restart snmpd
  EOF

  # moniteur
  config.vm.define "moniteur" do |moniteur|
    moniteur.vm.network "private_network", ip: "192.168.62.10"
    moniteur.vm.provision "shell", inline: "hostnamectl hostname moniteur"
    moniteur.vm.provision "shell", inline: $superviseur
  end

  # poste1
  config.vm.define "poste1" do |poste1|
    poste1.vm.network "private_network", ip: "192.168.62.21"
    poste1.vm.provision "shell", inline: "hostnamectl hostname poste1"
    poste1.vm.provision "shell", inline: $postes
  end

  # poste2
  config.vm.define "poste2" do |poste2|
    poste2.vm.network "private_network", ip: "192.168.62.22"
    poste2.vm.provision "shell", inline: "hostnamectl hostname poste2"
    poste2.vm.provision "shell", inline: $postes
  end
end