为了安全起见,***需要重新启动系统有多紧急?


56

为了学习一些服务器管理,我设置了一个简单的Ubuntu 14.04服务器,在该服务器上运行个人网站。我将其设置为自动安装安全更新,但忽略其他更新。这似乎工作得很好。有时登录服务器(使用ssh)时会收到一条消息,提示:

*** System restart required ***

发生这种情况的时候,我简单地重新启动了Ubuntu,一切都很好。可以,因为这是一个简单的个人网站。我想知道的是,这对于Web服务器是如何工作的,它应该在99.9999etc%的时间内运行?他们是否只是不重新启动并冒未安装安全更新(我无法想象)的安全风险?还是他们将停机时间视为理所当然(我也无法想象)?

如果这是我想保持正常运行的非常重要的生产服务器,我应该如何处理?欢迎所有提示!

[编辑]我知道我可以cat /var/run/reboot-required.pkgs列出导致重启的软件包。该命令当前产生以下内容:

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

但是,如果不执行重启操作,我怎么知道更新是否无关紧要?

[EDIT2]好的,我现在将发现有用的命令合并为一个:

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

如果这没有输出任何内容,则似乎没有紧急性的安全问题。

虽然最后一个问题:是lowmediumhigh唯一的紧迫性可能性,或者有什么比较例如像criticalextremelyimportant


我不明白这个问题。流量较大的网站只是将这段停机时间安排在流量较少的一段时间内。紧急程度取决于要确切更新的内容。
Ramhound 2014年

14
我想知道有多少人来这里,因为他们在“热门网络问题”列表中看到了这个问题,并且想知道什么是冒犯性的人……*举手*
David Richerby 2014年

6
@Ramhound:嗯,不,在维护期间,它们会透明地切换到辅助服务器。
与莫妮卡(Monica)进行的轻度比赛

1
再最后一个问题:我在心中为过滤掉中等和考虑所有其他/未知水平急: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Answers:


45

这不是简单的答案,因为它取决于所做的更新。如果内核存在严重的安全问题,则最好尽快重新启动。如果内核只有较小的修复,则可以推迟重新启动。

如果保证可用性> 99.9%,则几乎将拥有一个集群系统,在其中可以不中断服务地逐个重新引导节点。

因此,您重新引导了第一个系统,并将其重新绑定到群集。然后第二个,依此类推。这样,该服务将永远不会变得不可用。


2
感谢您的回答。我在最初的问题中添加了一些内容;我知道我可以cat /var/run/reboot-required.pkgs获取需要重启的软件包。但是,我怎么知道这些只是较小的修复程序,还是一个严重的安全漏洞?
kramer65 2014年

2
@ kramer65每个软件包都有一个变更日志。例如,可以在此处找到内核的changlog 。
Uwe Plonus 2014年

2
好了,然后由系统管理员(即本例中的我自己)来确定这些更改是否重要?对于Linux内核,我知之甚少,更不用说其他所有成千上万的软件包了。没有中心位置可以确定安全性是否绝对需要更新吗?
kramer65 2014年

8
@ kramer65 Run aptitude changelog <package>,这是示例输出:paste.ubuntu.com/8410798(这是在Debian系统上,而不是Ubuntu上,但是在Ubuntu上也可以。)
nyuszika7h 2014年

5
感谢您的所有帮助。最后,我将在这里学到的所有内容组合到一个命令中:(xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high也将其添加到最初的问题中),该命令提供了有关哪些软件包具有非常紧急的补丁程序的输出。之后,当然可以检查单个包装。感谢一百万的所有答案和想法!
kramer65

3

主题解决方案的插件

我对zabbix监控系统的“重新启动要求”执行类似的检查

我在“主题”解决方案中看到2个问题:

  1. 才能通常在脚本中表现不佳。我花了几个小时,但仍然无法与zabbix一起使用
  2. 如果只有1个变更日志包含紧急更新-您的检查将始终显示正面结果

我的逻辑是:

  1. 仅在更改日志中检查每个需要系统重新启动的软件包的最后更改
  2. 作为输出,仅显示最高优先级的更新

使用Debian文档,我发现了'urgency'的5个可能值,并且发现它后面可以跟等号(“ =”)或分号(“:”))。也可以有大小写字符

所以我最终得到以下结果:

#!/bin/bash
##################################
# Zabbix monitoring script
#
# Checking urgency in changelog 
# for updates which require system restart
#
##################################
# Contact:
#  anton.lugovoi@yandex.ru
##################################
# 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

结果是:

  • reboot_required_check.sh status 如果需要重新启动,则返回1;如果不需要,则返回0
  • reboot_required_check.sh urgency 返回最高的“紧急”级别,如果不需要重新启动,则返回“ 0”

希望它可以帮助某人节省时间;)


0

我想知道的是,这对于Web服务器是如何工作的,它应该在99.9999etc%的时间内运行?他们是否只是不重新启动并冒未安装安全更新(我无法想象)的安全风险?还是他们将停机时间视为理所当然(我也无法想象)?

出于安全原因,当*要求系统重新启动*出现时,大型Web服务器将重新启动

但这对用户是透明的,并且该站点永远不会宕机,因为大型服务器通常会运行两三个服务器,它们存储完全相同的文件并显示相同的站点。第一个是主服务器,而其他两个是辅助服务器,仅在主服务器关闭时使用。


1
尽管从理论上讲这是正确的,但Big web servers运行定制版本的Linux。他们不会看到System restart required对话,会更新保持安全所需的内容。在大多数情况下,许多(即使不是全部)更新都可以在系统运行时完成(我相信甚至可以在不重新启动的情况下在正在运行的系统上更新Linux内核)。
joeeey

有趣。我在Amazon上有一台服务器,由于此消息,我经常重新启动它...我在服务器上运行Ubuntu。如何自定义它,这样我就不必时不时地重新启动它?

我对Amazon服务器没有任何经验。Big web servers在专用服务器和VPS上运行。因此,系统管理员可以更好地控制该软件。Amazon是否为您提供对服务器的root Shell访问权限?
joeeey 2015年

是的,有可能具有root用户访问权限。
2015年

然后,手动更新软件包,然后重新启动受影响的服务,并使用Ksplice之类的内容进行内核更新是一种方法。值得注意的是,Ksplice freezes execution of a computer so it is the only program running在应用补丁程序时,仍然可能会出现一些停机时间(由于Web服务器进程被“冻结”)。这是由@Uwe Plonus答案的用武之地
joeeey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.