相关疑难解决方法(0)

每个进程私有文件系统挂载点

我正在检查unshare命令并根据它的手册页,

   unshare - run program with some namespaces unshared from parent
Run Code Online (Sandbox Code Playgroud)

我还看到有一种命名空间被列为,

 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.
Run Code Online (Sandbox Code Playgroud)

这个mount 命名空间的目的究竟是什么?我试图在一些例子的帮助下理解这个概念。

linux process mount namespace

23
推荐指数
1
解决办法
2万
查看次数

使用 unshare 模拟 chroot

我正在尝试为最小的源代码 linux 发行版编写引导程序。

我想在一个类似 chroot 的环境中构建。这应该简化包装。在这一点上,我不关心安全性。引导程序不应需要任何非标准的第三方命令。如果不需要 root 那就太好了。

这就是为什么 fakechroot(1) fakeroot(1) chroot(1) 不是我正在寻找的。

是否可以伪造 / 使用 unshare(1) 和 /bin/sh?

chroot not-root-user namespace unshare

13
推荐指数
2
解决办法
5460
查看次数

为什么我的系统上没有 rootfs 文件系统?

Linux内核文件要求:

Rootfs 是 ramfs(或 tmpfs,如果已启用)的一个特殊实例,它始终存在于 2.6 系统中。你不能卸载 rootfs ...

在我测试的所有 linux 系统上(内核 > 2.6 和 afaik 正常引导程序,例如 ubuntu 12.04),mount不显示rootfs条目。

但是,在使用外部存档启动时使用buildroot映像.cpio,它是存在的。

在什么情况下有rootfs条目mount

linux kernel mount root-filesystem

6
推荐指数
1
解决办法
4911
查看次数

了解挂载命名空间在 Linux 中的工作原理

我正在阅读有关挂载命名空间的信息,请参阅:

在挂载命名空间中,您可以挂载和卸载文件系统,而不会影响主机文件系统。因此,您可以安装一组完全不同的设备(通常更少)。

我试图了解linux namespaces和 LXC 等,但我不太明白上面的陈述是什么意思。

我想了解的是容器 (1) 如何拥有这样的文件:

/foo/a.txt
/foo/bar/b.txt
Run Code Online (Sandbox Code Playgroud)

另一个容器 (2) 可以有这样的文件:

/foo/a.txt
/foo/x.txt
/foo/bar/b.txt
/foo/bar/y.txt
Run Code Online (Sandbox Code Playgroud)

Where/foo/a.txt/foo/bar/b.txton 容器 (1) 和 (2) 是相同的路径,但它们可能具有不同的内容:

# container (1)
cat /foo/a.txt #=> Hello from (1)

# container (2)
cat /foo/a.txt #=> Hello from (2)
Run Code Online (Sandbox Code Playgroud)

这意味着物理系统上的文件(我对此一无所知)以一种方式存储,可能分散在各处。但是操作系统中有一个“虚拟”文件的集中式数据库,如下所示:

db:
  container1:
    foo:
      a.txt: Hello from a from (1)
      bar:
        b.txt: Hello from b from (1)
  container2:
    foo:
      a.txt: Hello from a from (2)
      x.txt: …
Run Code Online (Sandbox Code Playgroud)

linux filesystems mount namespace virtual-file-system

5
推荐指数
1
解决办法
6016
查看次数

如何在 Linux 上的文件系统内使用 chdir("..") 创建一个 root 无法逃脱的 chroot?

/var/mychoot我在与 相​​同的文件系统上有一个目录/,并且我已将程序启动/var/mychroot/progsudo chroot /var/mychroot /prog,因此该程序以 EUID 0 运行。

如果程序执行chdir("..") 转义技术,那么它就能够转义 chroot 并看到其中的所有内容/。(我已经在 Linux 4.18 上验证了这一点。)

我想阻止这样的逃跑。事实上,我想防止各种 chroot 转义,但在这个问题中,我只对如何在现代 Linux 系统上防止chdir("..") 转义技术感兴趣。为此,我正在寻找chroot(2)系统调用的替代方案。

我找到了 2 个解决方案:pivot_rootMS_MOVE,但它们仅在/var/mychroot是挂载点时才起作用,因此如果/var/mychroot只是文件系统中的子目录,它们就会失败/。在这种情况下还有其他解决方案吗?

我想避免使用技术LD_PRELOAD(因为LD_PRELOAD不影响静态链接的可执行文件),使用ptrace(2)strace的技术(因为这样我就无法在 chroot 中运行,也无法在ptrace(2) 中运行)很难正确执行:进程将崩溃或挂起)和真正的虚拟化(例如Xen或KVM或QEMU;因为性能开销和不太灵活的内存配置)。

回顾一下,我需要:

  • chroot(2)的替代方案系统调用
  • root 可以使用它限制以 root 身份运行的进程(EUID 0),
  • 到文件系统的子目录/
  • 这可以防止chdir("..") 转义技术
  • 并且不使用LD_PRELOAD …

linux chroot container

4
推荐指数
1
解决办法
5024
查看次数