【问题标题】:inotify FD - why is the limit per user id and not per process?inotify FD - 为什么限制每个用户 id 而不是每个进程?
【发布时间】:2012-06-19 22:11:06
【问题描述】:

在 Linux 中,进程可以打开的 inotify 实例数的限制受 /proc/sys/fs/inotify/max_user_instances 中指定的每个用户 ID 最大数的限制

自然会限制每个进程,例如文件 FD。由于 inotify FD 受用户 ID 的限制,因此它更有可能在许多进程可能使用相同用户 ID 运行的服务器上达到限制。但我想这一定是有原因的?

这是一个编程问题,因为我必须在我的代码中使用 inotify 并希望为系统设置正确的限制。

【问题讨论】:

  • 如果是每个进程,用户可以通过简单的fork() 轻松绕过限制...
  • 什么是 inotify 实例如此昂贵以至于必须限制每个用户 id ?请注意,我们只是在讨论 inotify FD,而不是正在添加的 inotify 监视。

标签: linux linux-kernel inotify


【解决方案1】:

原因是为了防止非root用户通过使用inotify查看大量文件来DoSing系统。 inotify 结构需要不可忽略的内存量来维护(并且不能换出到磁盘),因此需要对非特权可以提交的数量进行一些限制。

epoll 曾经有类似的限制(max_user_instancesmax_user_watches),尽管最后 max_user_instances 被删除,max_user_watches 被设置为内存的 4%。

应该为 inotify 提交一个类似的补丁,但到目前为止还没有。

文件描述符在每个进程的基础上受到完全不同的限制:当一个进程启动时,分配一个文件描述符表,其大小与允许的最大文件描述符数成正比。保持这个尽可能小可以减少每个进程的内存开销。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2012-01-25
    • 2023-03-10
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多