¿Qué tan urgente es un *** Sistema de reinicio requerido *** para la seguridad?

54

Para aprender un poco acerca de la administración del servidor, he configurado un servidor simple Ubuntu 14.04 en el que ejecuto un sitio web personal. Lo configuré para instalar automáticamente actualizaciones de seguridad, pero omitir las otras actualizaciones. Esto parece funcionar bastante bien. De vez en cuando recibo un mensaje al iniciar sesión en el servidor (con ssh) que dice:

*** System restart required ***

Las veces que esto sucedió, simplemente reinicié Ubuntu y todo estuvo bien. Esto está bien porque es un sitio web personal simple. Sin embargo, lo que me pregunto es cómo funciona esto para los servidores web, que deberían ser un 99,9999% de aumento del tiempo. ¿Simplemente no se reinician y corren el riesgo de que se infrinja la seguridad porque las actualizaciones de seguridad no están instaladas (lo cual no puedo imaginar)? ¿O dan por sentado el tiempo de inactividad (lo cual tampoco puedo imaginar)?

¿Cómo debo manejar esto si este fuera un servidor de producción muy importante que quiero mantener en funcionamiento? Todos los consejos son bienvenidos!

[EDITAR] Se que puedo hacer cat /var/run/reboot-required.pkgs para enumerar los paquetes que causan el reinicio. El comando actualmente produce lo siguiente:

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

pero, ¿cómo puedo saber si las actualizaciones son pequeñas cosas de si tengo una vulnerabilidad de seguridad grave si no hago el reinicio?

[EDIT2] Bien, ahora combiné los comandos que he encontrado útiles en uno:

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

Si esto no produce nada, no parece haber problemas de seguridad con una alta urgencia.

Una última pregunta sin embargo: son low, mediumy high Las únicas posibilidades de urgencia, o hay más como por ejemplo critical o extremelyimportant?

kramer65
fuente
No entiendo la pregunta. Los sitios web con mayor tráfico simplemente programan este tiempo de inactividad durante un período de tiempo con menos tráfico. Qué tan urgente es depende de lo que se está actualizando exactamente.
Ramhound
14
Me pregunto cuántas personas vinieron aquí porque vieron la pregunta en la lista de "Preguntas de la Red Caliente" y se preguntaron qué eran los improperios ... * levanta la mano *
David Richerby
6
@Ramhound: Ehm, no, se cambian de forma transparente a un servidor secundario durante el mantenimiento.
Lightness Races in Orbit
1
Re la última pregunta: estoy pensando en filtrar bajo y medio y considere todos los demás niveles desconocidos / urgentes: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Respuestas:

44

No es una respuesta simple, ya que depende de las actualizaciones realizadas. Si el kernel tiene un problema de seguridad grave, es bueno reiniciarlo lo antes posible. Si el kernel solo tuviera correcciones menores, el reinicio podría posponerse.

Si garantiza una disponibilidad & gt; El 99.9% casi siempre tendrá un sistema en clúster donde podrá reiniciar los nodos uno por uno sin interrumpir el servicio.

Así que reinicia el primer sistema y lo vuelve a conectar al clúster. Luego el segundo y así sucesivamente. Entonces el servicio nunca dejará de estar disponible.

Uwe Plonus
fuente
2
Gracias por tu respuesta. Agregué un pequeño pedazo a mi pregunta inicial; Se que puedo hacer cat /var/run/reboot-required.pkgs para obtener los paquetes que requieren el reinicio. Pero, ¿cómo puedo saber si estas son solo correcciones menores o si se trata de una vulnerabilidad de seguridad grave?
kramer65
2
@ kramer65 cada paquete tiene un registro de cambios. P.ej. El changlog para el kernel se puede encontrar. aquí .
Uwe Plonus
2
Bien, entonces, ¿depende del administrador de sistemas (es decir, en este caso yo mismo) determinar si esos cambios son importantes? Tengo demasiado poco conocimiento para determinar esto para el kernel de Linux, y mucho menos para todos los miles de paquetes. ¿No hay un lugar central donde pueda determinar si la actualización es absolutamente necesaria para la seguridad?
kramer65
8
@ kramer65 Ejecutar aptitude changelog <package>, aquí hay un ejemplo de salida: paste.ubuntu.com/8410798 (Esto es en un sistema Debian, no en Ubuntu, pero lo mismo funcionará en Ubuntu también).
nyuszika7h
5
Gracias por toda la ayuda aquí. Finalmente combiné todas las cosas que he aprendido aquí en un solo comando: xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high (También se agregó a la pregunta inicial), lo que da una salida de qué paquetes tienen parches altamente urgentes. Después de eso, los paquetes individuales pueden, por supuesto, ser inspeccionados. ¡Un millón de gracias por todas las respuestas e ideas!
kramer65
3

