NFS rootfs 上的 Busybox SUID
Busybox SUID on NFS rootfs
我正在为 Beagle Bone 板从底层构建一个 Linux 系统。我已经编译了 vanilla 内核并用 busybox
构建了一个基本的根文件系统。系统使用 U-boot 启动,而 rootfs
位于 Linux PC 上并通过 NFS 导出:
/path/to/rootfs 10.42.0.17(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
U-boot bootargs
是:
bootargs console=ttyO0,115200n8 root=/dev/nfs rw nfsroot=${serverip}:/path/to/rootfs,v3,tcp ip=dhcp
我在尝试让 su
为非 root 用户工作时遇到了问题。为了解决这个问题,互联网上的人们建议为 busybox
二进制文件设置 suid
位。
这样做之后:
$ sudo chmod u+s busybox
并验证:
$ ls -la
...
-rwsr-xr-x 1 myuser myuser 1882976 Jan 13 21:47 busybox
...
$ stat -c "%a %n" busybox
4755 busybox
出了点问题。内核正在启动并显示所有常用消息,但最后卡住了,没有显示 login
行。以下是启动顺序的最后几行:
[ 3.776185] IP-Config: Complete:
[ 3.779656] device=eth0, hwaddr=c8:a0:30:c5:80:e9, ipaddr=10.42.0.17, mask=255.255.255.0, gw=10.42.0.1
[ 3.789877] host=10.42.0.17, domain=, nis-domain=(none)
[ 3.795822] bootserver=10.42.0.1, rootserver=10.42.0.1, rootpath=
[ 3.802492] nameserver0=10.42.0.1
[ 3.871575] VFS: Mounted root (nfs filesystem) on device 0:15.
[ 3.879903] devtmpfs: mounted
[ 3.883713] Freeing unused kernel memory: 380K (c07ef000 - c084e000)
如果移除标志,一切都会恢复正常:
....
[ 3.862291] Freeing unused kernel memory: 380K (c07ef000 - c084e000)
10.42.0.17 login:
如果在 Beagle Bone 板本身的 运行 shell 中设置标志,shell 会在 chmod
执行后立即停止响应。
我怀疑这与 NFS 导出 rootfs 的方式有关,但这只是一个猜测,因此合格的解释和可能的解决方案会有所帮助。
经过一些研究,我会自己回答我的问题。答案很简单。为了使上述工作正常,busybox
二进制文件应归 root:root
所有。最简单的解决方案就是更改所有权。
我正在为 Beagle Bone 板从底层构建一个 Linux 系统。我已经编译了 vanilla 内核并用 busybox
构建了一个基本的根文件系统。系统使用 U-boot 启动,而 rootfs
位于 Linux PC 上并通过 NFS 导出:
/path/to/rootfs 10.42.0.17(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
U-boot bootargs
是:
bootargs console=ttyO0,115200n8 root=/dev/nfs rw nfsroot=${serverip}:/path/to/rootfs,v3,tcp ip=dhcp
我在尝试让 su
为非 root 用户工作时遇到了问题。为了解决这个问题,互联网上的人们建议为 busybox
二进制文件设置 suid
位。
这样做之后:
$ sudo chmod u+s busybox
并验证:
$ ls -la
...
-rwsr-xr-x 1 myuser myuser 1882976 Jan 13 21:47 busybox
...
$ stat -c "%a %n" busybox
4755 busybox
出了点问题。内核正在启动并显示所有常用消息,但最后卡住了,没有显示 login
行。以下是启动顺序的最后几行:
[ 3.776185] IP-Config: Complete:
[ 3.779656] device=eth0, hwaddr=c8:a0:30:c5:80:e9, ipaddr=10.42.0.17, mask=255.255.255.0, gw=10.42.0.1
[ 3.789877] host=10.42.0.17, domain=, nis-domain=(none)
[ 3.795822] bootserver=10.42.0.1, rootserver=10.42.0.1, rootpath=
[ 3.802492] nameserver0=10.42.0.1
[ 3.871575] VFS: Mounted root (nfs filesystem) on device 0:15.
[ 3.879903] devtmpfs: mounted
[ 3.883713] Freeing unused kernel memory: 380K (c07ef000 - c084e000)
如果移除标志,一切都会恢复正常:
....
[ 3.862291] Freeing unused kernel memory: 380K (c07ef000 - c084e000)
10.42.0.17 login:
如果在 Beagle Bone 板本身的 运行 shell 中设置标志,shell 会在 chmod
执行后立即停止响应。
我怀疑这与 NFS 导出 rootfs 的方式有关,但这只是一个猜测,因此合格的解释和可能的解决方案会有所帮助。
经过一些研究,我会自己回答我的问题。答案很简单。为了使上述工作正常,busybox
二进制文件应归 root:root
所有。最简单的解决方案就是更改所有权。