{{indexmenu_n>20}}
## Automatiser les mises à jour de sécurité
### Préambule
Les failles de sécurité sont un risque majeur pour l'infrastructure. Un exemple emblématique est la récente [vulnérabilité de sudo](https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt), présente depuis plus de 10 ans, qui permet à n'importe quel utilisateur non-privilégié d'obtenir des droits d'administration.
Ce genre de failles est critique : dès qu'elle est rendue publique, des robots commencent à tenter d'exploiter les vulnérabilités sur des plages d'IP et se servent des intrusions pour construire des réseaux de bots, miner des cryptomonnaies ou exfiltrer/chiffrer des données.
Il est donc très désirable d'obtenir les mises à jour de sécurité le plus rapidement possible dès qu'un *patch* est disponible.
Les mises à jour automatique, ça craint, non ? Si ça casse des trucs et qu'on est pas là pour le voir ?
Nos machines tournent sur Debian, une distribution Linux pensée pour la stabilité. L'idée est d'automatiser les mises à jour concernant les **failles de sécurité**. Un dépôt spécial vise à transmettre ces mises à jour, qui sont abondamment testées et n'introduisent pas de nouvelles fonctionnalités.
Il nous semble beaucoup plus souhaitable de garantir le *patch* rapide des vulnérabilités, par exemple un semestre où l'équipe technique n'est pas très disponible, plutôt que de risquer de se faire trouer. Rappelons qu'il y a beaucoup de données personnelles sur les serveurs et qu'il est critique de les protéger du mieux que l'on peut. Certes, il y a toujours un risque de casse, mais il est minime. Ainsi, on appliquera :
* Les mises à jour strictement nécessaires pour régler des failles de sécurité.
* On exclura les mises à jour automatiques du noyau, qui nécessitent un redémarrage et font souvent exploser la mémoire disponible dans `/boot`, nécessitant une attention particulière.
* On exclura les mises à jour automatiques de `grub`, qui peuvent mal tourner et empêcher un redémarrage.
Debian propose un paquet qui gère la configuration de ces mises à jour automatique : `unattended-upgrades`.
### Installer et configurer unattended-upgrades
#### Installation
Depuis Debian 9, le paquet est installé et configuré par défaut. Sauf que la plupart de nos VM ont été installées avec Debian 8... Et sur une autre, l'option a visiblement été désactivée à l'installation. On peut le vérifier avec la commande suivante :
```
dpkg -s unattended-upgrades
```
```
sudo apt update && sudo apt install unattended-upgrades apt-listchanges
```
Ce genre d'opération peut s'effectuer sur l'ensemble des machines, d'un seul coup, [[technique:tips:broadcast|en utilisant cette astuce]].
`apt-listchanges` va permettre de faire une synthèse des nouveaux paquets installés, et de les envoyer par mail à une adresse dédiée. Les personnes de l'équipe technique pourront se connecter au compte depuis un client IMAP quelconque et jeter un œil aux différentes mises à jour.
#### Choisir les paquets à mettre à jour
La configuration par défaut se trouve dans `/etc/apt/apt.conf.d/50unattended-upgrades`. Modifier la section suivante pour n'activer que les mises à jour de sécurité. On pourrait aussi activer les corrections de bug, mais ce n'est pas critique, on veut garder un maximum le contrôle sauf quand on parle de sécurité "vitale" :
```
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=${distro_codename},label=Debian-Security";
}
```
Désactiver la mise à jour automatique de `grub` et du noyau :
```
Unattended-Upgrade::Package-Blacklist {
"linux-headers*";
"linux-image*";
"linux-generic*";
"linux-modules*";
"grub-*";
};
```
Remplir la ligne suivante :
```
Unattended-Upgrade::Mail "tech@picasoft.net";
Unattended-Upgrade::MailOnlyOnError "true";
```
Elle indique qu'un rapport de mise à jour sera envoyé à `tech@picasoft.net`, **uniquement en cas d'erreur**. On configurera plus loin dans cette page le programme permettant d'envoyer de tels mails. :-D
S'assurer que le redémarrage automatique est **désactivé** :
```
Unattended-Upgrade::Automatic-Reboot "false";
```
#### Choisir les moments d'activation
L'activation automatique des mises à jour se configure dans `/etc/apt/apt.conf.d/20auto-upgrades`. On vérifie qu'il continue les valeurs suivantes :
```
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
```
Le `1` indique que ces mises à jour sont faites une fois par jour (par un timer `systemd`). Pour configurer ce comportement plus finement, on pourra étudier et configurer le fichier `/etc/apt/apt.conf.d/02periodic`.
### Envoyer un mail lors des mises à jour
On suppose que les machines ont la [[technique:adminsys:tips:mail|capacité d'envoyer des mails via le serveur mail de Picasoft]].
Éditer le fichier `/etc/apt/listchanges.conf` :
```
frontend=pager
email_address=root
confirm=0
save_seen=/var/lib/apt/listchanges.db
which=both
```
`unattended-upgrades` utilise `apt-listchanges` pour formater la sortie des mises à jour et envoyer un email à l'adresse demandée.