NFSv4 启动在 20.04 中有效,但在 22.04 中无效

NFSv4 启动在 20.04 中有效,但在 22.04 中无效

凭借恶意黑客我能够在 Raspberry Pi 4B 上使用 NFSv4 根启动 Ubuntu 20.04 LTS。当我尝试使用 Ubuntu 22.04 LTS 执行相同操作时,失败了。

Raspberry 在其cmdline.txt文件中将内核参数传递给 Ubuntu。我的如下所示:

console=serial0,115200
console=tty1
root=/dev/nfs
nfsrootdebug
rootfstype=nfs4
nfsroot=192.168.8.20:/RPi4/Ubuntu/root,vers=4,tcp
rw
ip=dhcp
rootwait

(为了便于阅读,我把空格分隔符替换为换行符。)

由于仅实现 NFSv2 和 NFSv3,因此该字符串vers=4在解析过程中会导致错误。我上面提到的恶意攻击涉及用不检查字符串的内容替换可执行文件,然后继续使用 NFSv4 安装适当的内容。cmdline.txtklibc-utils/usr/lib/klibc/bin/nfsmountvers=

在 22.04 中,这不再起作用。看来 22.04nfsmount根本不再调用。我完全删除了nfsmountlibc-utils执行了,update-initramfs -u并得到了与它完全相同的错误。所以我看到的错误不是来自nfsmount,而在 20.04 中它来自 。

检查源代码klibc-utils使我相信该nfsmount功能已被重构为一个名为的文件.../klibc/usr/kinit/nfsmount/mount.c,现在(也)从中调用/usr/lib/klibc/bin/kinit

有人能帮我确认一下吗?或者有谁对 Ubuntu 的这个领域有更深入的了解,能给我指出更有成效的方向吗?

问题的根源在于Debian 中的错误自 2007 年以来,人们就已知道这一点。我不是 Linux 内核方面的专家,initramfs或者类似的东西:事实上,我之所以在这里,只是因为我愚蠢地认为在我的家庭网络中启动我的 Raspberry Pi 设备会很简单,最终深入研究了这个问题。但看来我必须尝试修复这个古老的错误,因为似乎没有其他人愿意这样做。

为了帮助我:有人可以指出我如何klibc-utils在 Ubuntu 22.04 中重新编译源代码吗?

当然,我们也欢迎任何其他建议、想法和澄清。

答案1

这是虚惊一场。我从 NAS 启动了我的 Pis,它将 RPi Ubuntu 分区存储在两个单独的目录(bootroot)中,稍后分别在/boot/firmware/处安装为两个单独的共享。

initramfsUbuntu 启动阶段从存储initrd.imgboot目录中的文件开始。

现在,出于我不完全理解的原因,Ubuntu 自豪地拥有 initrd.img文件,一个在/boot,一个在/boot/firmware。据我所知,它们是相同的,如果你执行,它们都会更新update-initramfs -u,你必须在替换nfsmount图像后执行此操作。

我无法update-initramfs -u在 NAS 上运行,因此我在 SD 启动的 RPi 上运行,并将生成的文件同步回 NAS。好吧,我做到了现在。 我曾是仅同步共享root,并且每次重新启动时它都保持不变/boot/firmware/initrd.img,其中继续包含原始的不友好的 NFSv4 nfsmount

对不起。

相关内容