我有一个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#
有人知道这是什么原因吗?