关于chroot的简介,可以参考IBM开发者网站上的这篇理解chroot,本文演示了如何构造一个最简单的chroot环境,本文实验环境为CentOS 6.4 64bit。
1 2 3 4 5 6 7 | [root@os ~]# dd if=/dev/zero of=123.img count=512K bs=20480 [root@os ~]# /sbin/mkfs.ext3 123.img #格式化为ext3时可能会提示123.img is not a block special device.不用管它,直接按y继续 [root@os ~]# mkdir /mnt/123 [root@os ~]# mount -o loop 123.img /mnt/123 [root@os ~]# chroot /mnt/123 chroot: failed to run command `/bin/bash': No such file or directory |
发生了错误,看来chroot环境不存在/bin/bash(事实也的确不存在),那我们从真实系统里拷贝一个过去吧:)
1 2 3 4 | [root@os ~]# mkdir /mnt/123/bin [root@os ~]# cp -av /bin/bash /mnt/123/bin/bash [root@os ~]# chroot /mnt/123 chroot: failed to run command `/bin/bash': No such file or directory |
错误依旧,原因是因为/bin/bash需要调用相关的库,因新环境不存在相关的库文件,因此bash不能运行,从而报上述错误,解决方法是利用ldd /bin/bash查找到其所需要的运行库
1 2 3 4 5 | [root@os ~]# for i in `ldd /bin/bash`;do echo $i;done |grep -v = |grep -v 0x |grep /|xargs ls -l lrwxrwxrwx. 1 root root 10 Oct 23 18:25 /lib64/ld-linux-x86-64.so.2 -> ld-2.12.so lrwxrwxrwx. 1 root root 12 Oct 23 18:25 /lib64/libc.so.6 -> libc-2.12.so lrwxrwxrwx. 1 root root 13 Oct 23 18:25 /lib64/libdl.so.2 -> libdl-2.12.so lrwxrwxrwx. 1 root root 15 Oct 22 22:44 /lib64/libtinfo.so.5 -> libtinfo.so.5.7 |
把如上这些库文件和软链接全部都拷入新环境
1 2 3 4 5 6 7 | [root@os ~]# mkdir /mnt/123/lib64/ [root@os ~]# cp -av /lib64/ld-linux-x86-64.so.2 /lib64/ld-2.12.so \ > /lib64/libc.so.6 /lib64/libc-2.12.so /lib64/libdl.so.2 \ > /lib64/libdl-2.12.so /lib64/libtinfo.so.5 \ > /lib64/libtinfo.so.5.7 /mnt/123/lib64 \ > /mnt/123/lib64 …… |
然后再试一次
1 2 3 4 5 6 7 | [root@os ~]# chroot /mnt/123 bash-4.1# 切换成功! bash-4.1# ls 切换过来任何命令都无法使用! bash: ls: command not found bash-4.1# exit 也可按Ctrl + D键退出环境 exit [root@os ~]# |