如何知道谁访问了文件或文件是否在 Linux 中具有“访问”监视器

如何知道谁访问了文件或文件是否在 Linux 中具有“访问”监视器

我是一名新手,对查看谁访问了文件有一些疑问。

我发现有方法可以通过审计子系统和 inotify 查看文件是否被访问(而不是被修改/更改)。

但是,根据我在网上读到的内容,如下: http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html

它说要“监视/监控”文件,我必须使用如下命令来设置监视:

# auditctl -w /etc/passwd -p war -k password-file

因此,如果我创建一个新文件或目录,我是否必须先使用 audit/inotify 命令来“设置”监视以“监视”谁访问了新文件?

另外,有没有办法知道目录是否正在通过审计子系统或 inotify 被“监视”?如何/在哪里可以检查文件的日志?

编辑:

通过进一步谷歌搜索,我发现这个页面说: http://www.kernel.org/doc/man-pages/online/pages/man7/inotify.7.html

inotify API 不提供有关触发 inotify 事件的用户或进程的信息。

所以我猜这意味着我无法确定哪个用户访问了文件?只有审计子系统才能确定谁访问了文件?

答案1

这是一种蛮力方法,但您可以查看用户主目录中的 .bash_history。不过这只会存储一定数量的行。

这可能有效,但我并不是说它会有效:

这假设您的主目录位于 /home,并且用户没有删除其 bash 历史文件或移动其历史文件。

for i in `ls /home/` do 

    echo "CURRENT USER IS $i"
    grep <filename> /home/$i/.bash_history | less 

done

应该在主机上的用户的 bash 历史记录中找到任何引用。

然后,您可以 grep last 的输出,查看在您检查的文件上的时间戳发生更改时谁登录了。查找接近文件上的时间戳的时间。

您还需要查找对 echo 命令或任何使用重定向的引用,因为文件可能已经通过重定向进行了修改,即 echo "test" > file_I_should_not_edit 或 echo "foo" >> append_to_file_i_should_not_edit。

我希望我能告诉你问题的确切答案。

相关内容