Hacker News 中文摘要

RSS订阅

Linux内核中的Higgs-Bugson现象 -- A Higgs-Bugson in the Linux Kernel

文章摘要

文章讲述了作者在Linux内核中发现的一个难以复现的“Higgs-bugson”问题,该问题出现在一个名为Gord的关键系统中,该系统用于存储和分发公司的交易活动数据。作者详细描述了调试过程,并提供了关于NFS(网络文件系统)协议及其与Kerberos安全机制结合使用的背景信息。NFSv3的默认安全性较低,服务器仅检查客户端是否从“特权”端口连接,而Kerberos则为NFS提供了更强的安全选项。

文章总结

文章主要内容总结

标题: Linux内核中的“希格斯虫”(Higgs-bugson)

背景: 作者在公司的交易数据存储和分发系统Gord中遇到了一个难以复现的奇怪bug,称为“希格斯虫”(Higgs-bugson)。这种bug类似于希格斯玻色子,理论存在但难以捕捉。文章详细描述了作者如何一步步调试并最终解决这个问题的过程。

NFS与Kerberos的背景: NFS(网络文件系统)协议用于通过网络访问POSIX文件系统。默认情况下,NFSv3在不受信任的网络中几乎没有安全性,服务器仅检查客户端是否从“特权”端口号连接。另一种安全选项是Kerberos,它通过加密验证用户身份。

问题描述: Gord系统在进行大文件复制时,偶尔会失败并返回-EACCES(权限被拒绝)错误,尽管文件系统的权限设置正确。关闭Kerberos后,复制操作不再失败,因此怀疑问题与Kerberos凭证有关。

Kerberos凭证的获取: 内核通过一个名为rpc_gssd的根用户空间守护进程获取Kerberos凭证。应用程序进行NFS文件I/O系统调用时,内核通过rpc_pipefs文件系统与rpc_gssd通信,获取并验证Kerberos服务票据。

尝试复现bug: 作者尝试通过长时间运行的写入操作和大量并行复制操作来复现bug,但未能成功。最终,作者决定创建一个完全在内存中的文件系统,使用随机数据生成大文件进行复制测试。

使用eBPF进行调试: 为了收集调试信息,作者使用Linux内核的eBPF子系统,编写了一个bpftrace脚本,监控内核函数返回的-EACCES错误,并捕获相关的网络数据包。

发现问题: 在测试中,作者发现三分之一的测试机器同时失败,并观察到gss_validate函数返回-13(GSS_S_BAD_SIG)错误,表明签名验证失败。进一步分析发现,内核在处理重传请求时,使用了新的GSS序列号,但服务器返回的响应仍然使用旧的序列号,导致签名验证失败。

修复bug: 作者编写了两个内核补丁:一个实现了RFC建议的缓存机制,另一个在签名验证失败时不立即重传请求。这两个补丁已被上游接受,并将在Linux 6.16版本中发布。

结论: 通过详细的调试和测试,作者成功定位并修复了Linux内核中与NFS和Kerberos相关的一个复杂bug,确保了系统的稳定性和安全性。

图片: - Image 1: animation: file copy going halfway before failing with permission denied - Image 2: diagram of kerberized nfs flow, explained again below - Image 3: command showing slow trickle of writes to nfs - Image 4: nfs packet format diagram, key details highlighted below - Image 5: step-by-step repro diagram of the bug

评论总结

主要观点总结:

  1. 对“Higgs-Bugson”术语的讨论

    • 支持者:部分评论者认为“Higgs-Bugson”这个术语有趣且形象,比他们常用的“系统被附身”更有趣。
      • 评论1:“I love the term 'Higgs Bugson'. Its much better than what I usually do which is just call a system haunted.”(我喜欢“Higgs Bugson”这个术语,比我通常称系统为“被附身”要好得多。)
    • 反对者:有人认为这个术语与“Heisenbug”没有本质区别,且其起源并不严肃,甚至可能是偶然产生的。
      • 评论3:“The term somehow made it to the 'Heisenbug's Wikipedia page... There are no other sources.”(这个术语不知怎么地出现在了“Heisenbug”的维基百科页面上……没有其他来源。)
      • 评论9:“Calling this a 'Higgs-Bugson' doesn't make a lot of sense. There's nothing uncertain or difficult to reproduce about the Higgs.”(称其为“Higgs-Bugson”没有太多意义,因为希格斯粒子本身并不存在不确定性或难以复现的问题。)
  2. 对Linux内核质量的担忧

    • 有评论者指出,近年来Linux内核的发布质量有所下降,尤其是在2020年代,出现了更多的数据损坏、Wi-Fi固件/内核回归、图形异常等问题。
      • 评论12:“anyone else feel like the linux kernel release quality has come down a bit here in the 2020s?”(有没有人觉得Linux内核的发布质量在2020年代有所下降?)
      • 评论6:“With millions of LoCs, it is no surprise there are bugs.”(有数百万行代码,出现bug并不奇怪。)
  3. 对NFS的讨论

    • 有评论者提到NFS的复杂性及其在混合环境中的使用问题,认为NFS虽然简单且经过实战检验,但也带来了不少麻烦。
      • 评论8:“NFS with Kerberos... works so well a bug showed up in the kernel.”(NFS与Kerberos结合使用得如此之好,以至于内核中出现了bug。)
      • 评论10:“NFS is lot like heroin: at first, it seems amazing. But then it ruins your life.”(NFS就像海洛因:起初它看起来很棒,但后来它会毁了你的生活。)
  4. 对Kerberos的吐槽

    • 有评论者分享了管理Kerberos系统的痛苦经历,认为其在混合环境中的配置和维护非常复杂。
      • 评论14:“Kerberos is 'fun'. I had to manage a system which used Kerberos... It was an ever present source of weird behaviour.”(Kerberos“很有趣”,我不得不管理一个使用Kerberos的系统……它一直是奇怪行为的来源。)
  5. 对Jane Street技术文章的讨论

    • 有评论者提到Jane Street的技术文章,认为这是他们的内容营销策略。
      • 评论11:“Content marketing for Jane street.”(这是Jane Street的内容营销。)

总结:

评论主要围绕“Higgs-Bugson”术语的合理性、Linux内核质量的下降、NFS的复杂性以及Kerberos的管理难题展开。部分评论者对这些术语和技术的使用表示支持,而另一些人则对其提出了质疑或批评。此外,还有对Jane Street技术文章的讨论,认为其属于内容营销的一部分。