linux下根目录切换隔离chroot工具小结

时间:2022-03-29 00:49:39

1.chroot

       chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。


2.chroot命令的使用

      chroot这条命令在大多数Unix/Linux系统中都能找到。它的作用是将根目录改变到一个新文件夹下并且运行一个shell。因此它要求这个新文件夹下至少有一个可运行的shell。这里我们介绍怎样创建一个最小的环境来使用chroot命令:

      首先,我们希望这个文件夹的结构是类似于Linux基本的系统结构,这样chroot后的环境可以作为一个基本的Linux环境来使用。所以用下面的命令先创建一些新文件夹:

mkdir newroot
cd newroot
mkdir bin
mkdir lib
mkdir usr
mkdir usr/bin
mkdir usr/lib
这样就建立了一些必须的文件夹。其中bin和usr/bin是放二进制文件的,而lib和usr/lib是存放链接库文件。

       前面说过了,chroot后的环境至少需要一个可以运行的shell,我们可以直接将自己系统中的bash拷贝过去。可以使用whereis命令找出bash工具所在的位置。

cp /bin/bash bin  #将bash文件拷贝到chroot环境
       只拷贝这一个文件是不够的,因为一般来说,bash这个程序是通过动态链接来编译的,所以我们要将所包含的库文件也拷贝过去。使用ldd命令可以查看bash所需要的库文件,在我的系统中这条命令的输出是:

    linux-vdso.so.1 =>  (0x00007fff46bff000)
libreadline.so.6 => /lib/libreadline.so.6 (0x00007fca39fa9000)
libncursesw.so.5 => /usr/lib/libncursesw.so.5 (0x00007fca39d4c000)
libdl.so.2 => /lib/libdl.so.2 (0x00007fca39b48000)
libc.so.6 => /lib/libc.so.6 (0x00007fca397a7000)
/lib/ld-linux-x86-64.so.2 (0x00007fca3a1ef000)
然后根据输出来拷贝库文件到相应的文件夹,

cp /lib/libreadline.so.6 lib
cp /usr/lib/libncursesw.so.5 usr/lib
cp /lib/libdl.so.2 lib
cp /lib/libc.so.6 lib
cp /lib/ld-linux-x86-64.so.2 lib
这样就可以使用chroot命令来chroot到新目录了(需要root权限):

chroot . /bin/bash
      在chroot之后,我们可以随便输入一些命令,可以发现很多在新环境中是没有的。而一直执行cd ..的命令,也只能在newroot这个文件夹中。然而在新环境中来开,newroot就是根目录。

       显然单纯这样的一个环境是没有多大用途的。在新环境中需要什么软件和工具,可以仿照上面移植bash的方法,来配置到新环境中。如果需要一个比较全面的shell环境,可以考虑使用busybox。


参考资料来源于:

http://www.binwang.me/2012-03-12-chroot.html
https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/