理解 chroot
2009-07-12 08:32:13 来源:WEB开发网[1] find -xdev / -exec rm '{}' ';
[2] cd /newmount; mount --move . /; chroot .
switch_root 和 run-init 完成了类似清单 6中的功能,删除 rootfs 的全部内容以释放空间,以及挂载新的根文件系统并进行切换。在 busybox 和 klibc中也有提供 chroot 命令,只是功能上与 Coreutils (GNU core utilities) 包含的 chroot 有稍许差异。
编写一个 chroot
上面介绍了 chroot 及其使用,但是编写一个简单的 chroot 并不复杂,下面我们就尝试编写chroot 以此来更好的认识 chroot 的处理过程,先编写一个粗略的 chroot 然后再完善它的功能。chroot 的编写涉及了2个函数,chroot() 以及 chdir(),它们都包含在 unistd.h 头文件中。
清单 7. 编写 chroot 涉及的2个函数
#include <unistd.h>
int chroot(const char *path);
int chdir(const char *path);
chroot() 将切换参数 path 所指位置为根目录 (/),chdir() 用来将当前的工作目录改变成以参数path 所指的目录。以此我们可以编写一个非常粗略的 `chroot`。
清单 8. 粗略的 `chroot`
#include <unistd.h>
int main(int argc, char *argv[])
{
chroot(".");
chdir("/");
char *arrays[]={"ash",NULL};
execvp("ash", arrays);
return 0;
}
这个粗略的 `chroot` 仅能切换当前位置为根目录,同时默认执行 ash shell,不包含任何的错误处理及警告。编写并保存代码为 test.c。在清单 9 中,展示了这个粗略 `chroot` 的使用情况,成功的进行了根目录的切换。
更多精彩
赞助商链接