为了学习一些服务器管理知识,我设置了一台简单的 Ubuntu 14.04 服务器,并在其上运行个人网站。我已将其设置为自动安装安全更新,但忽略其他更新。这似乎运行得很好。偶尔,当我登录服务器(使用 ssh)时,我会收到一条消息,内容如下:
*** System restart required ***
发生这种情况时,我只需重新启动 Ubuntu,一切就都正常了。这没问题,因为这是一个简单的个人网站。但我想知道的是,这对于应该 99.9999% 的时间都处于运行状态的网络服务器是如何工作的?他们是否只是不重新启动,并冒着安全被破坏的风险,因为没有安装安全更新(我无法想象)?或者他们把停机视为理所当然(我也无法想象)?
如果这是一台非常重要的生产服务器,我想让它保持正常运行,我该如何处理?欢迎提供所有提示!
[编辑] 我知道我可以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
如果没有输出任何内容,则似乎不存在高度紧急的安全问题。
不过,最后一个问题是:low
、medium
和 是high
唯一的紧急可能性吗,还是还有其他类似的可能性,例如critical
或extremelyimportant
?
答案1
这个问题没有简单的答案,因为这取决于所做的更新。如果内核存在严重的安全问题,那么最好尽快重启。如果内核只有小修复,那么重启可以推迟。
如果您保证可用性 > 99.9%,那么您几乎总是会拥有一个集群系统,您可以在其中逐个重新启动节点而不会中断服务。
因此,您重新启动第一个系统并将其重新连接到集群。然后重新启动第二个系统,依此类推。这样,服务就永远不会不可用了。
答案2
主题解决方案的插件
我对 zabbix 监控系统执行了类似的“重启要求”检查
我在“主题”解决方案中看到 2 个问题:
- aptitude 在脚本中通常效果不佳。我花了几个小时,但仍然无法让它与 zabbix 一起工作
- 如果只有 1 个变更日志包含紧迫的更新 - 您的检查将始终显示积极结果
我的逻辑是:
- 查看最后一次变更仅出现在每个需要系统重启的软件包的更新日志中
- 仅作为输出显示最高优先级更新
使用Debian 文档我发现“紧急程度”有 5 个可能的值,而且它后面可以跟等号(“=”)或分号(“:”)。此外,它还可以是大写和小写字符
因此我最终得到以下结论:
#!/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
因此:
reboot_required_check.sh status
如果需要重启则返回 1,否则返回 0reboot_required_check.sh urgency
如果不需要重启,则返回最高“紧急程度”级别或“0”
希望它能帮助某人节省时间;)
答案3
不过,我想知道的是,这对于应该 99.9999% 的时间都处于运行状态的网络服务器来说是如何运作的?它们是否只是不重新启动,并冒着由于未安装安全更新而导致安全性被破坏的风险(我无法想象)?还是它们认为停机是理所当然的(我也无法想象)?
大型 Web 服务器在以下情况下重新启动*需要重新启动系统*出于安全原因。
但这对于用户来说是透明的,网站永远不会宕机,因为大型服务器通常运行两到三台服务器,这些服务器存储完全相同的文件并显示相同的网站。第一台服务器是主服务器,而另外两台服务器是辅助服务器,仅在主服务器宕机时使用。