首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在chroot中执行ls命令?

如何在chroot中执行ls命令?
EN

Unix & Linux用户
提问于 2017-06-10 08:20:35
回答 1查看 11.6K关注 0票数 8

我有browser shell 绳带,我正在php中执行shell命令,并将它们重放到浏览器中,我刚刚发现chroot命令,我想在改变的根目录上运行ls,实际上,我需要运行bash -c "ls /"。我尝试过这个(我尝试过没有sudo,但它不起作用):

代码语言:javascript
复制
sudo chroot ~/projects/jcubic/leash ls

但有错误:

代码语言:javascript
复制
chroot: failed to run command ‘ls’: No such file or directory

我是否正确地使用了这个命令?可以在不同的根目录上运行ls吗?

当我尝试在没有sudo的情况下运行chroot时,我得到了以下错误:

代码语言:javascript
复制
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
EN

回答 1

Unix & Linux用户

发布于 2017-06-11 00:06:05

可以在不同的根目录下运行ls,但是ls命令和它所依赖的所有文件必须存在于该根根目录中。没有办法启动ls命令,然后在进程中更改根:ls没有这个特性。

chroot的全部目的是将文件的可见性限制在某个目录下的文件上。当您运行chroot ~/projects/jcubic/leash ls时,chroot命令更改它自己进程的根(更改根目录只影响执行它的进程和它随后运行的任何进程),然后尝试在搜索路径上的目录中运行一个名为ls的可执行文件。因为根目录现在是~/projects/jcubic/leash,所以可执行文件必须出现在~/projects/jcubic/leash/bin这样的目录中。

如果您想拥有一个正常的系统,并在chroot中使用通常的命令,则需要安装一个。脱靴带之类的工具(用于安装Debian系统)或诸如Docker之类的供应工具(它设置了一个可着色的环境,并以其他方式进行限制)可以提供帮助。

如果只需要ls命令,则仍然需要复制比ls更多的内容。要运行ls,您需要复制ls命令以及它所依赖的所有文件。因为ls是一个动态链接的程序,所以您需要它的动态加载程序以及它所依赖的所有动态库。运行ldd /bin/ls列出所需的动态库。例如:

代码语言:javascript
复制
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 (作为busybox-static包在Debian和派生程序中可用)。

代码语言:javascript
复制
cp /bin/busybox .
chroot . ./busybox ls
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/370329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档