Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 813 minIntermédiaire

Installer des logiciels avec apt et automatiser les mises à jour

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • lire les sources de paquets de Debian 13 au format deb822 ;
  • installer, mettre à jour, retirer et interroger des paquets ;
  • mettre à jour un serveur proprement ;
  • activer et contrôler les mises à jour de sécurité automatiques.

3 exercices corrigés

apt est le gestionnaire de paquets de Debian et d'Ubuntu : il télécharge les logiciels depuis des dépôts signés, installe leurs dépendances et applique leurs mises à jour. Ce chapitre explique ce qu'est un paquet et un dépôt, le format des sources de Debian 13, les commandes apt et dpkg du quotidien, et la mise en place des mises à jour de sécurité automatiques avec unattended-upgrades.

Paquets, dépendances et dépôts

Un paquet .deb est une archive qui contient les fichiers d'un logiciel, des scripts d'installation et une fiche : nom, version, description et dépendances (les autres paquets nécessaires). Installer nginx demande par exemple nginx-common et quelques bibliothèques : apt les calcule et les installe avec lui.

Les paquets sont publiés dans des dépôts (repositories) : des serveurs HTTP qui hébergent les paquets et un index signé par Debian. apt vérifie cette signature avec les clés installées dans /usr/share/keyrings/ : un miroir piraté ou une interception ne peuvent pas te faire installer un paquet modifié.

Deux outils se partagent le travail :

  • dpkg installe, retire et liste les paquets présents sur la machine, sans rien télécharger ni résoudre de dépendances ;
  • apt gère les dépôts, télécharge, calcule les dépendances et appelle dpkg. Les anciennes commandes apt-get et apt-cache font la même chose et restent utilisées dans les scripts, car leur sortie ne change pas d'une version à l'autre.

Les sources de paquets sur Debian 13

Sur une installation neuve, l'installeur de Debian 13 écrit encore les dépôts dans /etc/apt/sources.list, à l'ancien format d'une ligne par dépôt (deb http://deb.debian.org/debian trixie main non-free-firmware). APT 3.0 propose le format deb822 : un bloc de lignes Clé: valeur par dépôt, dans un fichier .sources de /etc/apt/sources.list.d/. sudo apt modernize-sources convertit l'ancien fichier (et en garde une copie .bak) ; sur srv-web, on obtient /etc/apt/sources.list.d/debian.sources :

text
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
ChampSens
Typesdeb pour les paquets à installer, deb-src pour leurs sources
URIsL'adresse du dépôt ; deb.debian.org redirige vers un miroir proche (le http suffit : apt vérifie la signature de l'index)
Suitestrixie (la version), trixie-updates (correctifs urgents hors sécurité), trixie-security (correctifs de sécurité, sur leur propre serveur)
Componentsmain (logiciels libres), contrib et non-free (logiciels qui dépendent de non-libre ou non libres), non-free-firmware (micrologiciels de matériel)
Signed-ByLa clé qui doit avoir signé ce dépôt, et elle seule

L'ancien format fonctionne toujours mais est déprécié ; sudo apt modernize-sources le convertit, sur une machine neuve comme sur une machine mise à niveau depuis Debian 12.

Un dépôt d'éditeur. Beaucoup de logiciels de la maquette (Zabbix, Grafana, Wazuh…) publient leur propre dépôt, plus à jour que celui de Debian. La méthode est toujours la même : télécharger la clé publique de l'éditeur dans /etc/apt/keyrings/, déclarer le dépôt dans un fichier .sources avec Signed-By vers cette clé, puis apt update. Chaque éditeur donne les valeurs exactes dans sa documentation ; suis-la, et n'ajoute jamais une clé qui vaudrait pour tous les dépôts.

Les commandes apt du quotidien

CommandeEffet
sudo apt updateTélécharge les index des dépôts : à faire avant toute installation ou mise à jour
apt list --upgradablePaquets pour lesquels une mise à jour existe
sudo apt upgradeInstalle les mises à jour sans retirer de paquet
sudo apt full-upgradeInstalle les mises à jour, en ajoutant ou retirant des paquets si une dépendance l'exige (nouvelle version du noyau, changement de version)
sudo apt install nginxInstalle un paquet et ses dépendances
sudo apt install ./outil_1.2_amd64.debInstalle un fichier .deb local avec ses dépendances
sudo apt remove nginxDésinstalle, en gardant les fichiers de configuration
sudo apt purge nginxDésinstalle et supprime la configuration
sudo apt autoremoveRetire les dépendances devenues inutiles (anciens noyaux compris)
apt search pare-feuCherche dans les noms et descriptions
apt show nginxFiche d'un paquet : version, dépendances, description
apt policy nginxVersion installée, version candidate et dépôt d'origine
sudo apt-mark hold nginxBloque un paquet à sa version actuelle (unhold pour lever)
sudo apt cleanVide le cache des paquets téléchargés (/var/cache/apt/archives)

