我有浏览器 shell leash,我正在 php 中执行 shell 命令并将它们返回到浏览器,我刚刚发现了 chroot 命令,我想ls在更改根目录的根目录上运行,实际上我需要运行bash -c "ls /". 我试过这个(我试过没有 sudo 但它不起作用):
sudo chroot ~/projects/jcubic/leash ls
Run Code Online (Sandbox Code Playgroud)
但有错误:
chroot: failed to run command ‘ls’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我正确使用这个命令吗?是否可以在不同的根目录上运行 ls?
当我尝试在没有 sudo 的情况下运行 chroot 时,出现此错误:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
Jak*_*uje 13
chroot: failed to run command ‘ls’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
要在 chroot 中运行任何命令,您需要在 chroot 中提供此程序(因为它不能使用安装在/文件系统中的程序。
最简单的方法是将/usr/bin/lsfrom复制到/home/kuba/projects/jcubic/leash/usr/bin/(您还需要依赖的共享库:)ldd /usr/bin/ls。
可以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
Run Code Online (Sandbox Code Playgroud)
或者,一种更简单的探索方法是获取静态链接的二进制文件,例如BusyBox(在 Debian 和衍生产品中作为busybox-static包提供)。
cp /bin/busybox .
chroot . ./busybox ls
Run Code Online (Sandbox Code Playgroud)