3

Gentoo 在 portage 中有一个特性,可以防止和记录构建和打包目录之外的写入。

Checkinstall能够监控写入,并在完成后打包所有生成的文件。

Autotools 有一个DESTDIR宏,可以让您通常将大部分文件系统活动定向到备用位置。

  • 我自己如何使用 Gentoo 沙盒方法的安全性来做到这一点?
  • 我可以使用 SELinux、rlimit 或其他一些资源限制 API 吗?
  • C、Python 有哪些 API 可用?

更新0

  • 使用的机制不需要 root 权限或任何涉及/持久的系统修改。这排除了创建用户和使用chroot().
  • 请链接到您提到的 API 的文档,由于某种原因,它们非常难以找到。

更新1

  • 这是为了防止意外。我不担心恶意代码,只担心写得不好的品种。
4

5 回答 5

2

Debian 处理此类问题的方式是首先不以 root 身份运行安装代码。包构建脚本以普通用户身份运行,安装脚本使用fakeroot运行- 此 LD_PRELOAD 库重定向权限检查调用,使其看起来像安装程序实际上以 root 身份运行,因此生成的文件所有权和权限是正确的(即,如果您/usr/bin/install从 fakeroot 环境中运行,则从环境中进一步stat显示正确的 root 所有权),但实际上安装程序是以普通用户身份运行的。

在某些情况下(主要用于开发),使用例如pbuilder在 chroots 中完成构建- 然而,这在二进制发行版上可能更容易,因为使用 pbuilder 的每个构建都会重新安装基本系统之外的所有依赖项,作为所有必要的测试指定了依赖项(这是使用 chroot 的主要原因;不是为了防止意外安装)

于 2011-06-21T04:39:33.173 回答
0

一种方法是虚拟化进程,类似于wine它的方式,并重新解释文件路径。不过,这是相当繁重的实施任务。

一种更优雅的方法是使用chroot()系统调用,它将文件系统的子树设置为进程的根目录。创建一个虚拟子树,包括 /bin、/tmp、/usr、/etc,因为您希望进程看到它们,使用虚拟树调用 chroot,然后执行目标可执行文件。我不记得是否可以在外部的树参考文件中有符号链接,但我不这么认为。但是当然需要的所有东西都可以复制到沙箱中,然后在完成后检查原始文件是否有更改。

于 2011-06-21T00:33:30.280 回答
0

也许通过常规用户权限获得沙盒安全?因此,运行节目的进程对特定目录具有特定的访问权限。

chroot将是一种选择,但我无法弄清楚如何跟踪这些尝试在根目录之外写入。

另一个想法是拦截系统调用。我对此了解不多,但strace只是一个开始,尝试通过它运行一个程序并检查你是否看到你喜欢的东西。

编辑:

使用内核模块是一种选择吗?因为你可以用你自己的替换 write 系统调用,这样你就可以阻止你需要的任何东西并记录它。

于 2011-06-21T00:35:41.717 回答
0

听起来有点像您所描述的是容器。一旦你建立了容器基础设施,创建容器就非常便宜,而且它们非常安全。

于 2011-06-21T01:07:21.390 回答
0

有两种方法可以做到这一点。一种是用于LD_PRELOAD挂钩导致系统调用的库调用,例如 libc 中的那些调用,然后调用dlsym/ dlopen。这将不允许您直接挂钩系统调用。

允许挂钩系统调用的第二种方法是在 下运行可执行文件ptrace,它提供了在系统调用发生时停止和检查系统调用的选项。这可以通过编程方式设置为对文件系统的受限区域进行沙箱调用等。

于 2016-03-31T23:59:58.017 回答