复制二进制文件及其依赖项后,“chroot”bash 不起作用

复制二进制文件及其依赖项后,“chroot”bash 不起作用

我已经查看了现有的问题和答复,但没有一个对我的案例起作用。所以我提出一个新问题。

操作系统: Debian

这是我的步骤:

首先,复制/bin/bash

$ sudo mkdir -p /mychroot/bin
$ sudo cp /bin/bash /mychroot/bin/

然后,找到依赖项:

$ sudo ldd /bin/bash
    linux-vdso.so.1 (0x00007ffd807ec000)
    libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f00c86fa000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f00c86f4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f00c8520000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f00c8869000)

复制动态链接的依赖项。如果我复制到错误的目录中,我会尝试所有这些:

$ sudo mkdir -p /mychroot/lib/x86_64-linux-gnu/
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib/x86_64-linux-gnu/
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib/x86_64-linux-gnu/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib/x86_64-linux-gnu/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib/x86_64-linux-gnu/libc.so.6'
# copy deps into lib64 (just in case)
$ sudo mkdir -p /mychroot/lib64
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib64
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib64/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib64/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib64/libc.so.6'
# copy deps into lib (just in case)
$ sudo mkdir -p /mychroot/lib
$ sudo ldd /bin/bash | grep "=>" | awk '{print $3}' | xargs -I '{}' sudo cp -v '{}' /mychroot/lib
'/lib/x86_64-linux-gnu/libtinfo.so.6' -> '/mychroot/lib/libtinfo.so.6'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/mychroot/lib/libdl.so.2'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/mychroot/lib/libc.so.6'

跑步chroot

$ sudo chroot /mychroot
chroot: failed to run command ‘/bin/bash’: No such file or directory

任何想法?


更新:意识到我现在需要复制所有文件。尝试sudo cp -r /lib /lib64 /mychroot进行测试,但仍然无法正常工作。

答案1

原来是/lib64/ld-linux-x86-64.so.2库丢失了。这些共享库也应该在正确的目录中。

这是最终对我有用的方法(稍微改变了我创建 chroot 环境的位置,但这很简单):

$ mkdir -p ~/mychroot/{bin,lib,lib64}

$ cp /bin/bash ~/mychroot/bin/bash

$ ldd /bin/bash
linux-vdso.so.1
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

$ cp --parent {/lib/x86_64-linux-gnu/libtinfo.so.6,/lib/x86_64-linux-gnu/libdl.so.2,/lib/x86_64-linux-gnu/libc.so.6,/lib64/ld-linux-x86-64.so.2} ~/mychroot

$ sudo chroot ~/mychroot /bin/bash

相关内容