2021/6/7

build and run a small linux system to test busybox command

follow: linux-kernel busybox homemade linux system
大概就是...
  • download kernel source code,enable RAM initrd, 加大 ramdisk size, build bzImage.
  • download busybox, build static, make installl (create _install),然後修改一個 rootfs 的 directory structure. 然後用這個 _install folder 做出 rootfs 的 image
因為都是 native (x86_64),所以沒什麼問題。之後就可以用 qemu 開機了 (assign kernel and initrd file, and append bootcmd)
then..把 bzImage 和 rootfs.img.gz copy 出來.
qemu-system-x86_64 -kernel ./bzImage -initrd ./rootfs.img.gz -nographic -append "console=ttyS0 root=/dev/ram init=/linuxrc"
qemu default 會用 SDL,開啟 graphic console(雖然也是 console),所以要用 -nographic,然後加上 console=ttyS0,讓 console 從 ttyS0 到 command line console.
mount -o rw,remount /dev/root /
touch /etc/passwd
touch /etc/group
adduser charles
這樣,就可以su - charles,測試 root 和 charles (general user) 對 busybox command 的權限。

測試:

以 poweroff 為例,在 /sbin/poweroff,一樣 link 到 /bin/busybox
charles 執行的化,第一個,會找不到 poweroff,因為 path 中沒有 sbin
如果用 /sbin/poweroff:
poweroff: (null): Operation no permitted
但是,用 ip 來測試,一樣在 /sbin/ip。一樣說 not found,但是用 /sbin/ip 來執行,就可以正常執行了。
所以 poweroff 的 permission ,應該是設在 device 端的。
filesystem level 是沒有辦法限制 一般使用者透過 /sbin/ 來執行系統command

所以發現 busybox 這種 link 的方式,沒辦法限制一般 user 執行某些 root 才能執行的 command

沒有留言:

張貼留言