Complemento para la solución del tema.

Realizo una comprobación similar para el 'requisito de reinicio' para el sistema de monitoreo de zabbix

Veo 2 problemas en la solución 'Topic':

  1. La aptitud por lo general funciona mal en los scripts. Mato unas pocas horas mas Todavía no lo hice funcionar con zabbix
  2. si solo 1 registro de cambios incluye urgente actualización - su cheque siempre mostrará resultados positivos

Mi lógica es:

  1. Comprobar ultimo cambio solo en el registro de cambios para cada paquete que requiera reinicio del sistema
  2. Como muestra de salida solamente más alta prioridad actualizar

Utilizando Documentación de debian Encontré 5 valores posibles para 'urgencia' y también el hecho de que puede ser seguido por caracteres iguales ("=") o puntos y coma (":") También puede haber mayúsculas y minúsculas.

Así que terminé con lo siguiente:

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

Como resultado:

  • reboot_required_check.sh status devuelve 1 si es necesario reiniciar, 0 si no lo es
  • reboot_required_check.sh urgency devuelve el nivel más alto de 'urgencia' o '0' si no es necesario reiniciar

Espero que ayude a alguien a ahorrar tiempo;)

user2658174
fuente
0

Sin embargo, lo que me pregunto es cómo funciona esto para los servidores web que   ¿Debería haber subido 99.9999etc% del tiempo? ¿Simplemente no se reinician y   corra el riesgo de que la seguridad sea violada porque las actualizaciones de seguridad no son   instalado (que no puedo imaginar)? ¿O se toman el tiempo de inactividad para   concedido (que tampoco puedo imaginar)?

Los grandes servidores web se reinician cuando * Reinicio del sistema requerido * Aparece por razones de seguridad.

Pero esto es transparente para el usuario y el sitio nunca está inactivo porque los servidores grandes a menudo ejecutan dos o tres servidores que almacenan exactamente los mismos archivos y muestran el mismo sitio. El primero es el servidor principal, mientras que los otros dos son secundarios y se usan solo cuando el servidor principal está inactivo.

rom
fuente
1
Si bien esto es teóricamente correcto, Big web servers Ejecutar versiones personalizadas de Linux. No verán un System restart required Diálogo, actualizan lo que necesitan para mantenerse seguros. En la mayoría de los casos, muchas, si no todas, las actualizaciones se pueden hacer mientras el sistema se está ejecutando (creo que incluso es posible actualizar un kernel de Linux en un sistema en ejecución sin reiniciar).
joeeey
Interesante. Tengo un servidor en Amazon y lo reinicio a menudo debido a este mensaje ... Estoy ejecutando Ubuntu en mi servidor. ¿Cómo personalizarlo para que no tenga que reiniciarlo de vez en cuando?
rom
No tengo ninguna experiencia con los servidores de Amazon. Big web servers Se ejecutan en servidores dedicados y VPS. Debido a esto, el administrador del sistema tiene más control sobre el software. ¿Amazon te da acceso de root shell a tu servidor?
joeeey
Sí, es posible tener acceso root.
rom
Luego, actualice los paquetes manualmente y luego reinicie los servicios afectados, y use algo como Ksplice Para las actualizaciones del kernel sería una forma. Vale la pena señalar que Ksplice freezes execution of a computer so it is the only program running al aplicar un parche, por lo que aún puede haber un poco de tiempo de inactividad (debido a que el proceso del servidor web está 'congelado'). Aquí es donde entra la respuesta de @Uwe Plonus.
joeeey