如何在C编程中使用chroot函数?

我知道在linux下使用命令“chroot”需要一些文件或目录,比如usrbin等等。 但是当我在C中使用函数chroot()时,是否需要这些文件?

这里是我的代码,其中“hw.out”是一个刚刚打印“Hello,world”的二进制文件。 我编译并运行它作为根,但它没有打印“你好,世界”。 我还应该做什么? 谢谢!

 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char *argv[]) { int result = chroot("."); if(result == 0) printf("Chroot Succese.\n"); char *arrays[]={"./hw.out",NULL}; execvp("./hw.out", arrays); return 0; } 

execvp最有可能失败,可能与ENOENT: no such file or directory ,如果hw.out是一个动态链接的可执行文件。

为了达到这个目的, hw.out所需的所有库都需要在chroot ed环境中找到。

尝试静态链接hw.out ,它应该工作。 (并且在execvp之后添加错误检查,以查看在返回后调用之后的errno 。)

请测试你的hw.out可以使用命令行chroot。

也许hw.out是动态链接的,缺少chroot目录下的一些库或ld-linux.so

Nitpicks 1,execvp后return 0的点是什么? 除非出现错误,否则不会执行。 我宁愿有perror("can't exec"); return 1; perror("can't exec"); return 1;

Nitpick 2,chroot()不会改变工作目录,虽然它适用于你的情况,因为你正在chroot to "." ,如果以后将其更改为chroot(“somedir”),它将无法正常工作。

确保hw.out是正确的直接。 如果使用库,静态链接可能更容易。 否则需要在chroot之后启用它可以访问动态库。