Chroot监狱:在64位系统上“找不到命令”

时间:2019-07-09 16:23:39

标签: linux 64-bit chroot

我有一个chroot监狱,多年来我一直在32位系统上使用它。我最近将其复制到64位系统中,重新编译,出于测试目的在/ tmp / jail中设置了jail目录,在其中我绑定安装了/ lib,/ dev和/ proc,并设置了包含副本的bin目录/ bin / ls。

在/ tmp / jail中,我可以运行bin / ls,这有效。监狱程序将/ tmp / jail设置为root,并尝试运行/ bin / ls(即/ tmp / jail / bin / ls),其返回结果为“无法运行命令/ bin / ls:无此类文件或目录”

监狱的简化版本如下:

int main (int argc, char** argv) {
  char* root = argv[1];
  char* dir  = argv[2];
  char* path = argv[3];

  fprintf(stderr,"Changing root directory to %s\n",root);
  if (chroot(root)) {
    fprintf(stderr,"Cannot change root to %s: %s\n",
                   root,strerror(errno));
    return 1;
  }
  fprintf(stderr,"Directory listing of %s:\n",dir);
  if (!listdir(dir)) {
    return 1;
  }
  fprintf(stderr,"Executing %s\n",path);
  execv(path,argv+4);
  fprintf(stderr,"Cannot run command %s: %s\n",
                 path,strerror(errno));
  return 1;
}

我还没有显示listdir(),该功能可以执行目录列表的完整性检查。这是我编译并运行时发生的情况:

root@xubuntu:/tmp/jail# gcc jail.c 
root@xubuntu:/tmp/jail# ./a.out /tmp/jail /bin /bin/ls
Changing root directory to /tmp/jail
Directory listing of /bin:
    /bin/ls
    /bin/od
    /bin/ldd
Executing /bin/ls
Cannot run command /bin/ls: No such file or directory

如果我在不使用监狱的情况下使用ls的本地副本,则会按预期得到此信息:

root@xubuntu:/tmp/jail# ./bin/ls ./bin
ldd  ls  od
root@xubuntu:/tmp/jail# 

有人知道这是什么原因吗?

0 个答案:

没有答案