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

时间:2011-06-16 06:34:50

标签: c++ c linux multithreading accessibility

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

更新 所以我看到没有办法只禁用所有FS中的一个线程而只禁用一个文件夹...

我在亲爱的SO用户中阅读了您的提议,并发布了某种analog to this question here所以在那里,我们通过sandbox向我们提供了not a bad api的链接,但我真的不知道它是否会除了GentOS之外还有其他方法(但是如果使用Boost.Process command line运行它而不是运行所需的ex-thread(迁移到seprate application =),这种脚本看起来很有意义。)

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

  1. 不要在其他线程中运行此代码,而是在其他进程中运行

  2. 创建此流程时(在fork之后但在调用execve之前),请使用chroot更改文件系统的根目录。

    < / LI>

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

答案 2 :(得分:1)

注入open(2)的替换,检查参数并根据需要返回-EACCES

答案 3 :(得分:1)

这听起来不是正确的做法。如果你考虑一下,你试图阻止的是计算机游戏行业众所周知的问题。处理此问题的最常见方法是编码加密您不希望其他人访问的数据,只有您知道如何阅读/理解它。