C ++,linux:如何限制函数访问文件系统?

我们的应用程序是从SU或普通用户运行的。 我们有一个图书馆,我们已经连接到我们的项目。 在那个库里有一个我们想调用的函数。 我们在运行应用程序的目录中有一个名为notRestricted的文件夹。 我们已经创build了一个新的线程。 我们想要限制对文件系统的访问。 我们想做的事情很简单 – 调用该函数,但限制其只能写入该文件夹(我们更喜欢让它从任何地方读取应用程序)。

更新:所以我看到没有办法只禁用一个线程从所有的FS,但一个文件夹…

我读了你的命题亲爱的SO用户,并在这里发布了一些类似于这个问题,所以在那里给了我们一个没有坏api的 沙箱的链接,但我真的不知道它是否会在除GentOS之外的任何东西上工作在使用Boost.Process命令行运行它并运行所需的ex-thread(迁移到分离应用程序=))的情况下,这种脚本看起来相当有用。

除了诸如函数挂钩之类的黑客方法来检测任何类型的文件系统访问之外,没有任何方法可以阻止单个线程 ,因为它与您处于相同的进程空间中。

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

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

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

  2. 当你创建这个进程时(在fork之后,但是在execve调用之前),使用chroot来改变文件系统的根目录。

这会给你一些很好的隔离…但是这样做会让你的代码需要root权限…不要以root身份运行子进程,因为root可以解决这个问题。

注入替代open(2) ,检查参数和适当的返回-EACCES

这听起来不像是正确的事情。 如果你仔细想想,你想要防止的是电脑游戏行业所熟知的一个问题。 处理这个问题最常用的方法是简单地编码加密你不想让别人访问的数据,只有你知道如何阅读/理解它。