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 :
dpkginstalle, retire et liste les paquets présents sur la machine, sans rien télécharger ni résoudre de dépendances ;aptgère les dépôts, télécharge, calcule les dépendances et appelledpkg. Les anciennes commandesapt-getetapt-cachefont 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 :
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
| Champ | Sens |
|---|---|
Types | deb pour les paquets à installer, deb-src pour leurs sources |
URIs | L'adresse du dépôt ; deb.debian.org redirige vers un miroir proche (le http suffit : apt vérifie la signature de l'index) |
Suites | trixie (la version), trixie-updates (correctifs urgents hors sécurité), trixie-security (correctifs de sécurité, sur leur propre serveur) |
Components | main (logiciels libres), contrib et non-free (logiciels qui dépendent de non-libre ou non libres), non-free-firmware (micrologiciels de matériel) |
Signed-By | La 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
| Commande | Effet |
|---|---|
sudo apt update | Télécharge les index des dépôts : à faire avant toute installation ou mise à jour |
apt list --upgradable | Paquets pour lesquels une mise à jour existe |
sudo apt upgrade | Installe les mises à jour sans retirer de paquet |
sudo apt full-upgrade | Installe 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 nginx | Installe un paquet et ses dépendances |
sudo apt install ./outil_1.2_amd64.deb | Installe un fichier .deb local avec ses dépendances |
sudo apt remove nginx | Désinstalle, en gardant les fichiers de configuration |
sudo apt purge nginx | Désinstalle et supprime la configuration |
sudo apt autoremove | Retire les dépendances devenues inutiles (anciens noyaux compris) |
apt search pare-feu | Cherche dans les noms et descriptions |
apt show nginx | Fiche d'un paquet : version, dépendances, description |
apt policy nginx | Version installée, version candidate et dépôt d'origine |
sudo apt-mark hold nginx | Bloque un paquet à sa version actuelle (unhold pour lever) |
sudo apt clean | Vide le cache des paquets téléchargés (/var/cache/apt/archives) |
Et pour interroger ce qui est installé :
| Commande | Question |
|---|---|
dpkg -l | Quels paquets sont installés ? (`dpkg -l |
dpkg -L nginx-common | Quels fichiers ce paquet a-t-il installés ? |
dpkg -S /usr/sbin/nginx | Quel 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 :
- lire ce qui va changer :
sudo apt update && apt list --upgradable; - prendre un instantané de la VM (ou vérifier la dernière sauvegarde) ;
- appliquer :
sudo apt full-upgrade; - redémarrer les services concernés, et la machine si le noyau,
systemdou une bibliothèque centrale commelibc6ou OpenSSL a changé ; - 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.
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 :
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.
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 :
// 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é àuniverseet 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 :
- savoir quelle version de
openssh-serverest installée, et de quel dépôt viendrait la mise à jour ; - retrouver le paquet qui a installé
/usr/bin/dig; - désinstaller
apache2, installé par erreur, sans laisser sa configuration ; - empêcher la mise à jour de
nginxpendant une semaine de tests ; - installer un fichier
outil-inventaire_2.1-1_amd64.debtéléchargé dans le dossier courant.
Voir la réponseMasquer la réponse de l'exercice 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.dpkg -S /usr/bin/dig: réponsebind9-dnsutils: /usr/bin/dig.sudo apt purge apache2, puissudo apt autoremovepour ses dépendances devenues inutiles.sudo apt-mark hold nginx; après les tests,sudo apt-mark unhold nginx.apt-mark showholdliste les paquets bloqués.sudo apt install ./outil-inventaire_2.1-1_amd64.deb. Le./est indispensable : sans lui,aptchercherait 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 :
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "0";
- Les correctifs de sécurité sont-ils installés automatiquement ?
- 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é ?
- Comment vérifier, sans rien installer, ce que ferait
unattended-upgrades?
Voir la réponseMasquer la réponse de l'exercice 2
- 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 lanceapt upgrade. Correction : mettre"1", ou relancersudo dpkg-reconfigure -plow unattended-upgrades. - 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-Patterndans52unattended-upgrades-local. On ne le fait pas forcément : une mise à jour de l'outil de supervision mérite d'être testée. 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-upgradesinstallé et actif pour les origines Debian et Debian-Security, rapport par courrielon-change,needrestartinstallé, 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"avecAutomatic-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, quandneedrestartou 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é ?