Wie dringend ist ein *** Neustart des Systems *** aus Sicherheitsgründen erforderlich?

56

Um ein bisschen Serveradministration zu lernen, habe ich einen einfachen Ubuntu 14.04-Server eingerichtet, auf dem ich eine persönliche Website betreibe. Ich habe festgelegt, dass Sicherheitsupdates automatisch installiert werden, aber die anderen Updates weggelassen. Das scheint ganz gut zu funktionieren. Gelegentlich erhalte ich beim Einloggen in den Server (mit ssh) die Meldung:

*** System restart required ***

Als dies passierte, habe ich Ubuntu einfach neu gestartet und alles war in Ordnung. Dies ist in Ordnung, da es sich um eine einfache persönliche Website handelt. Was mich jedoch wundert, ist, wie dies bei Webservern funktioniert, die in 99,9999% der Fälle auf dem Vormarsch sein sollten? Starten sie einfach nicht neu und riskieren die Verletzung der Sicherheit, weil keine Sicherheitsupdates installiert sind (was ich mir nicht vorstellen kann)? Oder halten sie Ausfallzeiten für selbstverständlich (was ich mir auch nicht vorstellen kann)?

Wie gehe ich damit um, wenn dies ein sehr wichtiger Produktionsserver ist, den ich weiterhin betreiben möchte? Alle Tipps sind willkommen!

[EDIT] Ich weiß, dass ich cat /var/run/reboot-required.pkgsdie Pakete auflisten kann, die den Neustart verursachen. Der Befehl liefert derzeit Folgendes:

linux-image-3.13.0-36-generic
linux-base
dbus
linux-image-extra-3.13.0-36-generic
linux-base

Aber woher weiß ich, ob es sich bei den Updates um Kleinigkeiten handelt, um festzustellen, ob ich eine ernsthafte Sicherheitslücke habe, wenn ich den Neustart nicht durchführe?

[EDIT2] Okay, ich habe jetzt die Befehle, die ich für nützlich befunden habe, in einem zusammengefasst:

xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high

Wenn dies nichts ausgibt, scheint es keine Sicherheitsprobleme mit hoher Dringlichkeit zu geben.

Eine letzte Frage jedoch: Gibt es low, mediumund highdie einzigen dringenden Möglichkeiten, oder gibt es noch weitere wie zum Beispiel criticaloder extremelyimportant?

kramer65
quelle
Ich verstehe die Frage nicht. Websites mit größerem Datenverkehr planen diese Ausfallzeit einfach in einem Zeitraum mit weniger Datenverkehr. Wie dringend es ist, hängt davon ab, was genau aktualisiert wird.
Ramhound
14
Ich frage mich, wie viele Leute hierher gekommen sind, weil sie die Frage in der Liste "Hot Network Questions" gesehen haben und sich gefragt haben, was die Expletiven waren ... * wirft die Hand auf *
David Richerby
6
@Ramhound: Ehm, nein, sie schalten für die Dauer der Wartung transparent auf einen sekundären Server um.
Leichtigkeit Rennen mit Monica
1
Zu der letzten Frage: Ich habe vor, niedrige und mittlere Werte herauszufiltern und alle anderen / unbekannten als dringend zu betrachten: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Antworten:

45

Dies ist keine einfache Antwort, da dies von den vorgenommenen Aktualisierungen abhängt. Wenn der Kernel ein ernstes Sicherheitsproblem hatte, ist es gut, so schnell wie möglich neu zu starten. Wenn der Kernel nur kleinere Korrekturen hatte, konnte der Neustart verschoben werden.

Wenn Sie eine Verfügbarkeit von> 99,9% garantieren, verfügen Sie fast immer über ein Clustersystem, auf dem Sie die Knoten nacheinander neu starten können, ohne den Dienst zu unterbrechen.

Sie starten also das erste System neu und verbinden es erneut mit dem Cluster. Dann das zweite und so weiter. Dann wird der Dienst niemals nicht verfügbar sein.

Uwe Plonus
quelle
2
Danke für deine Antwort. Ich habe meiner ersten Frage ein kleines Stück hinzugefügt. Ich weiß, dass ich cat /var/run/reboot-required.pkgsdie Pakete abrufen kann, die einen Neustart erfordern. Aber woher weiß ich, ob dies nur kleinere Korrekturen sind oder ob es sich um eine schwerwiegende Sicherheitsanfälligkeit handelt?
kramer65
2
@ kramer65 Jedes Paket hat ein Changelog. ZB das Changelog für den Kernel finden Sie hier .
Uwe Plonus
2
Okay, dann ist es an dem Sysadmin (dh in diesem Fall mir) zu bestimmen, ob diese Änderungen wichtig sind? Ich habe viel zu wenig Wissen, um dies für den Linux-Kernel zu bestimmen, geschweige denn für alle zig anderen Pakete. Gibt es keine zentrale Stelle, an der ich feststellen kann, ob das Update für die Sicherheit unbedingt erforderlich ist?
kramer65
8
@ kramer65 Run aptitude changelog <package>, hier ist eine Beispielausgabe: paste.ubuntu.com/8410798 (Dies ist auf einem Debian-System, nicht Ubuntu, aber dasselbe wird auch auf Ubuntu funktionieren.)
nyuszika7h
5
Vielen Dank für all die Hilfe hier. Ich habe endlich alle Dinge, die ich hier gelernt habe, in einem Befehl zusammengefasst: xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high(fügte ihn auch der ersten Frage hinzu), der eine Ausgabe darüber liefert, welche Pakete sehr dringende Patches haben. Danach können natürlich einzelne Pakete inspiziert werden. Vielen Dank für all die Antworten und Ideen!
kramer65
3

