是否有工具或命令可以让我们查看文件是否被读取以及读取时间?我只会找到最后修改的。
答案1
stat
可ls -lu
用于查找上次访问时间,其中包括上次读取或以其他方式访问的时间,包括使用cat
、awk
、sed
、grep
、vim
、less
、tail
、head
等工具。
如果通过读取,您指的是特定的东西,例如使用cat
或文本编辑器,例如在标准输出中实际查看其全部内容,那么除了设置和检查审核日志vim
之外,没有办法判断这是否已完成auditd
如果你没有这个,请浏览所有曾经访问过它的 shell 历史记录,假设它甚至存在,这显然是不可行的。唯一可以确定的是访问时间。如果您考虑在任何时候读取文件,无论数量和方法如何,我给出的任何一个命令都可以做到这一点。
[nasir-rocky@rocky-linux ~]$ stat test
File: test
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 145 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/nasir-rocky) Gid: ( 1000/nasir-rocky)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-05-29 18:54:53.740411288 -0400
Modify: 2023-05-29 18:54:50.254416606 -0400
Change: 2023-05-29 18:54:50.254416606 -0400
Birth: 2023-02-09 17:38:42.636002933 -0500
这是ls -u
(我用作ll -u
别名,但它做了同样的事情)
[nasir-rocky@rocky-linux ~]$ ll -u test
-rw-r--r--. 1 nasir-rocky nasir-rocky 12 Sep 19 07:33 test
请注意它与仅显示修改时间的ll
或有何不同ls -l
[nasir-rocky@rocky-linux ~]$ ll test
-rw-r--r--. 1 nasir-rocky nasir-rocky 12 May 29 18:54 test
答案2
大多数 Linux 文件系统不仅更新和存储修改时间属性,还记录文件访问时间 ( atime
)。
笔记:atime 时间戳的精确程度,或者它是否可用/更新,这取决于所使用的文件系统和安装选项像
noatime
,strictatime
等等relatime
)
显示 atime 属性的方法有很多种,其中ls
旗帜 -u
和或--time=atime
或者例如stat
命令。
stat .bashrc
File: ‘.bashrc’
Size: 231 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 262277 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ hbruijn) Gid: ( 1000/ hbruijn)
Context: system_u:object_r:user_home_t:s0
Access: 2023-09-01 12:59:34.648395490 +0200
Modify: 2016-12-07 00:19:33.000000000 +0100
Change: 2017-09-25 14:15:35.152000000 +0200
Birth: -
要查明谁访问了文件,通常需要使用auditd(提前)设置审核,以及获取每次访问文件的全面记录。
答案3
怎么找如果文件被读取,以及读取时间
审计
在该特定文件上设置监视规则/etc/audit/rules.d/audit.rules
,例如
-w /opt/something/somefile -p r -k ABC123
- 这
-k
是一个将显示在 中的键名称/var/log/audit/audit.log
,因此请使用可以轻松在其中进行文本搜索的唯一名称audit.log
- 是
-p
权限标志,用于r
读取;这里所有可以使用的选项都是rwxa
用于读取、写入、执行、更改属性
可能还有其他方法可以执行审核规则来完成您所要求的任务,但是根据您特别要求的内容(仅在读取时),那么仅r
监视类型的审核规则上的标志似乎是最好的方法。
在audit.log
该行条目中,具有唯一键名称(在我的示例中为 ABC123)将指示每一个该文件被读取/写入/执行/attributes_changed 的时间。并且还将包含由谁、进程 ID、一大堆 sh..info。
唯一的缺点是audit.log中的时间戳采用纪元格式{自1970年1月1日以来的秒数},因此您必须将其转换为人类格式。