保护文件不被linux编辑

时间:2012-02-17 10:56:39

标签: c linux inotify

如何保护文件不被外部程序或用户编辑,即使该用户以某种方式获得了root权限。假设我有这个文件F,我必须保护它,默认情况下只有root和用户可以执行,读取和写入F,所有其他只有读取权限。

假设我有一个程序,它正在保护关键文件F,并检测到编辑的情况是不寻常的,并且似乎系统的安全性可能已经受到损害。如何防止保存对文件F的更改?如果可能的话还会杀死尝试进行更改的程序。

我发现热熔器可以杀死这个过程,但是在进行任何修改之前都没有。我使用inotify来检测变化。我的问题是大多数编辑器制作一个临时文件,进行更改,然后将其保存到原始文件中。虽然我收到了IN_OPEN,IN_CLOSENOWRITE等事件,但只有在事件完成后我才能得到IN_CLOSEWRITE和IN_CLOSEMODIFY?如何停止文件F被修改?

据我所知,我的程序可能会在有人进入系统后被杀死,但是我可以以某种方式保存我能做的一切吗?

编辑:我忘了提及我无法更改任何受监控文件的权限。

编辑#2:我有一组必须持续监控的文件。我的程序将在后台运行并记录这些文件中的更改。我之前写的所有文件都可以由root编辑和执行,但是有些操作(修改)可能是不受欢迎的,并且很可能意味着有人获得了root访问权并且编辑了这些关键文件。我需要阻止这些有害的变化。从答案我不知何故假设我将得到这些文件的快照。但问题是文件数量可能很大,约为1到4百万。任何比快照解决方案更有效的解决方案都是受欢迎的。

5 个答案:

答案 0 :(得分:2)

如果“攻击者”具有root权限,则无法保护文件。无论你做什么,root都可以撤消。 话虽如此,如果你想让它变得困难,你可以将文件放在只读文件系统上,例如cdrom。

答案 1 :(得分:1)

如果root是恶意的,则无法对数据完整性做出任何保证。理想情况下,在这样一个关键系统上,任何人都不应该在没有将系统脱机并进入维护环境的情况下拥有root权限(如果持续正常运行时间很关键,可能会在代理系统处于离线状态时替换它)。

答案 2 :(得分:0)

您应该从应用程序锁定文件或更改ACLRWX权利

答案 3 :(得分:0)

我相信你可以做chattr + i(将属性更改为immutable)以防止root用户编辑文件。 root可以随时恢复此功能,但您可以保护您的文件免受不熟悉chattr的脚本小子的攻击。<​​/ p>

答案 4 :(得分:0)

如果您的监控应用程序锁定了正在监控的每个文件,该怎么办? flock,例如fctnl可能会起作用。然后,其他应用程序将无法编辑该文件。

不确定这会影响删除(您说可能有效)。