在没有 root 权限的情况下引导 Alpine Linux

主要观点:在 Linux 中创建 chroot 通常需使用 sudo,但通过用户命名空间(user namespaces)和unshare工具,可在不使用超级用户权限的情况下创建 chroot。
关键信息:

  • chroot命令本身及创建 rootfs 和挂载/proc/sys等文件系统都需要 root 权限。
  • pmbootstrap创建可安装手机镜像需设置多个 chroot 及执行很多命令,会多次输入密码。
  • 用户命名空间可隔离安全相关标识符等,unshare可方便操作各种命名空间,是util-linux的一部分。
  • 创建 Alpine Linux rootfs 时,使用apk.static,初始获取apk.static二进制文件无需超级用户权限,但后续操作大多需要,如创建 Alpine 安装、挂载/dev等。
  • 可通过unshare的一些参数创建新的 userns 并将 uid/gid 改为 0 以获得 root 权限,但chown仍可能失败,需修改/etc/subuid/etc/subgid文件。
  • 重映射 uid 后可能导致unshare命令内部的命令无法启动,需将可执行文件复制到/tmp
  • 完成 rootfs 后,仍需解决文件系统挂载和创建文件的问题,可利用 mount 命名空间功能,通过 bind-mount 现有设备节点来过滤不需要的设备。
    重要细节:
  • 文中给出了各种unshare参数的使用示例,如unshare --user --map-users=10000,0,10000 --map-groups=10000,0,10000 --setuid 0 --setgid 0 --wd "${chroot_dir}"等。
  • 展示了如何通过echounshare结合来创建和修改文件,如echo "nameserver a.b.c.d" | unshare... sh -c 'cat > /etc/resolv.conf'
  • 提到代码在~martijnbraam/ambootstrap仓库,后续需解决文件系统复制等问题,且 PinePhone 刷机需实际超级用户权限。
阅读 16
0 条评论