Ubuntu chroot“没有那个文件或目录”

Ubuntu chroot“没有那个文件或目录”

我有一个 Web 应用程序,我在服务器上创建了一些文件夹并将可执行文件放在那里。然后我尝试使用 chroot 运行它们,但收到一条消息,提示访问被拒绝。
我尝试了一下chmod -R 777 blah blah....,然后收到一条消息,提示我调用的文件夹或文件(sudo chroot mydirectory myfile_inside_Mydirectory)不存在。只有当我在 Web 服务器创建的文件夹上调用 chroot 时才会发生这种情况。我的 Web 应用程序使用 php,我使用:

shell_exec("cp -R /var/www/comp/prison/bin $dir");

shell_exec("cp -R /var/www/comp/prison/lib $dir");

shell_exec("cp /var/www/janitor.out $dir/janitor.out");

shell_exec("sudo chmod -R 777 $dir");

$process = proc_open("sudo chroot $dir janitor.out", $descriptorspec, $pipes);

sudo 不需要密码。

答案1

好吧,我终于发现我将所需的库复制到了错误的文件夹,因为当我第一次测试 chroot 时,我在一台 32 位 Ubuntu 机器上,而我的服务器是 64 位的。因此,我将所需的库和 bin/sh 复制到我想要锁定的目录中的正确文件夹中,它工作得很好。:D 谢谢大家!

答案2

janitor.out 是什么类型的文件?如果它是动态链接的,您还需要链接库,而链接库又可能需要其他库。您可以使用该ldd程序检查需要哪些共享库。例如,输出ldd /bin/ls

    linux-vdso.so.1 =>  (0x00007fffac983000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x00007f8adda8f000)
    librt.so.1 => /lib/librt.so.1 (0x00007f8add887000)
    libacl.so.1 => /lib/libacl.so.1 (0x00007f8add67e000)
    libc.so.6 => /lib/libc.so.6 (0x00007f8add2fb000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f8add0f7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8addccc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f8adced9000)
    libattr.so.1 => /lib/libattr.so.1 (0x00007f8adccd4000)

并且ldd /lib/libacl.so.1: linux-vdso.so.1 => (0x00007fffd462f000) libattr.so.1 => /lib/libattr.so.1 (0x00007f4e348aa000) libc.so.6 => /lib/libc.so.6 (0x00007f4e34527000) /lib64/ld-linux-x86-64.so.2 (0x00007f4e34cd6000) 如果其中一个库不满足,程序将报告“没有这样的文件或目录”,即使程序本身存在。


编辑:在这种情况下,以下更可能是问题所在。我保留上述答案,因为它可能对遇到相同错误消息的人有所帮助。

你在跑步:

sudo chroot $dir janitor.out

janitor.out这将导致 chroot在 (/bin、/sbin、...) 中搜索$PATH。您需要在 janitor.out 前面加上斜杠才能运行janitor.out位于 chroot 根目录中的:

sudo chroot $dir /janitor.out

相关内容