Pour apprendre un peu d'administration de serveur, j'ai configuré un simple serveur Ubuntu 14.04 sur lequel je gère un site Web personnel. Je l'ai configuré pour installer automatiquement les mises à jour de sécurité, mais je laisse de côté les autres mises à jour. Cela semble fonctionner assez bien. Parfois, lors de la connexion au serveur (avec ssh), je reçois un message disant:
*** System restart required ***
Les fois où cela s'est produit, j'ai simplement redémarré Ubuntu et tout allait bien. C'est ok parce que c'est un site web personnel simple. Ce que je me demande cependant, c’est comment cela fonctionne pour les serveurs Web, ce qui devrait représenter jusqu’à 99,9999% du temps? Ne redémarrent-ils pas et risquent-ils de compromettre la sécurité parce que les mises à jour de sécurité ne sont pas installées (ce que je ne peux pas imaginer)? Ou prennent-ils le temps d'arrêt pour acquis (ce que je ne peux pas imaginer non plus)?
Comment devrais-je gérer cela s'il s'agissait d'un serveur de production très important que je souhaite maintenir en activité? Tous les conseils sont les bienvenus!
[EDIT] Je sais que je peux faire cat /var/run/reboot-required.pkgs
pour répertorier les packages qui provoquent le redémarrage. La commande génère actuellement les éléments suivants:
linux-image-3.13.0-36-generic
linux-base
dbus
linux-image-extra-3.13.0-36-generic
linux-base
mais comment puis-je savoir si les mises à jour sont de petites choses ou si j'ai une faille de sécurité grave si je ne fais pas le redémarrage?
[EDIT2] D'accord, j'ai maintenant combiné les commandes que j'ai trouvées utiles:
xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high
Si cela ne produit rien, il ne semble pas y avoir de problèmes de sécurité urgents.
Une dernière question cependant: est-ce que low
, medium
et high
sont les seules possibilités d’urgence, ou y en a-t-il d’autres, comme par exemple critical
ou extremelyimportant
?
La réponse n’est pas simple car elle dépend des mises à jour effectuées. Si le noyau a eu un grave problème de sécurité, il est conseillé de redémarrer le plus rapidement possible. Si le noyau ne contenait que des correctifs mineurs, le redémarrage pourrait être différé.
Si vous garantissez une disponibilité> 99,9%, vous disposerez presque toujours d'un système en cluster où vous pourrez redémarrer les nœuds un par un sans interrompre le service.
Vous devez donc redémarrer le premier système et le rattacher au cluster. Puis le second et ainsi de suite. Ensuite, le service ne deviendra jamais indisponible.
addon pour la solution de sujet
J'effectue une vérification similaire pour les "exigences de redémarrage" du système de surveillance zabbix
Je vois 2 problème dans la solution 'Topic':
Ma logique est:
En utilisant la documentation Debian , j’ai trouvé 5 valeurs possibles pour 'urgence' et aussi le fait qu’elle puisse être suivie d’un signe égal ("=") ou d’un point-virgule (":" ) personnages. Il peut aussi y avoir des majuscules et des minuscules
Alors je me suis retrouvé avec:
#!/bin/bash
##################################
# Zabbix monitoring script
#
# Checking urgency in changelog
# for updates which require system restart
#
##################################
# Contact:
# [email protected]
##################################
# ChangeLog:
# 20151205 initial creation
# 20151208 check uniq packages only
##################################
case "$1" in
status)
if [ -f /var/run/reboot-required ]; then
echo 1
else
echo 0
fi
;;
urgency)
if [ -f /var/run/reboot-required.pkgs ]; then
while read pkg; do
tmp=`/usr/bin/apt-get changelog $pkg | \
/bin/grep -m1 -ioP '(?<=[Uu]rgency[=:])(low|medium|high|emergency|critical)' | \
tr '[:upper:]' '[:lower:]'`
if [ -n $tmp ]; then
if [ "$tmp" == "low" ] && \
[ "$urgency" != "medium" ] && \
[ "$urgency" != "high" ] && \
[ "$urgency" != "emergency" ] && \
[ "$urgency" != "critical" ]; then
urgency=low
Elif [ "$tmp" == "medium" ] && \
[ "$urgency" != "high" ] && \
[ "$urgency" != "emergency" ] && \
[ "$urgency" != "critical" ]; then
urgency=medium
Elif [ "$tmp" == "high" ] && \
[ "$urgency" != "emergency" ] && \
[ "$urgency" != "critical" ]; then
urgency=high
Elif [ "$tmp" == "emergency" ] && \
[ "$urgency" != "critical" ]; then
urgency=emergency
Elif [ "$tmp" == "critical" ]; then
urgency=critical
break
fi
fi
done < <(sort -u /run/reboot-required.pkgs)
else
urgency=none
fi
case "$urgency" in
none) urgency=0 ;;
low) urgency=1 ;;
medium) urgency=2 ;;
high) urgency=3 ;;
emergency) urgency=4 ;;
critical) urgency=5 ;;
*) urgency=42 ;;
esac
echo $urgency
;;
esac
exit 0
Par conséquent:
reboot_required_check.sh status
renvoie 1 si un redémarrage est requis, 0 sinonreboot_required_check.sh urgency
renvoie le niveau 'd'urgence' le plus élevé ou '0' si le redémarrage n'est pas requisJ'espère que ça aide quelqu'un à gagner du temps;)
Ce que je me demande cependant, c’est comment cela fonctionne pour les serveurs Web, ce qui devrait représenter jusqu’à 99,9999% du temps? Ne redémarrent-ils pas et risquent-ils de compromettre la sécurité parce que les mises à jour de sécurité ne sont pas installées (ce que je ne peux pas imaginer)? Ou prennent-ils le temps d'arrêt pour acquis (ce que je ne peux pas imaginer non plus)?
Les gros serveurs Web sont redémarrés lorsque * Redémarrage du système requis * apparaît pour des raisons de sécurité.
Mais cela est transparent pour l'utilisateur et le site n'est jamais en panne, car les gros serveurs exécutent souvent deux ou trois serveurs qui stockent exactement les mêmes fichiers et affichent le même site. Le premier est le serveur principal tandis que les deux autres sont secondaires et ne sont utilisés que lorsque le serveur principal est en panne.