unix 有什么办法可以找出谁在过去 1 周内访问了某个文件吗?可能是用户或某些脚本将其 ftp 到其他地方。我可以获得访问某个文件的用户名列表吗?我如何找出谁正在访问特定文件?
答案1
除非您制定了极其不寻常的日志记录策略,否则不会记录谁访问了哪些文件(这将是大量信息)。您可以在系统日志中查看谁在什么时间登录;该last
命令为您提供登录历史记录,以及其他日志,例如/var/log/auth.log
将告诉您用户如何进行身份验证以及从何处登录(哪个终端,或者远程的哪个主机)。
上次读取文件的日期称为文件的日期访问时间,或简称 atime。所有 UNIX 文件系统都可以存储它,但许多系统不记录它,因为它会造成(通常很小)性能损失。ls -ltu /path/to/file
或stat /path/to/file
显示文件的访问时间。
如果用户访问了该文件并且没有试图隐藏他的踪迹,那么他的 shell 历史记录(例如~/.bash_history
)可能会提供线索。
要了解当前打开文件的对象或人员,请使用lsof /path/to/file
.
要记录文件将来发生的情况,有几种方法:
使用inotify等待。当有人阅读时
inotifywait -me access /path/to
会打印一行。该界面不会告诉您谁访问了该文件;一旦出现此行,您就可以调用,但是存在竞争条件(当 lsof 开始运行时,访问可能已经结束)。/path/to/ ACCESS file
file
lsof /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
- 您可以编写 C 程序来执行您想要的操作,只需
inotify
直接调用 API - 您可以使用 kfsmd,http://www.linux.com/archive/feature/124903一个守护进程,使用
inotify
- 如果您想要跨平台工作(
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