我正在尝试在 Android 终端模拟器中建立一个有效的 Linux 生态系统,但实际上没有 root 访问权限。这意味着我需要调整每个引用,例如/bin/sh
在我尝试编译和使用的每个程序的源代码中。
在启动应用程序之前进行设置LD_PRELOAD
允许我修改 libc 函数的行为,就像 fakeroot 一样;所以我可能只是编写一个库,它将所有具有绝对路径名的系统调用(例如 /dev、/sys 和 /proc 除外)重定向到我有权写入的文件夹。
该库必须:
- 重写所有路径名,使它们留在假根目录中
- 尽管如此,允许来自该目录之外的引用,因为 eg
procfs
仍然会提供系统绝对路径名 - 确保子进程不会意外取消设置 LD_PRELOAD
但结果会如何?对于低级代码,我不是专家,所以:
- 我如何能够始终如一地模拟这样一个“伪造的根目录”?我是不是一开始就被不合作的内核注定了?
- “假根”内的进程意外突破它有多容易?我不是在谈论故意试图通过汇编代码逃脱。
编辑:也许这个库甚至可以作为 libc 的替代品,只要我将我在该系统上编译的所有软件链接到它?