我在chroot jail中执行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。
有任何解决这个问题的建议吗?
答案 0 :(得分:1)
关于共享库无法访问,您可能是正确的。设置chroot jail通常涉及将/bin
,/usr/bin
,/lib
和/usr/lib
的部分复制到并行目录结构中。
更简单的替代方法是仅使用静态链接的可执行文件。在许多Linux系统上,将有一个名为busybox
的静态链接可执行文件,它提供许多Unix命令的基本功能,包括ls
。像busybox ls -l
一样调用它可以提供与常规ls
程序类似的输出,而无需访问chroot jail之外的附加共享库。