【51CTO.com快译】如果你管理自己的服务器,早晚会遇到这个问题:你得重启操作系统,但服务器在提供你无法中断的重要服务。
但为什么要重启呢?在运行apt-get upgrade命令之后,一切似乎都顺畅正常。然而,凡事不能看表面。即使系统在每次升级后继续运行,不像Windows那样强行重启,但它可能仍需要重启。
比如说,当发现系统核心(内核)有漏洞,补丁以新的软件包这种形式推送到服务器时。安装打上补丁的内核后,一些文件被写入到磁盘,但掌控一切的仍是旧内核,因为被加载到内存中的是它。
这就意味着你的服务器仍然容易受到之前发现的安全漏洞的攻击。如果不重启操作系统,就无法重新加载其他进程、守护程序和服务。然而,内核位于系统的核心,只能在下次引导时重新加载。
Ubuntu Livepatch可以解决这个问题,让你可以在不重启的情况下堵住内核的安全漏洞。这样一样,你可以数周乃至数月避免重启或推迟重启,又不影响安全性。
实时补丁背后的核心思想很简单:某个函数易受攻击时,重写函数,消除漏洞,并将新函数加载到内存中。调用该函数时,不是在内核中运行代码,而是重定向调用以使用重写的代码。
但是,实施和技术细节并非如此简单。
如何在Ubuntu上安装Livepatch?
进入到该页面,创建你的Ubuntu One帐户。(如果已经有帐户,只需登录。)查收电子邮件,然后点击帐户确认链接。接下来,访问Canonical Livepatch Service页面(https://auth.livepatch.canonical.com/)。选择你是“Ubuntu用户”,然后点击按钮以生成令牌。下一页会显示你在服务器上要输入的具体命令。在第一个命令之后,输入:sudo snap install canonical-livepatch,等几秒钟,直到snap包安装完毕。之后,你将得到类似下图所示的结果。
最后,使用Canonical页面的最后一个命令:sudo canonical-livepatch enable #PASTE_YOUR_TOKEN_HERE,服务变活动状态,必要时自动为你的内核打上安全补丁,无需你输入。
如有必要,安装Snap守护程序
在极少数情况下,上面的第一个命令可能失效,并显示以下错误消息:-bash: /usr/bin/snap: No such file or directory。这种情况下,它意味着你的服务器提供商有默认情况下不包括snap守护程序服务的Ubuntu操作系统映像。用该命令安装它:sudo apt update && sudo apt install snapd,现在再次运行上面的两个命令。
对服务器加以更新
Livepatch会为内核打上所有必要的安全更新。然而,你仍应使用以下命令定期升级系统的其余部分:sudo apt update && sudo apt upgrade。
可以的话,你应每周执行一次,甚至更频繁。重要的系统软件包可能会提示你需要重启才能使最新的安全修复程序生效。
这些通常是优雅的重启,意味着在此过程中不干扰任何服务。比如在这里,SSH守护程序重启,并不扰乱活动的SSH会话。
在其他情况下,你可以自行重启服务,确保新的修补代码已重新加载、安全修复程序已生效。比如说,如果你注意到nginx软件包已升级,可以运行:systemctl restart nginx.service,将nginx守护进程重新加载到内存中。否则,即使软件包已升级,它仍可能使用易受攻击的旧代码运行,从而使服务器面临已知攻击的风险。一些软件包升级会为你执行此操作,但另一些不会。这就是为什么注意“apt upgrade”执行什么操作,必要时重启一些服务是个习惯。你还可以查看日志,看看这是否已自动完成。
结束语
正如你所看到的,Canonical已经很容易在服务器上做到这点。至于内核,你无需进行任何维护工作。你只要时不时运行canonical-livepatch status,检查一下情况。
原文标题:How to Avoid Server Reboots with Ubuntu Livepatch,作者:Alexandru Andrei
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】