题 更新生产Ubuntu盒子的注意事项


我经常登录生产web / db / tools框并看到典型的消息:

30个包可以更新。 16个更新是安全更新。

我的问题是,你们如何处理生产Ubuntu盒子的更新?你自动化这些更新吗?你为他们设定了停机时间吗?问题是,您永远不知道更新何时会破坏某些内容,例如可能是现有的配置文件等。

问题的另一部分是,跟上补丁是一件好事,但几乎每天都会发布补丁。如果每天都有新的安全补丁,那么必须进行多少次计划中断?

我认为关于如何管理更新的答案线程非常有用。


24
2018-01-20 16:26






答案:


修补Ubuntu与Windows,RHEL,CentOS,SuSE,debian等没有什么特别之处。

在设计补丁程序时,您需要考虑的基本心态是假设某些事情  打破。

在设计补丁程序时,我倾向于使用的一些基本指南是:

  • 始终使用本地系统在内部集中到安装了修补程序的网络

这可能包括使用WSUS或镜像 <your_os_here> 到内部补丁管理机器。最好能够集中查询并让您知道各个计算机上安装的修补程序的状态。

  • 在机器上预先安装 - 如果可能的话 - 。

如果可能,当补丁出来时,中央服务器将它们复制到各个机器。这实际上只是节省时间,因此您无需等待他们下载和安装,您只需在补丁窗口中启动安装。

  • 获取一个中断窗口来安装补丁,您可能需要重新启动,并且可能会中断。确保这些系统的利益相关者知道正在部署补丁。准备好“这个”不起作用。

根据我的基本理论,修补程序会破坏事物,请确保您有一个中断窗口,可以应用足够长的时间来解决关键问题,并可能将修补程序回滚。你不需要让人们坐在那里测试补丁后。我个人非常依赖我的监控系统让我知道一切都在我们可以逃脱的最低水平上运作。但是,随着人们开始工作,还要准备好迎接一些小问题。你应该总是安排一个人准备好接听电话 - 最好是那个直到凌晨3点打补丁的人。

  • 尽可能自动化

像IT,脚本,脚本中的其他所有内容一样,然后脚本更多。脚本包下载,安装开始,镜像。基本上你想把补丁窗口变成一个婴儿坐着的任务,只需要一个人在那里以防万一。

  • 每个月都有多个窗口

这使您无法修补某些服务器,如果由于某种原因他们无法在“指定的夜晚”修补。如果你在晚上1不能这样做,要求他们在晚上2免费。还可以让你同时保持修补服务器的数量。

最重要的是 跟上补丁! 如果你不这样做,你会发现你自己不得不做10个多小时的补丁窗口,只是为了回到你被抓住的地步。在事情可能出错的情况下引入更多要点,并找出导致哪个补丁更难以发布。


问题的另一部分是,跟上补丁是一件好事,但几乎每天都会发布补丁。如果每天都有新的安全补丁,那么必须进行多少次计划中断?

每月修补一次服务器或每隔一个月修补一次 - 恕我直言 - 这是一个非常可实现且可接受的目标。更重要的是,你将不断修补服务器,更不用说了,你开始遇到需要为每台服务器应用数百个补丁的情况。

至少你需要一个月的窗户数量?这取决于您的环境。你有多少台服务器?您的服务器所需的正常运行时间是多少?

较小的9x5环境可能会在一个月内通过一个补丁窗口逃脱。大型24x7商店可能需要两个。非常大的24x7x365每周可能需要一个滚动窗口,以便每周修补一组不同的服务器。

找到适合您和您的环境的频率。

要记住的一件事是100%最新是一个 不可能 达成目标 - 不要让你的安全部门告诉你。尽你所能,不要落后太多。


13
2018-01-20 16:55



你说自动化安装开始,虽然这与消息的原始前提相矛盾,以获得中断窗口。您能否进一步澄清答案的“自动化安装开始”部分? - imaginative
当你的停电开始时你自动开始安装 - 停止登录每个盒子开始安装的需要......我会试着想出一些更好的措辞 - Zypher


