inotify FD - 为啥限制每个用户 id 而不是每个进程?
Posted
技术标签:
【中文标题】inotify FD - 为啥限制每个用户 id 而不是每个进程?【英文标题】: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 监视。
【参考方案1】:
原因是为了防止非root用户通过使用inotify
查看大量文件来DoSing系统。 inotify
结构需要不可忽略的内存量来维护(并且不能换出到磁盘),因此需要对非特权可以提交的数量进行一些限制。
epoll
曾经有类似的限制(max_user_instances
和 max_user_watches
),尽管最后 max_user_instances
被删除,max_user_watches
被设置为内存的 4%。
应该为 inotify 提交一个类似的补丁,但到目前为止还没有。
文件描述符在每个进程的基础上受到完全不同的限制:当一个进程启动时,分配一个文件描述符表,其大小与允许的最大文件描述符数成正比。保持这个尽可能小可以减少每个进程的内存开销。
【讨论】:
以上是关于inotify FD - 为啥限制每个用户 id 而不是每个进程?的主要内容,如果未能解决你的问题,请参考以下文章