且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Linux unshare命名的一些例子

更新时间:2022-09-14 20:24:36

首先使用man查看unshare帮助:


Linux unshare命名的一些例子


run program with some namespaces unshared from parent


看下这几个参数的功能。


–fork:

执行unshare的进程fork一个新的子进程,在子进程里执行unshare传入的参数


Linux unshare命名的一些例子


–pid:


不从父进程继承pid命名空间。也就是说,在子进程内执行ps,无法看到父进程原有的进程。


Linux unshare命名的一些例子


–mount-proc: 这个先不解释。

Linux unshare命名的一些例子



执行命令:

sudo unshare --fork --pid --mount-proc bash


注意到share提示符从vagrant变成了root。


Linux unshare命名的一些例子


此时在生成的子进程里,whoami返回root。



Linux unshare命名的一些例子

从父进程的命令ps -ejf不能看出这个父子进程关系:


Linux unshare命名的一些例子


因为子进程已经隔离了pid namespace,所以子进程的ps 无法看到父进程里能看到的那些进程列表。


Linux unshare命名的一些例子


最后来看–mount-proc:


这个选项能确保创建了 PID 和 Mount namespace 后,自动挂载 /proc 文件系统,无需我们手动执行 mount -t proc proc /proc 命令。


父进程10945对应的/proc/10945:


Linux unshare命名的一些例子


子进程的/proc文件夹下面,看不到父进程pid对应的文件夹:

Linux unshare命名的一些例子

这个unshare也是Linux容器工作的基础之一。