要做的事:

  1. 备份
  2. 确保它是一个可恢复的备份(尽管这两个是一般点)
  3. 在升级时尝试将流量从生产箱中引出。
  4. 如果出现问题,请尝试使用带外访问方法,KVM,串行控制台,本地访问或远程控制。
  5. 在将更新部署到更多服务器之前,在一台服务器上进行测试,然后确保一切正常
  6. 如果可以,请使用puppet确保多个服务器上的版本号相同。 (您也可以使用它来强制升级)
  7. 在测试服务器上,将配置文件的版本与新的(已安装更新的)版本区分开来,并确保没有任何东西会严重破坏。在安装与当前安装版本不同的新版本之前,我似乎记得dpkg。

要避免的事情:

  1. 在当天中午或星期一早上9点或星期五下午5点进行更新! (感谢@ 3影响!)
  2. 在真正大的数据库服务器上升级MySQL(重启可能需要很长时间)
  3. 一次完成所有服务器(特别是内核)
  4. 做任何可能改变/ etc / networks的事情(因为你可能会丢失连接)
  5. 无需您在那里检查所有内容即可执行上述操作的自动更新即可。

6
2018-01-20 16:48



你忘记了......除非你不重视你的周末,否则永远不要在星期五的一天结束时这样做:) - 3dinfluence


值得一提的另一点:如果你已经习惯了Windows,那么大多数Linux更新都会让你感到惊讶  需要停机或重启。有些人会这样做,例如内核更新。但是,需要重新启动或停机的更新通常会被标记,并且可以按照单独的计划进行处理。


4
2018-01-20 19:51



请记住,正在运行的服务的更新将要求在某个时刻停止服务,以便获得新服务。不过,你每隔10分钟就得不到烦人的提示:) - gbjbaanb
debian / ubuntu实用程序 checkrestart 在确定哪些进程已更新但仍需要停止并重新启动以获取新代码时非常有用。 - thomasrutter


我们的Ubuntu机器都运行LTS版本。

我们只是自动安装所有更新 - 确保它不是“最佳实践”,但我们是一个相对较小的商店,没有针对每个服务的测试/开发/生产环境。无论如何,LTS更新通常都经过了相当好的测试和微创。

升级到新版本显然需要更多参与。


4
2018-01-25 19:03





我们以ubuntu LTS系统的以下方式处理更新:

  1. Maitain一套验收测试,检查我们软件中的所有关键路径
  2. 每天凌晨4点无人值守安装安全升级并立即运行验收测试。如果有任何失败,工程师会被分页并有足够的时间来解决问题或在上午9点之前回滚。到目前为止,这种情况在五年内只发生过两次 - LTS经过了良好的测试和稳定。
  3. 我们每周都会使用蓝/绿部署自动重新部署整个基础架构(在digitalocean上),这使得所有软件包都保持最新版本。如果新部署未通过验收测试,则部署将暂停,直到工程师可以调试该问题。

我们的下一个合乎逻辑的步骤是消除内存中的会话信息,这样我们就可以每天甚至多次重新部署基础架构,而不会影响客户并消除步骤(2)。

这种方法维护成本低,完全避免了维护窗口。


2
2018-01-23 11:19



我在一家做过类似过程的公司工作过;我们的母公司拥有“完整且专业的系统”。当宣布“heartbleed”漏洞时,第二天早上我们已经修补了数百台服务器。母公司的“安全”流程最终取消了数百台服务器,让IT团队在一周内手动修补每台机器。复杂性是安全性和可靠性的敌人:-) - Tom Harrison Jr


我建议的一件事是处理包的回滚。看到 使用Debian进行事务和回滚 有关如何操作的建议,因为有时您需要快速修复破坏某些内容的升级。


0
2018-01-25 19:50