Chroot 简介

chroot,既是Linux的一条命令,也是它的一个系统调用。它的作用就是就是改变当前环境的根目录到一个文件夹,这个文件夹之外的东西,对于当前环境都是不可见的。因此若是运行不信任的代码或程序,使用chroot作为一个安全沙箱是个很好的选择。这里我们简单介绍一下使用chroot的方法和需要注意的问题,并提供一些跳出chroot环境的方法。

Chroot命令

chroot(1)这条命令在大多数Unix/Linux系统中都能找到。它的作用是将根目录改变到一个新文件夹下并且运行一个shell。因此它要求这个新文件夹下至少有一个可运行的shell。其实大多数情况下,chroot后的文件夹结构都类似于一个小型的Linux系统,例如下面有lib、usr、bin等文件夹。这里我们介绍怎样创建一个最小的环境来使用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拷贝过去。一般bash都在/bin文件夹下,如果不能确定,可以使用下面的命令来查找:

whereis bash

然后将bash拷贝到新目录中的相应位置:

cp /bin/bash bin

只拷贝这一个文件是不够的,因为一般来说,bash这个程序是通过动态链接来编译的,所以我们要将所包含的库文件也拷贝过去。使用ldd(1)命令可以查看bash所需要的库文件:

ldd /bin/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参数的详细作用可以使用man chroot命令来查看。在chroot之后,我们可以随便输入一些命令,可以发现很多在新环境中是没有的。而一直执行cd ..的命令,也只能在newroot这个文件夹中。然而在新环境中来开,newroot就是根目录。

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

使用这种方法来chroot除了可以运行不受信任的代码之外,还可以作为一个编译环境来免受外部环境的污染,例如LFS(Linux From Scrach)中的用法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值