2012-06-19 5 views
4

В Linux, ограничение на количество Inotify экземпляров процесс может открыть ограничен на идентификатор пользователя максимальное число, указанное в /Proc/SYS/фс/Inotify/max_user_instancesinotify FD - почему это ограничение на идентификатор пользователя, а не на процесс?

Естественная вещь будет чтобы ограничить его на каждый процесс, например файловые FD. Поскольку inotify FDs ограничены идентификатором пользователя, он, скорее всего, достигнет предела на серверах, где многие процессы могут работать с одним и тем же идентификатором пользователя. Но я думаю, что для этого должна быть причина?

Это вопрос программирования, потому что я должен использовать inotify в своем коде и хочу установить правильный предел для системы.

+2

Если это было за один процесс, пользователь мог бы легко обойти предел с помощью простой 'fork()' ... – Flexo

+0

Что такое дорогостоящее inotify экземпляры, которые должны быть ограничены для каждого идентификатора пользователя? Обратите внимание, что мы говорим о том, чтобы просто inotify FDs не добавляли часы inotify. – Manohar

ответ

8

Причина заключается в том, чтобы предотвратить использование пользователями, не являющимися пользователями root, DoSing системы, просмотрев множество файлов, используя inotify. Структуры inotify требуют, чтобы объем памяти был не пренебрежимо мал, чтобы поддерживать (и его нельзя поменять на диск), поэтому должно быть какое-то ограничение на количество незащищенных прав.

epoll используется, чтобы иметь аналогичные ограничения (max_user_instances и max_user_watches), хотя в конце max_user_instances удаляли и max_user_watches просто установлено равным 4% памяти.

Подобный патч, вероятно, должен быть представлен для inotify, но до сих пор его не было.

Файловые дескрипторы ограничены на основе каждого процесса по совершенно другой причине: при запуске процесса создается таблица дескриптора файла и его размер пропорционален максимально допустимому числу дескрипторов файлов. Хранение этого как можно меньше уменьшает накладные расходы на процессор.