Mount Namespace
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
挂载命名空间是一个Linux内核特性,它提供了一个进程组所看到的文件系统挂载点的隔离。每个挂载命名空间都有自己的一组文件系统挂载点,对一个命名空间中挂载点的更改不会影响其他命名空间。这意味着在不同挂载命名空间中运行的进程可以对文件系统层次结构有不同的视图。
挂载命名空间在容器化中尤其有用,其中每个容器应该有自己的文件系统和配置,与其他容器和主机系统隔离。
How it works:
当创建一个新的挂载命名空间时,它会用来自其父命名空间的挂载点的副本进行初始化。这意味着在创建时,新的命名空间与其父命名空间共享相同的文件系统视图。然而,命名空间内的任何后续挂载点更改将不会影响父命名空间或其他命名空间。
当进程在其命名空间内修改挂载点时,例如挂载或卸载文件系统,更改是局部的,不会影响其他命名空间。这允许每个命名空间拥有自己的独立文件系统层次结构。
进程可以使用
setns()
系统调用在命名空间之间移动,或使用带有CLONE_NEWNS
标志的unshare()
或clone()
系统调用创建新的命名空间。当进程移动到新命名空间或创建一个时,它将开始使用与该命名空间关联的挂载点。文件描述符和inode在命名空间之间是共享的,这意味着如果一个命名空间中的进程有一个指向文件的打开文件描述符,它可以将该文件描述符传递给另一个命名空间中的进程,并且两个进程将访问同一个文件。然而,由于挂载点的差异,文件的路径在两个命名空间中可能并不相同。
Lab:
Create different Namespaces
CLI
通过挂载新的 /proc
文件系统实例,如果使用参数 --mount-proc
,您可以确保新的挂载命名空间具有 特定于该命名空间的进程信息的准确和隔离的视图。
Docker
检查您的进程所在的命名空间
查找所有挂载命名空间
进入挂载命名空间
此外,您只能以 root 身份进入另一个进程命名空间。并且您不能在没有指向它的描述符的情况下进入其他命名空间(例如 /proc/self/ns/mnt
)。
因为新挂载仅在命名空间内可访问,所以命名空间可能包含只能从中访问的敏感信息。
挂载某些内容
参考文献
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习和实践 GCP 黑客技术:
HackTricks 培训 GCP 红队专家 (GRTE)
Last updated