【发布时间】:2013-07-12 20:48:25
【问题描述】:
如何保护文件不被外部程序或用户编辑,即使该用户以某种方式获得了 root 权限。假设我有这个必须保护的文件 F,默认情况下只有 root 和用户可以执行、读取和写入 F,所有其他人只有读取权限。
假设我有一个程序,它正在保护关键文件 F,并检测到编辑环境异常,并且系统的安全性似乎已经受到威胁。如何防止保存对文件 F 的更改?如果可能的话,还要杀死尝试进行该更改的程序。
我发现 fuser 可以终止该进程,但在进行任何修改(即损坏)之前不会。我使用 inotify 来检测更改。我的问题是大多数编辑器制作一个临时文件,进行更改,然后将其保存到原始文件。虽然我收到了 IN_OPEN、IN_CLOSENOWRITE 等事件,但只有在事件完成后我才会收到 IN_CLOSEWRITE 和 IN_CLOSEMODIFY ?如何阻止我的文件 F 被修改?
我知道有人进入系统后我的程序可能会被杀死,但我能以某种方式保存我能做的任何事情吗?
编辑:我忘了提到我无法更改任何受监控文件的权限。
编辑#2:我有一组必须不断监控的文件。我的程序将在后台运行并记录这些文件中的更改。我之前写的所有文件都可以由 root 编辑和执行,但是有些操作(修改)可能是不可取的,并且很可能意味着有人获得了 root 访问权限并编辑了这些关键文件。我需要阻止这些有害的变化。从答案中,我以某种方式假设我将不得不获取这些文件的快照。但问题是文件数量可能很大,大约 1 到 4 百万。欢迎任何比快照解决方案更有效的解决方案。
【问题讨论】:
-
我认为最好写一个问题来描述你想要做什么。
-
使文件不可变:
chattr +i file_to_protect。详情请见man chattr。 -
pmg,我查看了 chattr+i,问题是我必须监控的文件可能会被删除,即对于某些文件,这是法律行为,至于其他文件可能会有所不同,也可以写入数据在不将其视为有害更改的情况下更改某些文件。