C 在linux中保护文件不被编辑

C 在linux中保护文件不被编辑,c,linux,inotify,C,Linux,Inotify,如何保护文件不被外部程序或用户编辑,即使该用户以某种方式拥有root权限。假设我有这个文件F,我必须保护它,默认情况下,只有root和用户可以执行、读取和写入F,其他所有人都只有读取权限 比如说,我有一个程序,它正在保护关键文件F,并检测到编辑的情况异常,似乎系统的安全性可能受到了威胁。如何防止将更改保存到文件F?如果可能,还可以杀死尝试进行更改的程序 我已经发现fuser可以杀死这个进程,但在做任何修改之前是不行的。我使用inotify来检测更改。我的问题是大多数编辑器创建一个临时文件,进行更

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

比如说,我有一个程序,它正在保护关键文件F,并检测到编辑的情况异常,似乎系统的安全性可能受到了威胁。如何防止将更改保存到文件F?如果可能,还可以杀死尝试进行更改的程序

我已经发现fuser可以杀死这个进程,但在做任何修改之前是不行的。我使用inotify来检测更改。我的问题是大多数编辑器创建一个临时文件,进行更改,然后将其保存到原始文件。虽然我接收到类似IN_OPEN、IN_CLOSENOWRITE和其他事件,但我只有在事件完成后才能进入IN_CLOSEWRITE和IN_CLOSEMODIFY?如何阻止文件F被修改

我知道我的程序可能会在有人进入系统后被终止,但我能节省我所能节省的吗


编辑:我忘了提到我不能更改任何被监视文件的权限


编辑2:我有一组文件,必须经常监控。我的程序将在后台运行,并记录这些文件中的更改。我前面写的所有文件都可以由root用户编辑和执行,但是有一些操作修改可能是不可取的,很可能意味着有人获得了root用户访问权限并编辑了这些关键文件。我需要停止这些有害的改变。从这些答案中,我想当然地认为我必须得到这些文件的快照。但问题是文件的数量可能很大,大约在100万到400万之间。欢迎使用任何比快照解决方案更高效的解决方案。

您应该从应用程序中锁定该文件,或者更改其权限。

您应该从应用程序中锁定该文件,或者更改其权限。

如果攻击者具有根,则无法保护该文件。无论您做什么,root都可以撤消。
话虽如此,如果你想让它变得困难,你可以把文件放在一个只读文件系统上,比如cdrom

如果攻击者有root用户,则无法保护该文件。无论您做什么,root都可以撤消。
话虽如此,如果你想让它变得困难,你可以把文件放在一个只读文件系统上,比如cdrom

如果root是恶意的,就无法保证数据的完整性。理想情况下,在这样一个关键的系统上,任何人都不应该拥有root,而不让系统离线并进入维护环境,如果持续正常运行时间非常关键,那么在系统离线时可能会用代理系统替换它。

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

我相信您可以将chattr+I更改属性为immutable,以防止root用户编辑文件。root用户可以随时恢复此功能,但您可以保护您的文件不受不知道chattr的脚本kiddie的影响。

我相信您可以执行chattr+I将属性更改为不可变,以防止root用户编辑文件。root用户始终可以恢复此功能,但您可能可以保护您的文件免受不知道chattr的脚本kiddie的攻击。

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


不确定这将如何影响您所说的可能有效的删除操作。

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


不确定这对删除有何影响,您说可能是有效的。

我忘了提到我不能更改任何被监视文件的权限我忘了提到我不能更改任何被监视文件的权限问题不是根用户可以做什么或撤消什么,程序在这种情况下可以做什么,这个程序应该是实时的,放入cdrom是不可能的。也许你应该提供一些关于你到底想做什么的额外信息,但在我看来,一旦文件被写入,你就无能为力了。也许您可以使用某种LVM快照来保存“已知良好”的版本。或者使用DragonlyBSD的hammer文件系统。请参阅了解更多关于这种版本控制系统的想法,因为我从未使用过版本控制系统,是否有人建议查看需求
Elements是一个好的版本控制系统,而不是版本控制文件系统,它有一个可以从c程序调用的API。从回答来看,似乎有撤销的可能,但没有预防?我认为你不能阻止任何具有写入权限的人进行写入,你能做的最好是回滚,假设他不简单地销毁备份也适合你的需要?问题不是根用户能做什么或撤销什么,在这种情况下,程序能做什么?程序应该是实时的,放入cdrom是不可能的。也许你应该提供一些关于你到底想做什么的额外信息,但在我看来,一旦文件被写入,你就无能为力了。也许您可以使用某种LVM快照来保存“已知良好”的版本。或者使用DragonlyBSD的hammer文件系统。请参阅了解更多关于这种思想的信息。我研究了版本控制系统,因为我从未使用过版本控制系统,有人能建议研究需求吗?一个好的版本控制系统不是版本控制文件系统,它有一个可以从c程序调用的API。看看回复,似乎有撤销的可能,但没有预防?我认为你不能阻止任何有写权限的人写,你能做的最好的事情就是回滚,假设他不只是简单地销毁备份也适合你的需要?我认为最好写一个问题来描述你正在尝试做什么。使文件不可变:chattr+I file\u to\u protect。查看man chattr了解详情。pmg,我查看了chattr+I,问题是我必须监视的文件可能会被删除,即对于某些文件,这是一项法律行动,对于其他文件,可能会有所不同,此外,数据可以写入某些文件,而不会被视为有害的更改。我认为最好写一个问题来描述您正在尝试执行的操作。使文件不可变:chattr+I file\u to\u protect。查看man chattr了解详情。pmg,我查看了chattr+I,问题是我必须监视的文件可能会被删除,即对于某些文件,这是一种法律行为,对于其他文件,它可能会有所不同,并且数据可以写入某些文件,而不认为这是有害的更改。