如何在 C 程序中临时 运行 在 chroot 环境中?
How do I run in chroot environment temporarily in a C program?
我想做的基本上如下:
some_function_1();
chroot("/some_other_root");
some_function_2();
//Get back to main root somehow...
some_function_3();
这样只有some_function_2()在chroot环境下运行,其他代码在正常环境下运行。
这种事情可以在一个进程内完成吗?还是我需要分叉到一个新流程中才能做到这一点?
根目录是一个属性的进程。每个进程,在用户区,有两个inode,用于启动文件搜索解析算法:
- 根目录 inode 保存在以该目录为根 inode 的每个进程的用户区域中的引用中。
- 当前工作目录,也作为用户区的参考进行维护。
两个 inode 都用作解析以 /
开头(从根 inode)和不以 /
开头(对于当前目录 inode)的文件名的起点。
当前目录的更改只需要用户对所有导航的目录具有x
权限(使用当前根或当前目录索引节点作为起点)但是chroot()
系统调用需要用户 root 权限,因此无法在普通用户进程上执行。
无论如何,正如您可能已经猜到的那样,作为一个进程的 属性,该进程中的单个函数不能具有不同的根或当前目录 inode。所以从我的角度来看,你的计划是不可能的。
我想做的基本上如下:
some_function_1();
chroot("/some_other_root");
some_function_2();
//Get back to main root somehow...
some_function_3();
这样只有some_function_2()在chroot环境下运行,其他代码在正常环境下运行。
这种事情可以在一个进程内完成吗?还是我需要分叉到一个新流程中才能做到这一点?
根目录是一个属性的进程。每个进程,在用户区,有两个inode,用于启动文件搜索解析算法:
- 根目录 inode 保存在以该目录为根 inode 的每个进程的用户区域中的引用中。
- 当前工作目录,也作为用户区的参考进行维护。
两个 inode 都用作解析以 /
开头(从根 inode)和不以 /
开头(对于当前目录 inode)的文件名的起点。
当前目录的更改只需要用户对所有导航的目录具有x
权限(使用当前根或当前目录索引节点作为起点)但是chroot()
系统调用需要用户 root 权限,因此无法在普通用户进程上执行。
无论如何,正如您可能已经猜到的那样,作为一个进程的 属性,该进程中的单个函数不能具有不同的根或当前目录 inode。所以从我的角度来看,你的计划是不可能的。