如果我打电话unshare ./fooprogram
,有没有办法在fooprogram
运行时取消取消共享?
答案1
如果有办法的话,那就是内核漏洞。
在撰写此评论时,最新的内核(5.7.2),有关于此事的文件:
unshare()
系统调用向 Linux 线程模型添加了一个原语,允许线程有选择地“取消共享”在创建时共享的任何资源。[…]
unshare()
对于想要控制共享资源而不创建新进程的应用程序来说,增强了 Linux 线程的实用性。unshare()
是对 Linux 上可用原语集的自然补充,这些原语将进程/线程的概念实现为虚拟机。
稍后继续:
unshare()
可用于使用内核的每进程命名空间机制来实现多实例化目录。多实例化目录,例如每个用户和/或每个安全上下文实例/tmp
,/var/tmp
或 用户主目录的每个安全上下文实例,在使用这些目录时隔离用户进程。使用unshare()
,PAM 模块可以轻松地在用户登录时设置私有命名空间。
该文档没有明确表示“unshare()
无法恢复”,但确实提到了一种合法用途unshare()
可以用于安全目的。
人们可能会认为,如果能够扭转这一局面,就会违背这一目的。