有没有办法取消unshare(2)?

有没有办法取消unshare(2)?

如果我打电话unshare ./fooprogram,有没有办法在fooprogram运行时取消取消共享?

答案1

如果有办法的话,那就是内核漏洞。

在撰写此评论时,最新的内核(5.7.2),有关于此事的文件

unshare()系统调用向 Linux 线程模型添加了一个原语,允许线程有选择地“取消共享”在创建时共享的任何资源。

[…]

unshare()对于想要控制共享资源而不创建新进程的应用程序来说,增强了 Linux 线程的实用性。unshare()是对 Linux 上可用原语集的自然补充,这些原语将进程/线程的概念实现为虚拟机。

稍后继续:

unshare()可用于使用内核的每进程命名空间机制来实现多实例化目录。多实例化目录,例如每个用户和/或每个安全上下文实例/tmp/var/tmp用户主目录的每个安全上下文实例,在使用这些目录时隔离用户进程。使用unshare(),PAM 模块可以轻松地在用户登录时设置私有命名空间。

该文档没有明确表示“unshare()无法恢复”,但确实提到了一种合法用途unshare()可以用于安全目的。

人们可能会认为,如果能够扭转这一局面,就会违背这一目的。

相关内容