1

我正在为 Linux 开发安全软件 (SW)。我们的 SW 做的一件事是,当某个进程启动时,SW stat()s 进程的 /proc/ 条目并记住该条目的 inode 号。当稍后 SW 需要确定进程仍在运行(并且尚未重新启动)时,它会再次查找进程的 inode 并与记住的 inode 进行比较。一切都很好,直到最近我开始收到针对特定应用程序的错误警报 - Opera 浏览器 11.10beta。基本上,当 Opera 运行时,它的 /proc/PID 条目的 inode 编号似乎发生了变化,我们认为这是不可能的。这是 SW 安全概念工作中的一个相当大的扳手 - 非常依赖于这样一个事实,即当一个进程正在运行时,它的 /proc/ 条目的 inode 保持不变。

有人可以告知为什么会出现这种行为。谢谢。

4

2 回答 2

0

+1 用于防御性编程习惯。

免责声明 以防万一:我只是在这里集思广益。很明显,我们不能立即给出答案,我的想法不适合评论;我将删除它,因为它不会导致解决方案

我当然会确保歌剧本身没有forked/ exec-ed(对不起,这可能会侮辱你的智慧:));

接下来,看看命名空间和 chrooting

编辑

编辑

我会说进程 ID 必须已更改(或重新安装 procfs,对用户进程可见?):

在 /proc 下,我们可以找到一般系统信息和特定进程信息和统计信息。Linux 用 inode 号区分不同类型的信息。Linux 中的 inode 编号表示为 32 位编号,PID(进程标识符)表示为 16 位编号。使用这种模式,Linux 将 inode 编号分成 16 位的两半。左半部分被解释为 PID 编号,右半部分被解释为一类信息。由于 PID=0 无效,Linux 使用此值来指示 inode 包含全局信息。(来源

于 2011-09-19T11:38:38.323 回答
0

感谢 sehe 指出了正确的方向,感谢 Random832 最终确定了它。我运行了一个进程并监控了它的 PID ls -i /proc/21314 。唉! 该目录下的每个条目的 inode 编号在大约 10 分钟后更改。15分钟。所以 inode 编号在 procfs 中从来都不是永久的 :(

于 2011-09-19T19:39:32.077 回答