Addon für das Thema Lösung

Ich führe eine ähnliche Überprüfung auf "Neustartanforderungen" für das zabbix-Überwachungssystem durch

Ich sehe 2 Probleme in der 'Topic'-Lösung:

  1. Eignung funktioniert normalerweise schlecht in Skripten. Ich habe ein paar Stunden getötet, aber mit zabbix hat es immer noch nicht funktioniert
  2. Wenn nur 1 Änderungsprotokoll eine dringende Aktualisierung enthält, zeigt Ihr Scheck immer positive Ergebnisse

Meine Logik ist:

  1. Überprüfen Sie die letzte Änderung nur im Änderungsprotokoll für jedes Paket, das einen Neustart des Systems erfordert
  2. Als Ausgabe nur das Update mit der höchsten Priorität anzeigen

Unter Verwendung der Debian-Dokumentation habe ich 5 mögliche Werte für "Dringlichkeit" und die Tatsache gefunden, dass es sich um Gleichheitszeichen ("=") oder Semikolonzeichen (":") handeln kann. Es kann auch Groß- und Kleinschreibung geben

So endete ich mit folgenden:

#!/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

Als Ergebnis:

  • reboot_required_check.sh status Gibt 1 zurück, wenn ein Neustart erforderlich ist, und 0, wenn dies nicht der Fall ist
  • reboot_required_check.sh urgency Gibt die höchste Dringlichkeitsstufe oder 0 zurück, wenn kein Neustart erforderlich ist

Hoffe es hilft jemandem eine Zeit zu sparen;)

user2658174
quelle
0

Was mich jedoch wundert, ist, wie dies bei Webservern funktioniert, die in 99,9999% der Fälle auf dem Vormarsch sein sollten? Starten sie einfach nicht neu und riskieren die Verletzung der Sicherheit, weil keine Sicherheitsupdates installiert sind (was ich mir nicht vorstellen kann)? Oder halten sie Ausfallzeiten für selbstverständlich (was ich mir auch nicht vorstellen kann)?

Große Webserver werden neu gestartet, wenn * Systemneustart erforderlich * aus Sicherheitsgründen angezeigt wird.

Dies ist jedoch für den Benutzer transparent und die Site ist nie inaktiv, da auf großen Servern häufig zwei oder drei Server ausgeführt werden, auf denen genau dieselben Dateien gespeichert sind und dieselbe Site angezeigt wird. Der erste ist der Hauptserver, während die beiden anderen sekundär sind und nur verwendet werden, wenn der Hauptserver inaktiv ist.

Rom
quelle
1
Während dies theoretisch korrekt ist, Big web serversführen Sie benutzerdefinierte Versionen von Linux aus. Sie sehen keinen System restart requiredDialog, sie aktualisieren, was sie brauchen, um sicher zu bleiben. In den meisten Fällen können viele, wenn nicht alle Updates ausgeführt werden, während das System ausgeführt wird (ich glaube, es ist sogar möglich, einen Linux-Kernel auf einem laufenden System ohne Neustart zu aktualisieren).
Joeeey
Interessant. Ich habe einen Server bei Amazon und starte ihn häufig aufgrund dieser Meldung neu ... Ich führe Ubuntu auf meinem Server aus. Wie kann ich es anpassen, damit ich es nicht ab und zu neu starten muss?
Ab
Ich habe keine Erfahrung mit Amazon-Servern. Big web serverslaufen auf dedizierten Servern und VPS. Aus diesem Grund hat der Systemadministrator mehr Kontrolle über die Software. Gibt Amazon Ihnen Root-Shell-Zugriff auf Ihren Server?
Joeeey
Ja, es ist möglich, Root-Zugriff zu haben.
Vom
Das manuelle Aktualisieren von Paketen und der anschließende Neustart der betroffenen Dienste sowie die Verwendung von Ksplice für die Kernel-Updates sind eine Möglichkeit. Es ist erwähnenswert, dass Ksplice freezes execution of a computer so it is the only program runningbeim Anwenden eines Patches eine gewisse Ausfallzeit hat (da der Webserver-Prozess "eingefroren" ist). Hier kommt die Antwort von @Uwe Plonus ins Spiel.
joeeey