Et pour interroger ce qui est installé :

CommandeQuestion
dpkg -lQuels paquets sont installés ? (`dpkg -l
dpkg -L nginx-commonQuels fichiers ce paquet a-t-il installés ?
dpkg -S /usr/sbin/nginxQuel paquet a installé ce fichier ?
dpkg -s openssh-serverÉtat et version d'un paquet
zgrep -h " install " /var/log/dpkg.log*Historique des installations (/var/log/apt/history.log donne les commandes apt lancées)

Dans dpkg -l, les deux premières lettres disent l'état : ii = installé ; rc = retiré, mais fichiers de configuration encore présents (un apt purge les supprime).

Mettre à jour un serveur proprement

Sur un serveur, une mise à jour se prépare :

  1. lire ce qui va changer : sudo apt update && apt list --upgradable ;
  2. prendre un instantané de la VM (ou vérifier la dernière sauvegarde) ;
  3. appliquer : sudo apt full-upgrade ;
  4. redémarrer les services concernés, et la machine si le noyau, systemd ou une bibliothèque centrale comme libc6 ou OpenSSL a changé ;
  5. vérifier que les services répondent (systemctl --failed, test du site).

Le paquet needrestart (sudo apt install needrestart) automatise l'étape 4 : après chaque mise à jour, il liste les services qui utilisent encore une ancienne version d'une bibliothèque et propose de les redémarrer, et il signale quand le noyau en cours n'est plus le plus récent.

Le passage d'une version de Debian à la suivante (de 13 à 14) n'est pas une mise à jour ordinaire : il se prépare avec les notes de publication de la nouvelle version, qui donnent la procédure et les changements à anticiper.

Les mises à jour de sécurité automatiques

La plupart des intrusions exploitent des failles dont le correctif existait déjà. Pour qu'un serveur reçoive ses correctifs de sécurité sans attendre qu'un technicien y pense, Debian fournit unattended-upgrades. Il n'est pas installé par défaut sur une installation Debian classique ; Ubuntu Server, lui, l'installe et l'active d'office.

bash
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades    # répondre « Oui »

La seconde commande écrit le fichier /etc/apt/apt.conf.d/20auto-upgrades, qui active la mise à jour quotidienne des index et l'installation automatique :

text
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Deux minuteries systemd déclenchent le travail : apt-daily.timer télécharge les index et les paquets, apt-daily-upgrade.timer installe, le matin, à une heure tirée au hasard pour ne pas surcharger les miroirs. systemctl list-timers 'apt-daily*' affiche leur prochaine exécution.

Ce qui est installé est défini dans /etc/apt/apt.conf.d/50unattended-upgrades. Par défaut, trois origines sont autorisées : les versions intermédiaires de Debian (label=Debian) et les deux formes du dépôt de sécurité (label=Debian-Security). Les dépôts d'éditeurs et les backports sont exclus : leurs mises à jour restent manuelles, ce qui est souvent voulu pour une application métier.

text
Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename},label=Debian";
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};

Pour régler le comportement, ne modifie pas ce fichier (une mise à jour du paquet pourrait le remplacer) : crée /etc/apt/apt.conf.d/52unattended-upgrades-local, lu après lui. Chez Sorbier, sur srv-web :

text
// Prévenir l'équipe en cas de problème ou de mise à jour
Unattended-Upgrade::Mail "informatique@sorbier.example";
Unattended-Upgrade::MailReport "on-change";
// Retirer les dépendances devenues inutiles
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Redémarrer seul si une mise à jour l'exige, à 4 h du matin
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
// Ne jamais toucher à ces paquets automatiquement
Unattended-Upgrade::Package-Blacklist {
    "nginx";
};

L'envoi de courriels suppose un agent de messagerie configuré sur la machine (exim4 ou postfix en relais vers le serveur de messagerie). Sans lui, les rapports restent dans les journaux.

Vérifier. sudo unattended-upgrade --dry-run --debug simule une exécution et affiche ce qui serait installé ; les exécutions réelles sont journalisées dans /var/log/unattended-upgrades/unattended-upgrades.log, et /var/log/dpkg.log garde la trace de chaque paquet.

Le redémarrage automatique est un choix : acceptable sur srv-web si le site peut s'interrompre deux minutes à 4 h du matin, à éviter sur un serveur dont dépendent d'autres machines à toute heure, qu'on redémarre alors pendant une fenêtre de maintenance prévue. La supervision (cours Supervision) peut surveiller les mises à jour en attente sur tout le parc.

Ubuntu : snap et Ubuntu Pro

Ubuntu utilise apt exactement comme Debian, avec ses propres dépôts (main, universe, restricted, multiverse) dans /etc/apt/sources.list.d/ubuntu.sources depuis la version 24.04. Deux différences :

  • snap, un second système de paquets, autonomes et mis à jour automatiquement par le démon snapd : snap list, sudo snap install <nom>, sudo snap refresh. Certains logiciels n'existent qu'en snap sur Ubuntu ;
  • Ubuntu Pro (sudo pro attach <jeton>) étend les correctifs de sécurité à universe et sur dix ans, et ajoute Livepatch, qui corrige le noyau sans redémarrage.

Exercices

Exercice 1 sur 3 La bonne commande Réussi À revoir

Donne la commande pour :

  1. savoir quelle version de openssh-server est installée, et de quel dépôt viendrait la mise à jour ;
  2. retrouver le paquet qui a installé /usr/bin/dig ;
  3. désinstaller apache2, installé par erreur, sans laisser sa configuration ;
  4. empêcher la mise à jour de nginx pendant une semaine de tests ;
  5. installer un fichier outil-inventaire_2.1-1_amd64.deb téléchargé dans le dossier courant.
Voir la réponseMasquer la réponse de l'exercice 1
  1. apt policy openssh-server : la ligne « Installé » donne la version en place, « Candidat » celle qui serait installée, et la liste qui suit, les dépôts qui la proposent.
  2. dpkg -S /usr/bin/dig : réponse bind9-dnsutils: /usr/bin/dig.
  3. sudo apt purge apache2, puis sudo apt autoremove pour ses dépendances devenues inutiles.
  4. sudo apt-mark hold nginx ; après les tests, sudo apt-mark unhold nginx. apt-mark showhold liste les paquets bloqués.
  5. sudo apt install ./outil-inventaire_2.1-1_amd64.deb. Le ./ est indispensable : sans lui, apt chercherait un paquet de ce nom dans les dépôts.

Tu avais trouvé ?

Exercice 2 sur 3 Lire la configuration des mises à jour automatiques Réussi À revoir

Sur srv-journaux, le fichier 20auto-upgrades contient :

text
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "0";
  1. Les correctifs de sécurité sont-ils installés automatiquement ?
  2. Un dépôt Zabbix est déclaré sur la machine. Ses mises à jour seront-elles installées automatiquement une fois le réglage corrigé ?
  3. Comment vérifier, sans rien installer, ce que ferait unattended-upgrades ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Non. Les index sont mis à jour chaque jour (Update-Package-Lists "1"), mais l'installation est désactivée (Unattended-Upgrade "0"). Les correctifs attendent qu'un technicien lance apt upgrade. Correction : mettre "1", ou relancer sudo dpkg-reconfigure -plow unattended-upgrades.
  2. Non, pas avec la configuration par défaut : seules les origines Debian et Debian-Security sont autorisées. Pour inclure le dépôt Zabbix, il faudrait ajouter son origine à Origins-Pattern dans 52unattended-upgrades-local. On ne le fait pas forcément : une mise à jour de l'outil de supervision mérite d'être testée.
  3. sudo unattended-upgrade --dry-run --debug.

Tu avais trouvé ?

Exercice 3 sur 3 Une politique de mise à jour Réussi À revoir

Antoine Mercier te demande une politique de mise à jour pour les deux serveurs Debian : srv-web (exposé en DMZ, interruption de quelques minutes acceptable la nuit) et srv-journaux (reçoit en continu les journaux de toutes les machines). Propose les réglages, en justifiant.

Voir la réponseMasquer la réponse de l'exercice 3
  • Les deux serveurs : unattended-upgrades installé et actif pour les origines Debian et Debian-Security, rapport par courriel on-change, needrestart installé, mises à jour des dépôts d'éditeurs faites à la main après test.
  • srv-web : exposé, c'est le plus menacé ; il doit recevoir ses correctifs au plus vite. Automatic-Reboot "true" avec Automatic-Reboot-Time "04:00" : le site s'interrompt deux minutes la nuit, ce qui est acceptable.
  • srv-journaux : correctifs automatiques aussi, mais sans redémarrage automatique, car un redémarrage fait perdre les messages envoyés pendant l'interruption si les émetteurs n'ont pas de file d'attente. Redémarrage manuel, pendant une fenêtre de maintenance hebdomadaire annoncée, quand needrestart ou un nouveau noyau l'exige.
  • Contrôle : la supervision signale les serveurs qui ont des mises à jour en attente depuis plus de sept jours, ou qui attendent un redémarrage.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Processus et services : ps, kill, systemctlRevoir le sommaire du cours