我在Ubuntu 17.04上。
单个未优先取消共享的安装命名空间有效。您可以尝试使用unshare(1)命令:
$ unshare -m -U /bin/sh
#
但是,不允许在不共享内进行不共享:
$ 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;
}
为什么不允许呢?在哪里可以找到有关此文档的文档?我无法在取消共享或克隆手册页以及内核取消共享文档中找到此信息。
是否存在允许这样做的系统设置?
我要实现的目标:
第一次取消共享:我想用自己的版本屏蔽系统上的一些二进制文件。
第二个取消共享:未优先使用的chroot。
最佳答案
我在这里有些猜测,但我认为原因是UID映射。为了执行它,必须满足某些条件(来自user_namespaces
手册页):
我相信发生的事情是,您第一次运行时,映射与父UID的映射匹配。但是,第二次却没有,并且这使系统调用失败。
在unshare(2)手册页上: