首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否阻止截断共享映射文件?

是否阻止截断共享映射文件?
EN

Stack Overflow用户
提问于 2014-02-03 01:40:04
回答 1查看 223关注 0票数 2

我有两个通过共享内存进行通信的进程。一个是特权和受信任的,另一个是LXC进程和不受信任的。

可信进程在LXC进程可以访问的目录中创建一个文件。它使用ftrucnate将其设置为固定大小。

现在,它通过将该文件映射为read+write,与不受信任的进程共享该文件。

我希望不受信任的进程能够读取和写入映射,这是安全的,因为受信任的进程不会对已写入的内容进行任何假设,并会仔细地对其进行验证。

但是,使用写访问,不受信任的进程可以将文件截断为零(由于挂载限制,它不能增加文件的大小),这会在特权进程中导致SIGBUS (我确认了这一点)。

由于有许多不受信任的进程与受信任的进程通信,这基本上是对整个系统的拒绝服务攻击,Linux允许这种攻击。有什么方法可以防止这种情况发生吗?

我可以拒绝对ftruncate的访问,但可能还有其他系统调用来做同样的事情。当然有一种方法可以允许进程写入文件,但不能调整它的大小或重命名它或进行任何其他元数据更改?

我能想到的最好的办法就是退回到古老的System V共享内存,因为它在Linux上根本不能调整大小(甚至不能由专用进程调整)。

EN

回答 1

Stack Overflow用户

发布于 2015-11-29 04:33:52

从Linux版本3.17开始,您可以使用文件密封来实现此目的。它们只在tmpfs上受支持,因此将用于POSIX共享内存和使用memfd_create()创建的共享文件。在将文件描述符传递给不受信任的进程之前,调用fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK),您的受信任进程就不会受到SIGBUS的威胁。

有关详细信息,请参阅memfd_create()fcntl()手册页。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21513886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档