Mount Namespace 与父进程隔离失效

在Linux中,尝试通过clone和mount实现子进程的namespace独立,期望挂载的/tmp仅在子进程中可见,却发现父子进程都能看到。原因在于根目录挂载点类型为MS_SHARED,经修改为MS_PRIVATE后,成功实现隔离。
摘要由CSDN通过智能技术生成

问题

在Linux系统中,使用clone方法创建一个子进程,通过参数指定子进程的namespace独立于父进程:
1: clone() 传入参数CLONE_NEWNS
2: 使用mount()方法在子进程中挂载文件系统 /tmp

期望看到的是/tmp这个新挂载点只在子进程中可见,父进程不可见。但实际情况却发现 /tmp这个新挂载点,在父进程和子进程中均可见。
代码如下:

#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sched.h>
#include <signal.h>
#include <unistd.h>

/* 定义一个给 clone 用的栈,栈大小1M */
#define STACK_SIZE (1024 * 1024)
static char container_stack[STACK_SIZE];

char* const container_args[] = {
   "/bin/bash",
   NULL
};

int container_main(void* arg)
{
   printf("Container - inside the container!\n");
   sethostname("container_test",20); /* 设置hostname */
   /* 直接执行一个shell,以便我们观察这个进程空间里的资源是否被隔离了 */
   //mount("none", "/", NULL, MS_PRIVATE, NULL);
   mount("none", "/tmp", "tmpfs", 0, ""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值