Номер индекса Linux procfs изменился во время работы процесса - PullRequest
1 голос
/ 19 сентября 2011

Я работаю над программным обеспечением безопасности (ПО) для Linux.Одна вещь, которую делает наш SW, заключается в том, что когда запускается какой-то процесс, SW stat () регистрирует процесс / proc / entry и запоминает номер inode записи.Когда позднее ПО должно убедиться, что процесс все еще работает (и не был перезапущен), он снова просматривает инод процесса и сравнивает его с запомненным.Все было хорошо и прекрасно, до недавнего времени я начал получать ложные оповещения для определенного приложения - браузера Opera 11.10beta.Похоже, что во время работы Opera номер инода для его записи / proc / PID изменился, что мы сочли невозможным.Это довольно большой гаечный ключ в работах концепции безопасности программного обеспечения - он в значительной степени опирается на тот факт, что во время выполнения процесса его индекс / proc / entry остается неизменным.

Может кто-нибудь сообщить, почемутакое поведение может быть продемонстрировано.Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Спасибо sehe за указание в правильном направлении и Random832 за то, что он наконец-то прибил егоЯ запустил процесс и проконтролировал его PID ls -i / proc / 21314.Увы!У каждой записи в этом каталоге был изменен номер инода после прибл.15 минут.Так что номера инодов никогда не были постоянными в procfs: (

0 голосов
/ 19 сентября 2011

+ 1 для защитных привычек программирования.

Отказ от ответственности На случай, если это не очевидно: я просто собираюсь провести мозговой штурм.Ясно, что мы не можем просто дать ответ мгновенно, и мои мысли не уместились в комментарии;Я удалю это, если это не приведет к решению

Я бы наверняка позаботился о том, чтобы опера не сама по себе forked / exec (извините, чтонаверное оскорбляет твой интеллект :));

Далее, взгляните на пространства имен и chroot

Редактировать

Edit

Я бы сказал, что идентификатор процесса должен быть изменен (или procfs перемонтирован, явно для пользовательского процесса?):

В / proc мы можем найти общую системную информацию и конкретную информацию о процессе и статистику.Linux различает разные типы информации по номеру инода.Номер инода в Linux представлен как 32-битное число, а PID (идентификатор процесса) представлен как 16-битное число.В этой схеме Linux разделяет номер инода на две половины по 16 бит.Левая половина интерпретируется как номер PID, а правая интерпретируется как класс информации.Поскольку PID = 0 недопустим, Linux использует это значение, чтобы указать, что inode содержит глобальную информацию.( источник )

...