Search code examples
macosmacos-mojave

Is there a way to recreate /dev within a directory on macOS for the purpose of chroot-ing?


I've been experimenting with running apps within a chroot-ed directory.

Many apps and binaries require access to items within /dev, such as /dev/null and /dev/random to work.

Is there a way to recreate or bind mount the /dev filesystem within a directory to this end?


I have tried the following without success: (Where root is the directory I want to chroot into)

$ sudo bindfs -o dev -o allow_other /dev ./root/dev/

Leading to:

$ cat ./root/dev/urandom
cat: ./root/dev/urandom: Operation not permitted


$ mount -t devfs devfs ./root/dev

Leading to:

$ cat ./root/dev/urandom
cat: ./root/dev/urandom: Device not configured


Attempting to manually make the devices with mknod doesn't work either.

$ sudo mknod null c 1 3
$ sudo chmod 666 ./null 
$ cat ./null
cat: ./null: Operation not permitted



Is there a way to either use the existing /dev items within a chroot or to recreate them?

Unfortunately, there doesn't appear to be much documentation of using chroot with OSX/macOS on the internet.

Operating System Details: macOS Mojave, 10.14.6. SIP enabled.


Solution

  • Well, this one is mainly on me being dumb.

    sudo mount -t devfs devfs ./dev

    Works just fine.

    If the above command is ran without root, it will bind the devfs devices within ./dev, but all devices will respond with a "Device not configured" error. If it is ran as root, all ./dev devices will work as expected.