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

C++, linux: how to limit function access to file system?

本文关键字:文件系统 访问 函数 何限制 linux C++      更新时间:2023-10-16

我们的应用程序是从SU或普通用户运行的。我们有一个与我们的项目相连的图书馆。在那个库中有一个我们要调用的函数。我们在运行应用程序的目录中有一个名为notRestricted的文件夹。我们创建了一个新线程。我们希望限制线程对文件系统的访问。我们想做的很简单——调用该函数,但将其访问权限限制为仅写入该文件夹(我们更喜欢让它从应用程序可以读取的任何位置读取)。

更新: 所以我发现,除了一个文件夹之外,没有办法从所有FS中只禁用一个线程。。。

亲爱的SO用户,我读了你的建议,并在这里发布了一些类似于这个问题的内容,所以在那里,他们给了我们一个到沙箱的链接,其中有一个不错的api,但我真的不知道它是否适用于除GentOS之外的任何东西(但无论如何,在使用Boost.Process命令行运行它并运行所需的ex线程(迁移到seprate application=)的情况下,这样的脚本看起来都很有趣)。

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

也许您可能需要重新思考如何实现应用程序——让本机不受信任的代码以su的形式运行并不是一个好主意。也许可以使用另一个流程并通过进行交流。RPC,或者使用可以在运行时检查的解释语言。

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

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

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

这会给你一些很好的隔离。。。然而,这样做会使您的代码需要root。。。不要以root身份运行子进程,因为root可以轻松地解决这个问题。

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

这听起来不是正确的做法。如果你仔细想想,你试图防止的是计算机游戏行业众所周知的问题。处理这个问题最常见的方法是简单地编码加密你不想让其他人访问的数据,这样只有你知道如何阅读/理解它。