如何在chroot中执行“ ls”命令?


8

我有浏览器shell 皮带,并且正在php中执行shell命令,并将它们重现到浏览器中,我刚刚发现chroot命令,并且想ls在更改后的root上的根目录上运行,实际上,我需要运行bash -c "ls /"。我已经尝试过了(我没有sudo尝试过,但是没有用):

sudo chroot ~/projects/jcubic/leash ls

但出现错误:

chroot: failed to run command ‘ls’: No such file or directory

我如何正确使用此命令?是否可以在其他根目录上运行ls?

当我尝试在不使用sudo的情况下运行chroot时,出现此错误:

chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted

3
你知道该怎么chroot办吗?
佐藤桂

1
@SatoKatsura如果我正确理解,我会将/目录更改为另一个目录。我是否需要bin在该目录中才能运行命令?
jcubic

8
是的:您需要chroot预先用所有要运行的二进制文件,所需的所有库以及动态加载程序(如果您的操作系统使用一个)来填充监狱。chroot如您所知,只有root可以运行。
佐藤桂

Answers:


12
chroot: failed to run command ‘ls’: No such file or directory

要在chroot中运行任何命令,您需要在chroot中使用此程序(因为它无法使用/文件系统的安装程序)。

最简单的方法是将/usr/bin/lsfrom 复制到/home/kuba/projects/jcubic/leash/usr/bin/(您还将需要依赖的共享库:)ldd /usr/bin/ls


我在help.ubuntu.com上找到了这篇文章,我应该如何运行chroot,因为我找不到该信息。我应该跑步chroot lucid /bin/bash -c "ls /"还是chroot /var/chroot /bin/bash -c "ls /"
jcubic

@jcubic很大程度上取决于您要实现的目标。chroot如果您对语法有疑问,可以从的手册页开始。其他命令(bash)同样。
Jakuje

5

可以ls在其他根目录中运行,但是ls命令及其依赖的所有文件都必须存在于该根目录中。无法启动ls命令,然后在该过程中更改根目录:ls没有此功能。

chroot的全部目的是将文件的可见性限制为某个目录下的文件。当您运行时chroot ~/projects/jcubic/leash ls,该chroot命令将更改其自身进程的根(更改根目录只会影响执行该进程的进程及其随后运行的任何进程),然后尝试运行ls在搜索路径中的目录中调用的可执行文件。由于现在是根目录~/projects/jcubic/leash,因此可执行文件必须存在于目录中,例如~/projects/jcubic/leash/bin

如果要在chroot中使用常规命令使用普通系统,则需要安装一个。诸如debootstrap(用于安装Debian系统)之类的工具或诸如Docker(用于设置chroot并以其他方式限制的环境)之类的置备工具可以提供帮助。

如果您只想使用该ls命令,则仍然需要复制多个ls。要运行ls,您需要复制ls命令及其依赖的所有文件。由于ls是动态链接程序,因此需要它的动态加载程序以及它依赖的所有动态库。运行ldd /bin/ls以列出所需的动态库。例如:

mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls

另外,一种更简单的探索方法是获取静态链接的二进制文件,例如BusyBox(在Debian和衍生产品中作为busybox-static软件包提供)。

cp /bin/busybox .
chroot . ./busybox ls
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.