使用chroot

chroot是一个比较有用的命令,它可以构造一个相对封闭的环境(sandbox),在这个封闭系统里运行命令而不必担心会对原有系统造成影响。

Linux/Unix系统里的每个命令或者进程,都有一个 当前的运行目录 (current working directory, i.e., root directory), 这个目录可以使用  chroot来改变。

chroot改变的目录后,在这个目录下面运行的进程无法不能访问 root directory 之外的文件。

下面以一个例子说明。

1. 创建目录 /home/charles/tmp/jail

这个目录将会作为一个封闭的测试环境。

2.在测试目录下创建子目录:

$ mkdir -v -p {bin,lib/i386-linux-gnu}
mkdir: created directory ‘bin’
mkdir: created directory ‘lib’
mkdir: created directory ‘lib/i386-linux-gnu’

把  /bin/bash 和 /bin/ls 拷贝到测试目录:

~/tmp/jail$ cp -v /bin/{bash,ls} ~/tmp/jail/bin/
‘/bin/bash’ -> ‘/home/charles/tmp/jail/bin/bash’
‘/bin/ls’ -> ‘/home/charles/tmp/jail/bin/ls’
3. 查看 ls 用到的共享库:

ldd /bin/bash
	linux-gate.so.1 =>  (0xb771c000)
	libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb76d8000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb76d3000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7522000)
	/lib/ld-linux.so.2 (0xb771d000)
 ldd /bin/bash
	linux-gate.so.1 =>  (0xb7772000)
	libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb772e000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7729000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7578000)
	/lib/ld-linux.so.2 (0xb7773000)

把用到的共享库拷贝到对应的测试目录:

$ cp -v /lib/i386-linux-gnu/libtinfo.so.5 /lib/i386-linux-gnu/libdl.so.2  /lib/i386-linux-gnu/libc.so.6 ~/tmp/jail/lib/i386-linux-gnu/
‘/lib/i386-linux-gnu/libtinfo.so.5’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libtinfo.so.5’
‘/lib/i386-linux-gnu/libdl.so.2’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libdl.so.2’
‘/lib/i386-linux-gnu/libc.so.6’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libc.so.6’
$ cp -v /lib/ld-linux.so.2 ~/tmp/jail/lib/
‘/lib/ld-linux.so.2’ -> ‘/home/charles/tmp/jail/lib/ld-linux.so.2’

然后再用 ldd对测试目录下的  ls 和 bash确认一下:

~/tmp/jail/bin$ ldd ./ls
	linux-gate.so.1 =>  (0xb7791000)
	libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb774b000)
	libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb7742000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7591000)
	libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb7553000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb754e000)
	/lib/ld-linux.so.2 (0xb7792000)
	libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb7548000)
把落下的几个库文件拷过去:

~$ cp -v -f  /lib/i386-linux-gnu/libselinux.so.1 /lib/i386-linux-gnu/libpcre.so.3  /lib/i386-linux-gnu/libacl.so.1 /lib/i386-linux-gnu/libattr.so.1 ~/tmp/jail/lib/i386-linux-gnu/
‘/lib/i386-linux-gnu/libselinux.so.1’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libselinux.so.1’
‘/lib/i386-linux-gnu/libpcre.so.3’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libpcre.so.3’
‘/lib/i386-linux-gnu/libacl.so.1’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libacl.so.1’
‘/lib/i386-linux-gnu/libattr.so.1’ -> ‘/home/charles/tmp/jail/lib/i386-linux-gnu/libattr.so.1’

4. 使用 chroot进入测试目录:

~$ sudo chroot /home/charles/tmp/jail/ /bin/bash
bash-4.3# 
:~$ sudo chroot /home/charles/tmp/jail/ /bin/bashbash-4.3# ls
bin  lib
bash-4.3# pwd
/

参考:
http://www.cyberciti.biz/faq/unix-linux-chroot-command-examples-usage-syntax/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值