Busybox и SUID для корневой файловой системы по NFS


Я строю систему Linux снизу для доски из кости бигля. Я скомпилировал ядро vanilla и построил базовую корневую файловую систему с помощью busybox. Система загружается с U-boot, в то время как rootfs находится на ПК Linux и экспортируется через 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. Чтобы обойти проблему, люди через интернет предлагают установить бит suid для двоичного кода busybox. После этого:

$ 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: 

Если флаг устанавливается внутри бегущей оболочки на самой доске из кости бигля, оболочка является остановка ответа сразу после выполнения chmod. Я подозреваю, что это как-то связано с тем, как NFS экспортирует rootfs, но это только предположение, поэтому квалифицированное объяснение и возможное решение было бы полезно.

1 7

1 ответ:

После некоторого исследования я сам отвечу на свой вопрос. Ответ очень прост. Для того, чтобы вышеперечисленное работало, двоичный файл busybox должен принадлежать root:root. Самое простое решение-просто сменить владельца.