凭借恶意黑客我能够在 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.txt
klibc-utils
/usr/lib/klibc/bin/nfsmount
vers=
在 22.04 中,这不再起作用。看来 22.04nfsmount
根本不再调用。我完全删除了nfsmount
,libc-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 分区存储在两个单独的目录(boot
和root
)中,稍后分别在/boot/firmware
和/
处安装为两个单独的共享。
initramfs
Ubuntu 启动阶段从存储initrd.img
在boot
目录中的文件开始。
现在,出于我不完全理解的原因,Ubuntu 自豪地拥有二 initrd.img
文件,一个在/boot
,一个在/boot/firmware
。据我所知,它们是相同的,如果你执行,它们都会更新update-initramfs -u
,你必须在替换nfsmount
图像后执行此操作。
我无法update-initramfs -u
在 NAS 上运行,因此我在 SD 启动的 RPi 上运行,并将生成的文件同步回 NAS。好吧,我做到了现在。 我曾是仅同步共享root
,并且每次重新启动时它都保持不变/boot/firmware/initrd.img
,其中继续包含原始的不友好的 NFSv4 nfsmount
。
对不起。