Я строю систему Linux снизу для платы Beagle Bone. Я скомпилировал ванильное ядро и построил базовую корневую файловую систему с 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:
Если установить флаг из работающей оболочки на самой плате Beagle Bone, оболочка перестает отвечать сразу после выполнения chmod. Я подозреваю, что это как-то связано с тем, как NFS экспортирует rootfs, но это всего лишь предположение, поэтому было бы полезно квалифицированное объяснение и возможное решение.