Linux文件访问监控

Linux文件访问监控

unix 有什么办法可以找出谁在过去 1 周内访问了某个文件吗?可能是用户或某些脚本将其 ftp 到其他地方。我可以获得访问某个文件的用户名列表吗?我如何找出谁正在访问特定文件?

答案1

除非您制定了极其不寻常的日志记录策略,否则不会记录谁访问了哪些文件(这将是大量信息)。您可以在系统日志中查看谁在什么时间登录;该last命令为您提供登录历史记录,以及其他日志,例如/var/log/auth.log将告诉您用户如何进行身份验证以及从何处登录(哪个终端,或者远程的哪个主机)。

上次读取文件的日期称为文件的日期访问时间,或简称 atime。所有 UNIX 文件系统都可以存储它,但许多系统不记录它,因为它会造成(通常很小)性能损失。ls -ltu /path/to/filestat /path/to/file显示文件的访问时间。

如果用户访问了该文件并且没有试图隐藏他的踪迹,那么他的 shell 历史记录(例如~/.bash_history)可能会提供线索。

要了解当前打开文件的对象或人员,请使用lsof /path/to/file.

要记录文件将来发生的情况,有几种方法:

  • 使用inotify等待。当有人阅读时inotifywait -me access /path/to会打印一行。该界面不会告诉您谁访问了该文件;一旦出现此行,您就可以调用,但是存在竞争条件(当 lsof 开始运行时,访问可能已经结束)。/path/to/ ACCESS filefilelsof /path/to/file

  • 记录文件系统是一个可堆叠的文件系统,它提供文件系统树的视图,并且可以通过该视图对所有访问执行更高级的日志记录。要配置它,请参阅LoggedFS 配置文件语法

  • 你可以使用Linux的审计子系统记录大量内容,包括文件系统访问。确保auditd守护进程已启动,然后配置您要记录的内容auditctl。每个记录的操作都记录在/var/log/audit/audit.log(在典型的发行版上)中。要开始观看特定文件:

      auditctl -w /path/to/file
    

    如果您对目录进行监视,则也会递归地监视该目录及其子目录中的文件。

答案2

之前的答案是不是执行您要求的操作的最佳实践。 Linux 有一个用于此目的的 API。应用inotify程序编程接口http://linux.die.net/man/7/inotify

  1. 您可以编写 C 程序来执行您想要的操作,只需inotify直接调用 API
  2. 您可以使用 kfsmd,http://www.linux.com/archive/feature/124903一个守护进程,使用inotify
  3. 如果您想要跨平台工作(inotify特定于 Linux)并且您正在使用 Java,JNotify 可以跨平台工作(Linux、Mac、Windows),抽象出本机操作系统的底层 API。

答案3

上面的 inotifywait 示例应该是其中之一(有关更多信息,请参阅手册页):

inotifywait /path/to/file
inotifywait -e open /pat/to/file

或者使用监控模式和时间戳:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'

答案4

unix 有什么办法可以找出谁在过去 1 周内访问了某个文件吗?

严格执行您的要求:一个特定文件,是的。

/etc/audit/audit.rules正确配置service enable auditd并使审核服务运行并记录到/var/log/audit/audit.log

默认情况下,我认为对于大多数 Linux 发行版来说,审计都是打开的,但规则文件基本上是空的,所以你会在audit.log 中得到非常基本的项目。您必须手动添加您认为适合您的audit.rules文件的规则。还要仔细阅读auditd.conf以充分了解正在发生的事情。

这可能不是执行您所要求的操作的唯一方法,但这里有一条规则应该执行您所要求的操作。

网络搜索更多Linux审计监视文件

-w /etc/passwd -p rwxa -k WATCHTHIS
  • -w是说明手表规则
  • /etc/passwd我们正在观看这个文件,相应地改变这个
  • p在权限过滤器中,您有 4 种选择的组合:读、写、执行或追加。
  • k可选,每当触发此审核事件时都会放置一个过滤器键audit.log,强烈推荐,否则您将如何在audit.log中找到此事件;相应地改变这个制作一些独特的东西,可以在十亿行audit.log中轻松搜索到。

这些var/log/audit/audit.log条目,每行一个,会有很多,每个条目都有一个纪元时间格式的时间戳,您必须将其转换为人类可读的月/日/年/小时/分钟/秒。搜索具有WATCHTHIS或任何您创建的密钥的行,并且 和uid=就是gid=您要查找的内容。

# cheat sheet:

systemctl list-unit-files | grep audit

systemctl enable auditd.service
service auditd enable

service auditd start

# ----------------------------------------------------------------

# sample /etc/audit/rules.d/audit.rules file
# used in rhel/centos 7.9

## First rule - delete all

-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
# -b 8192
# set from 8k to 1mb

-b 1048576

# in case of audit failure
# 2=shutdown, 1= goto runlevel 1, 0=no affect

-f 0

# add your desired rules

-w /scratch/somefile.txt -p rwxa -k WATCHTHIS

相关内容