【问题标题】:Upgrades without reboot - what kinds of problems happen in practice? [closed]无需重启即可升级 - 实践中会出现哪些问题? [关闭]
【发布时间】:2011-05-24 23:22:28
【问题描述】:

如果您更新,在重新启动之前可能会出现哪些问题?如果您使用无人值守升级来应用安全补丁,这种情况尤其频繁发生。

共享对象被替换,因此程序之间可能不同步。

重启前你能安全走多长时间?

澄清:

我所说的“程序是否可以彼此不同步”的意思是,一个二进制文件具有共享对象的早期版本,而新启动的实例具有共享对象的较新版本。在我看来,如果这些版本不兼容,那么这两个二进制文件可能无法正常互操作。

这种情况在实践中经常发生吗?

更多说明:

我所了解的更多的是安装程序通常启动/停止依赖共享库的服务,以便他们获得新版本的 API。如果他们获得了所有依赖项,那么您可能没问题。但是人们是否经常看到安装程序缺少依赖项?

如果编写的服务兼容所有以前的 API 版本,那么这将不是问题。但我怀疑它经常没有完成。

如果有内核更新,特别是如果有不兼容的 ABI 更改,我看不出如何获得所有依赖项。我一直在寻找有关事情是否“翻倒”以及如何“翻倒”以及人们是否在实践中观察到这一点的经验,无论是内核更新还是库/包更新。

是的,这可能应该被放入ServerFault...

【问题讨论】:

  • serverfault.com 是您提问的更好地方。
  • 糟糕。有什么办法把它移过来吗?

标签: linux security ubuntu upgrade


【解决方案1】:

一个可执行文件在任何时候都有两个版本;一个在内存中,一个在磁盘中。

当您更新时,磁盘上的那个会被替换;记忆中的那个是旧的。如果它是一个共享对象,它会一直留在那里,直到每个使用它的应用程序退出;如果是内核,它会一直留在那里,直到您重新启动。

坦率地说,如果它是您要更新的安全漏洞,该漏洞会一直存在,直到您加载(希望)修补版本。因此,如果它是内核,则在重新启动之前您是不安全的。如果它是共享对象,则重新启动可确保安全。

基本上,我会说这取决于漏洞的类别。如果是安全的,请重新启动受影响的任何内容。否则,好吧,除非该错误对您产生不利影响,否则我不会担心。如果是内核,我总是重启。

【讨论】:

  • 对于二进制文件和共享库,您可以使用lsof / 来确定哪些进程(现在已从磁盘中删除)仍加载在内存中的旧版本,并从那里可能仅重新启动受影响的服务。至于内核,我使用Ksplice 无需重启即可更新。
  • 可能有两个以上的版本,因为您可能在多次更新后运行同一可执行文件的多个副本。同样,面对需求加载和虚拟内存,“内存中”和“磁盘上”也非常模糊。
  • 是的,需要重启或重启应用程序才能获取安全补丁。但是,如果有人不重新启动,是否存在可能导致事情开始失败或工作异常的情况?
  • 我知道,每当我更新 Firefox 时,如果我不重新启动它,如果我继续使用它,它就会开始变得奇怪。
  • @MarkR 虚拟内存是应用程序认为它拥有的内存。操作系统将应用程序(内存或交换/页面文件)放在哪里并不重要;该副本仍未更新。同样,需求加载也无关紧要。这是操作系统是否加载图像的情况。但我同意,2+ 副本可以而且确实会发生,而且很有可能。
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多