1

我在 chroot 监狱中执行 shell 命令时遇到问题。这是一个例子:

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>

int main()
{
   if (geteuid() == 0)    // check root privileges
   {
      chroot("/bin");
      chdir("/");

      execl("/ls", "ls", "-l",  (char *) NULL); // "/ls" should be equivalent to "/bin/ls"
      perror(strerror(errno));
   }

   else
      printf("Permission denied\n");

   return 0;
}

问题是exec:根据errno,错误是“没有这样的文件或目录”。如果我使用 exec("/bin/ls", ...)

我认为“ls”不能使用他需要的共享库,因为 chroot jail。

有什么建议可以解决这个问题吗?

4

1 回答 1

1

关于共享库无法访问,您可能是对的。设置 chroot 监狱通常涉及将 、 、 和 的部分复制/bin/usr/bin并行/lib目录/usr/lib结构中。

一个更简单的替代方法是仅使用静态链接的可执行文件。在许多 linux 系统上会有一个静态链接的可执行文件busybox,它提供许多 Unix 命令的基本功能,包括ls. 像调用它一样调用它可以busybox ls -l提供与常规程序类似的输出,ls而无需访问 chroot 监狱之外的其他共享库。

于 2012-07-06T20:29:36.740 回答