【问题标题】:C++, linux: how to limit function access to file system?C++,linux:如何限制对文件系统的函数访问?
【发布时间】:2011-09-16 02:44:51
【问题描述】:

我们的应用由 SU 或普通用户运行。我们有一个连接到我们项目的库。在那个库中有一个我们想要调用的函数。我们在运行应用程序的目录中有一个名为notRestricted 的文件夹。我们创建了一个新线程。我们想限制线程对文件系统的访问。我们想要做的很简单——调用该函数,但将其访问权限限制为仅写入该文件夹(我们更愿意让它从应用程序可以读取的任何地方读取)。

更新: 所以我看到除了一个文件夹之外,没有办法只禁用所有 FS 中的一个线程...

亲爱的 SO 用户,我阅读了您的建议并发布了某种 analog to this question here,所以在那里给了我们一个指向 sandboxnot a bad api 的链接,但我真的不知道它是否适用于 Anething 但 GentOS(但是在使用Boost.Process command line 运行它而不是运行所需的前线程(迁移到单独的应用程序=)的情况下,这样的脚本看起来非常有趣。

【问题讨论】:

    标签: c++ c linux multithreading accessibility


    【解决方案1】:

    注入 open(2) 的替代品,检查参数并酌情返回 -EACCES

    【讨论】:

    • 这很老套。如果恶意代码执行 open 系统调用的指令(例如 x86 Linux 上的 int $0x80),它们也可以轻松解决此问题。
    • 您能提供任何这种替换注入的代码示例吗?
    【解决方案2】:

    实际上没有任何方法可以阻止单个线程,因为它与您在同一个进程空间中,除了像函数挂钩这样的黑客方法来检测任何类型的文件系统访问.

    也许您可能想重新考虑如何实现您的应用程序 - 以 su 运行本机不受信任的代码并不是一个好主意。也许使用另一个进程并通过通信。 RPC,或使用可在运行时检查的解释性语言。

    【讨论】:

      【解决方案3】:

      在我看来,最好的策略是:

      1. 不要在不同的线程中运行此代码,而是在不同的进程中运行。

      2. 创建此进程时(在fork 之后但在任何对execve 的调用之前),使用chroot 更改文件系统的根。

      这将为您提供一些很好的隔离...但是这样做会使您的代码需要root...不要以root身份运行子进程,因为root可以轻松解决这个问题。

      【讨论】:

      • 所以...没有办法在非 root 上这样做(或任何类似的 chroot)?(这将完全限制应用程序从 FS 上的其他文件夹读取...
      【解决方案4】:

      这听起来不像是正确的做法。如果你仔细想想,你试图阻止的是电脑游戏行业众所周知的问题。处理此问题的最常见方法是简单地编码加密您不希望其他人访问的数据,这种方式只有您自己知道阅读/理解它。

      【讨论】:

      • 我不是在创建游戏...我想为 C++ MPI 开发人员创建类似于wonderfl.net...所以我需要一些 FS 限制...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多