V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  程序员

为什么 Linux 能做到不重启系统安装安全补丁, Windows 和 macOS 都做不到?

  •  1
     
  •   drymonfidelia · 3 天前 · 3555 次点击
    34 条回复    2024-07-13 23:37:49 +08:00
    adrianzhang
        1
    adrianzhang  
       3 天前
    Linux 是微内核。
    hronro
        2
    hronro  
       3 天前
    Linux 是微内核?!
    StinkyTofus
        3
    StinkyTofus  
       3 天前   ❤️ 3
    @adrianzhang #1 Linux 是宏内核
    henix
        4
    henix  
       3 天前   ❤️ 1
    有些安全补丁安装完只需要重启相关服务就行了,不用重启系统,比如之前的 ssh 安全漏洞
    adrianzhang
        5
    adrianzhang  
       3 天前
    @StinkyTofus 哦哦,打错。
    adrianzhang
        6
    adrianzhang  
       3 天前   ❤️ 2
    刚才不知道在想什么。这个问题应回答 Linux 是松耦合系统。
    vituralfuture
        7
    vituralfuture  
       3 天前 via Android
    因为可执行被加载到内存执行后可以写入该文件,进程的工作目录被其他进程删掉后也不会挂掉,以上都是因为 inode 的引用计数机制,只有引用计数降低到零才会真正删除 inode 。这也是为什么 rm 删全盘后 linux 还能活一段时间,关机后才会真的挂掉

    要安装补丁,可以在服务仍然运行的时候安装,安装完成后,服务仍然使用的是旧版本,要让服务重新加载新版本,可以有两种做法
    1. 重启服务
    2. 给服务进程发送信号,让它重新加载动态库(假设补丁在动态库中)
    hez2010
        8
    hez2010  
       3 天前   ❤️ 1
    不重启安装补丁并不推荐,因为会带来不一致问题。想象一下你有个程序 A 执行到中途把自己 fork 成几个 worker 来执行,此时在 fork 之前或者中途程序 A 的文件因为安装补丁被替换了,那之后会发生什么行为可没人能预料到。又或者有多程序共享了某一个库或者配置文件,结果因为安装补丁导致他们使用的版本不相同,又会导致另外的问题。
    当然跟 Linux 加载可执行文件不锁定文件也有关系,不过 macOS 加载可执行文件跟 Linux 一样不会锁定文件,也不是照样不支持不重启系统安装补丁。
    另外 Windows 虽然加载可执行文件的时候会锁定文件导致无法更新文件,但是 Windows 是支持热补丁的,只不过是 Windows Server Azure 版专享: https://learn.microsoft.com/en-us/windows-server/get-started/hotpatch
    dobelee
        9
    dobelee  
       3 天前
    别说打补丁了,rm -rf 都可以。而 Win 会锁定打开的文件。
    wheat0r
        10
    wheat0r  
       3 天前
    Linux 存在需要安装的补丁吗?
    fox0001
        11
    fox0001  
       3 天前 via Android
    我认为 Linux 的文件系统起了很大作用。详细可以查查 Linux inode 。

    Linux 的文件内容修改后,文件名不变,但其 inode 更新,文件内容写入新的硬盘存储空间。正在运行的程序,拿着旧 inode ,可以读取到旧版文件(也有可能程序文件已读入内存),所以文件修改后一般不影响程序运行。服务的配置文件修改后,需要重启服务,一般就是根据文件名获取到新的 inode ,从而读取到修改后的配置。
    bitdepth
        12
    bitdepth  
       3 天前
    kernel 除非是 module 的 security bug 否則也是要重啟好不好
    另外 linux kernel 是有 living patch 不過不是很好用就是了
    fpk5
        13
    fpk5  
       3 天前
    因为服务器大多数运行 Linux ,关机会有很大的影响,所以这些公司(尤其是做 Cloud 的公司)有动力去开发不关机更新的内核补丁。Windows 和 macOS 这种普通用户的系统有什么必要开发这种功能?
    V28a19cc
        14
    V28a19cc  
       3 天前
    1. Windows Server Azure Edition 和 Windows 11 24H2 26100 都支持 hotpatch 热更新。
    2. 对于大部分用户来说这个功能没必要,反倒是定期重启能解决大多数问题。
    msg7086
        15
    msg7086  
       3 天前
    因为 Windows 内核会锁定文件,要删除文件并安装新版本一般需要先关闭才能操作。
    对普通应用程序来说需要完全关闭程序,对系统来说就是重启系统。
    macOS 不清楚。

    Linux 下可以直接删除原文件并安装新文件,然后再重启软件或者电脑就可以了。
    MrKrabs
        16
    MrKrabs  
       3 天前
    ubuntu 可是拼命叫你重启
    beginor
        17
    beginor  
       3 天前 via Android
    但是很多补丁装完还是会提示重启的
    Chad0000
        18
    Chad0000  
       3 天前 via iPhone
    做到需要更大成本,让用户重启电脑很简单也没什么大的影响,所以这个热更新非必需。
    villivateur
        19
    villivateur  
       3 天前
    Linux 更新内核的话本来也是要重启的啊,或者 systemd 之类的
    NessajCN
        20
    NessajCN  
       3 天前
    要看哪种补丁。编译进内核或者启动参数加载内核参数的模块更新还是要重启的。通过 sysctl 加载的运行时参数或者 systemd 管理的系统进程就可以不重启
    shunia
        21
    shunia  
       3 天前   ❤️ 2
    不说 Linux ,只说你看到 windows 让你重启,那说明都是确实要重启才能生效的补丁。如果不重启就生效的,你自然也感觉不到。

    比如说偷偷给你安装安全管家可能就不需要你重启。
    asm
        22
    asm  
       3 天前
    我记得某个大佬说过一个问题,win 上如何删除正在运行的程序的文件。
    想了好久。。。
    dbak
        23
    dbak  
       3 天前
    linux 相关服务更新后会自动 reload 涉及到内核更新的也是提示要重启 reboot
    listen2wind
        24
    listen2wind  
       3 天前
    @dobelee 想起上次发包的时候,linux 上的包还在运行,就可以进行替换。而 windows 上的包在运行时无法被替换。
    wushenlun
        25
    wushenlun  
       2 天前 via Android
    换内核不要重启吗
    dyllen
        26
    dyllen  
       2 天前
    我记得 linux 好像出过不用重启更新内核版本的功能。
    libook
        27
    libook  
       2 天前
    这种就是有专门做就能支持。

    前段时间听了一个技术分享会,某些品牌的商用 Linux 发行版可以做到内核的函数级别热补丁,旧函数执行完之后再次调用就是新函数了,估计只要不是一直 loop 的函数都可以这样打补丁。
    Yanlongli
        28
    Yanlongli  
       2 天前
    这要看具体是什么功能以及拆分的深度。
    理论上第三方软件都是热插拔,内置的软件也有些同样热插拔,但是可能存在占用问题,就推荐重启一劳永逸。
    guo4224
        29
    guo4224  
       2 天前
    windows/macos 下的应用更新,也是不需要重启的,Linux 的 kernel 更新一样得重启。
    cyp0633
        30
    cyp0633  
       2 天前
    先问是不是吧,类似 livepatch 的东西我记得是业界很热门的一个话题,只不过可能对 downtime 苛刻的主要是 Linux 环境罢了
    iminto
        31
    iminto  
       2 天前 via Android
    你第一句话说的啥? Linux 能做到不重启系统安装安全补丁?

    不能。
    lucky85984
        32
    lucky85984  
       1 天前
    win 现在有了热补丁了,听说可以不用重启更新,未经查证。官方说的
    mmdsun
        34
    mmdsun  
       10 小时 36 分钟前 via iPhone
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.