曲径通幽论坛

标题: chroot: cannot run command `/bin/bash': No such file or directory [打印本页]

作者: beyes    时间: 2011-4-29 13:12
标题: chroot: cannot run command `/bin/bash': No such file or directory
如果只是单独 chroot 到一个空目录下会看到这样的出错信息:

# chroot chroot/
chroot: cannot run command `/bin/bash': No such file or directory



根据出错的提示知道是没有 bash ,因为 chroot 到一个新的根目录,那么这个新的根目录没有命令解析器肯定是不行的。解决的办法是将 bash 拷贝到你要 chroot 目录的 bin 目录下。但是在拷贝完后,再 chroot 一次,仍然发现还是同样的出错提示,这是因为 bash 的运行需要一些依赖库,通过 ldd 命令可以看到这些依赖库是什么:
# ldd /bin/bash
        linux-gate.so.1 =>  (0x001cf000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x07dbc000)
        libdl.so.2 => /lib/libdl.so.2 (0x009a4000)
        libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0081b000)
        /lib/ld-linux.so.2 (0x007fc000)

所以我们需要将这些相关的库拷贝到要 chroot 目录下的相应位置中,比如也要在该目录中建立一个 lib 目录,然后将 libtermcap.so.2 等库拷贝到其中。这里需要注意的是,我们即使搜索全盘,都不会找到 linux-gate.so.1 这个文件,它只是个虚拟的DSO(virtual DSOdynamically shared object)---一个在每个进程的存储空间(process’ memory)指定的地址点被内核暴露出来的共享对象。也就是说它由内核提供,这里就无需关注太多。


当拷贝完其它的相关库文件到相应的目录后,再 chroot 一下就会看到:
[root@centos beyes]# chroot chroot/
bash-3.2#
bash-3.2# pwd
/

可见已经 chroot 成功,但这只是最基本的,很多命令你也无法运行,这同样是因为它们没有被拷贝进来。此时按 Ctrl + D 可以退出该 shell 环境。





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2