C++,linux:如何限制函数对文件系统的访问
C++, linux: how to limit function access to file system?
我们的应用程序是从SU或普通用户运行的。我们有一个与我们的项目相连的图书馆。在那个库中有一个我们要调用的函数。我们在运行应用程序的目录中有一个名为notRestricted
的文件夹。我们创建了一个新线程。我们希望限制线程对文件系统的访问。我们想做的很简单——调用该函数,但将其访问权限限制为仅写入该文件夹(我们更喜欢让它从应用程序可以读取的任何位置读取)。
更新: 所以我发现,除了一个文件夹之外,没有办法从所有FS中只禁用一个线程。。。
亲爱的SO用户,我读了你的建议,并在这里发布了一些类似于这个问题的内容,所以在那里,他们给了我们一个到沙箱的链接,其中有一个不错的api,但我真的不知道它是否适用于除GentOS之外的任何东西(但无论如何,在使用Boost.Process命令行运行它并运行所需的ex线程(迁移到seprate application=)的情况下,这样的脚本看起来都很有趣)。
实际上没有任何方法可以阻止单个线程,因为它与您所在的进程空间相同,除了检测任何类型的文件系统访问的函数挂钩等黑客方法。
也许您可能需要重新思考如何实现应用程序——让本机不受信任的代码以su的形式运行并不是一个好主意。也许可以使用另一个流程并通过进行交流。RPC,或者使用可以在运行时检查的解释语言。
在我看来,最好的策略是:
-
不要在不同的线程中运行此代码,而是在不同的进程中运行它。
-
创建此进程时(在
fork
之后,但在调用execve
之前),请使用chroot
更改文件系统的根。
这会给你一些很好的隔离。。。然而,这样做会使您的代码需要root。。。不要以root身份运行子进程,因为root可以轻松地解决这个问题。
为open(2)
注入一个替换项,该替换项检查参数并根据需要返回-EACCES
。
这听起来不是正确的做法。如果你仔细想想,你试图防止的是计算机游戏行业众所周知的问题。处理这个问题最常见的方法是简单地编码或加密你不想让其他人访问的数据,这样只有你知道如何阅读/理解它。
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- libstdc++ 文件系统中未初始化的用法?
- boost::文件系统::recursive_directory_iterator多线程安全
- C++17 文件系统::remove_all 带有通配符路径
- C++ 17 文件系统copy_file访问被拒绝
- Boost文件系统存在访问违规
- 系统访问出界异常,尝试从flatbuffer的二进制文件访问"LengthofTable"
- 简单Boost文件系统访问冲突
- 系统会冻结如果我使用运行的守护程序重新启动或关闭,该守护程序可以使用Fanotify控制对文件的访问
- 如何创建文件路径可以像磁盘一样访问的虚拟文件系统
- 在QWebview中使用javascript访问文件系统
- 从 boost 1.48 升级到 1.49 具有文件系统路径访问冲突读取位置0x0000000
- 是否有适用于Windows的iTunes C++库允许访问USB连接的iOS设备的文件系统?
- 数据库或文件系统访问的const语义
- 我可以使用Google NaCl访问文件系统吗?
- C++,linux:如何限制函数对文件系统的访问
- MPI:如何限制对文件系统的访问