保护会话日志不被任何人再次写入

保护会话日志不被任何人再次写入

我们实施了一种解决方法,将每个用户会话的命令历史记录保存在新文件中,以便进行审计。因此每个会话文件都由开始时间和用户名来标识。

问题:会话用户是文件所有者,因此他可以修改甚至删除文件。

有没有办法,一旦文件被填满,就可以防止对其进行任何更改?就像是一次写入并且它已被锁定。

答案1

您所建议的使用标准工具几乎不可能正确完成。

正如您所注意到的,保存命令历史记录通常不起作用,因为该文件将由用户拥有,他们可以随意删除、清除或编辑该文件。即使我们可以解决这个问题,也许可以通过使命令历史文件成为某个受信任进程读取的管道,也没有什么可以阻止用户关闭历史文件或将其指向其他地方。

我们可以创建一个带有强制命令日志记录的新 shell 来防止这种情况(通过管道、套接字或系统日志将日志发送到另一个进程),但用户仍然可以简单地启动普通 shell,或者 Perl 或 Python 解释器等,解决日志记录问题。记录子进程所做的事情需要将整个会话包装起来script或类似地记录用户看到的所有内容。即使这样,也可以只下载代码并运行它,而不用在终端上打印它。阻止用户运行任意程序就可以做到这一点,但它也会阻止做最有用的事情。阻止运行 shell 或 Perl 脚本也会阻止许多常见工具的工作。

考虑到 shell 和其他实用程序都是一种工具,这个结果并不令人惊讶为了用户,而不是反对他们。

也许您可以将用户的会话安排为包装strace或类似的方式来查看他们的进程与系统的每次交互,但是strace从较长的会话中读取日志不会很有趣。

另外,我认为您的用户会反对这种级别的监控,我知道我会的。

答案2

如果不了解更多有关您的设置的信息,很难给出一个好的答案,但这听起来像是实现某些目标的一种方法,假设您使用支持它的文件系统(例如 ext3),则将日志文件标记为“append -仅”,使用chattr +a <file>.

设置或取消设置该属性需要特殊权限,然后只能附加该文件。这不会阻止您的用户将任意数据附加到文件中,但会阻止他们删除已存在的任何数据。

相关内容