我在 Ubuntu 17.04 上。
挂载命名空间的单一非特权取消共享工作。您可以尝试使用 unshare(1) 命令:
$ unshare -m -U /bin/sh
#
但是,不允许在 unshare 中取消共享:
$ unshare -m -U /bin/sh
# unshare -m -U /bin/sh
unshare: Operation not permitted
#
这是一个基本上可以做同样事情的 C 程序:
#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <sys/mount.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
if(unshare(CLONE_NEWUSER|CLONE_NEWNS) == -1) {
perror("unshare");
return -1;
}
if(unshare(CLONE_NEWUSER|CLONE_NEWNS) == -1) {
perror("unshare2");
return -1;
}
return 0;
}
为什么不允许?我在哪里可以找到有关此的文档?我未能在 unshare 或 clone 手册页和内核 unshare 文档中找到此信息。
是否有允许这样做的系统设置?
我想要达到的目标:
首先取消共享:我想用我自己的版本屏蔽系统上的一些二进制文件。
第二个 unshare:无特权的 chroot。