Since linux v6.7 and commit 21ca59b365c0 ("binfmt_misc: enable sandboxed mounts"), binfmt_misc can be mountable in a non-initial user namespace by a non privileged user. Extend unshare to manage it: - add --mount-binfmt[=<dir>] to mount binfmt_misc filesystem, this results in clearing inherited interpreters from the previous namespace - add -l, --load-interp <file> to load a binfmt_misc interpreter at startup. The interpreter is loaded from the initial fileystem if the 'F' flags is provided, otherwise from inside the new namespace This makes possible to start a chroot of another architecture without being root. For instance: With 'F' flag, load the interpreter from the initial namespace: $ /bin/qemu-m68k-static --version qemu-m68k version 8.2.2 (qemu-8.2.2-1.fc40) Copyright (c) 2003-2023 Fabrice Bellard and the QEMU Project developers $ unshare --map-root-user --fork --pid --load-interp=":qemu-m68k:M::\\x7fELF\\x01\\x02\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x04:\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff:/bin/qemu-m68k-static:OCF" --root=chroot/m68k/sid # QEMU_VERSION= ls qemu-m68k version 8.2.2 (qemu-8.2.2-1.fc40) Copyright (c) 2003-2023 Fabrice Bellard and the QEMU Project developers # /qemu-m68k --version qemu-m68k version 8.0.50 (v8.0.0-340-gb1cff5e2da95) Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers Without 'F' flag, from inside the namespace: $ unshare --map-root-user --fork --pid --load-interp=":qemu-m68k:M::\\x7fELF\\x01\\x02\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x04:\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff:/qemu-m68k:OC" --root=chroot/m68k/sid # QEMU_VERSION= ls qemu-m68k version 8.0.50 (v8.0.0-340-gb1cff5e2da95) Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers # /qemu-m68k --version qemu-m68k version 8.0.50 (v8.0.0-340-gb1cff5e2da95) Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers Laurent Vivier (2): unshare: mount binfmt_misc unshare: load binfmt_misc interpreter include/pathnames.h | 2 ++ sys-utils/unshare.1.adoc | 13 ++++++++ sys-utils/unshare.c | 64 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 78 insertions(+), 1 deletion(-) -- 2.45.2