扔出去的烫手山芋,最后还是会回到自己手上。所以,遇见问题最好的办法不是回避,而是直面。

问题描述:通过ftp远程mget下来的文件,用户在使用时发现找不到。ftp日志中有传输记录,ftp脚本中同时用ls命令显示本地文件夹的内容,并且会cp一份到备份目录。根据所有记录,发现文件确定load下来,但是当用户需要使用时,却丢失了。

于是,问题来了,有没有办法知道文件是什么时候生成,有谁访问过,怎么丢失或者谁删除了的?

google "monitor file change on linux" 大多数给的建议是使用inotifywatch这个命令,试了试,发现达不到自己想要的效果。

例子:(可以是文件夹或者文件,使用Ctrl+C中断监控,然后会返回结果到标准输出)

root@bv03301:/root: inotifywatch -v /home/qli00001/

Establishing watches...

Total of 1 watches.

Finished establishing watches, now collecting statistics.

total  modify  attrib  close_write  close_nowrite  open  create  delete   filename

32     13        1        1                     7                        8       1           1       /home/qli00001/

从上面可以看到,inotifywatch只能显示文件的总体变化数量,但是不能反映具体的变化过程,包括改变时间,操作的用户等。

偶然搜到一篇文章提到audit。发现在系统上,有个daemon auditd一直运行,而日志里记录的大都是关于用户的审计信息,如login,auth,chage之类的。文章也提到可以使用auditctl管理用户定义的审计规则。关于该命令的使用,参考man page吧,内容不多,但是也不很好理解,抱歉,英文水平有限,特别是读专业文档的时候。介绍一下我的使用:比如我在测试机上要监控/opt/audittest 这个文件夹的变化。

#auditctl -w /opt/audittest/ -p wx -r 10 -k lickky

(-w 指定文件或目录,-p指定操作:write execute, -r指定日记记录的频率每秒10次(log太多会影响极其性能,所以最好限制记录次数,当然这也会造成记录不完整,自己平衡),-k就是一个tag,方便查阅)

# auditctl -l (查看刚创建的规则)

LIST_RULES: exit,always dir=/opt/audittest (0xe) perm=wx key=lickky

然后我们来看/var/audit/audit.log:

rule添加成功

221 type=CONFIG_CHANGE msg=audit(1434353234.854:498545): audit_rate_limit=10 old=0 auid=608 ses=20688 res=1

222 type=CONFIG_CHANGE msg=audit(1434353234.855:498546): auid=608 ses=20688 op="add rule" key="lickky" list=4 res=1

删除一个文件no

type=SYSCALL msg=audit(1434353304.200:498613): arch=c000003e syscall=263 success=yes exit=0 a0=ffffffffffffff9c a1=f380c0 a2=0 a3=100 items=2 ppid=27225 pid=27304 auid=608 uid=55000866 gid=506 euid=55000866 suid=55000866 fsuid=55000866 egid=506 sgid=506 fsgid=506 tty=pts3 ses=20857 comm="rm" exe="/bin/rm" key="lickky"

type=CWD msg=audit(1434353304.200:498613):  cwd="/opt/audittest"

type=PATH msg=audit(1434353304.200:498613): item=0 name="/opt/audittest" inode=131236 dev=fd:03 mode=040777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT

type=PATH msg=audit(1434353304.200:498613): item=1 name="no" inode=131242 dev=fd:03 mode=0100640 ouid=55000866 ogid=506 rdev=00:00 nametype=DELETE

创建一个新文件,这里会同时记录生产的临时文件,内容比较类似,就不全部贴出来

type=SYSCALL msg=audit(1434353309.125:498614): arch=c000003e syscall=2 success=yes exit=4 a0=ef1560 a1=c2 a2=180 a3=1 items=2 ppid=27225 pid=27305 auid=608 uid=55000866 gid=506 euid=55000866 suid=55000866 fsuid=55000866 egid=506 sgid=506 fsgid=506 tty=pts3 ses=20857 comm="vim" exe="/usr/bin/vim" key="lickky"

type=CWD msg=audit(1434353309.125:498614):  cwd="/opt/audittest"

type=PATH msg=audit(1434353309.125:498614): item=0 name="/opt/audittest" inode=131236 dev=fd:03 mode=040777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT

type=PATH msg=audit(1434353309.125:498614): item=1 name=".hele.swp" inode=131242 dev=fd:03 mode=0100600 ouid=55000866 ogid=506 rdev=00:00 nametype=CREATE

有时候直接查看日志,看不出到底系统或者用户做了什么。这个时候,使用ausearch来搜索和翻译日志文件,很有帮助。

#ausearch -f /opt/audittest -if /var/log/audit/audit.log

不需要监控之后,删除规则

#auditctl -d -k lickky

删除全部自定义规则

#auditctl -D

转载于:https://blog.51cto.com/lickkyli/1662094

使用auditctl追踪文件变化相关推荐

  1. c# 监视目录下的文件变化

    在工作中需要学习一个应用系统软件,比较复杂,经常要在线读取ini,txt好多种类的文件,还有查问题的时候要分析log文件,但是我比较笨,又记不住什么时候动哪些文件,感觉学习好慢! 后来就想,我既然记不 ...

  2. Python监控目录和文件变化

    原文:https://www.cnblogs.com/lcamry/p/8392376.html Python监控目录和文件变化 一.os.listdir import os, time path_t ...

  3. python监听文件最后修改人_Python持续监听文件变化代码实例

    在日常的工作中,有时候会有这样的需求,需要一个常驻任务,持续的监听一个目录下文件的变化,对此作出回应. pyinotify就是这样的一个python包,使用方式如下: 一旦src.txt有新的内容,程 ...

  4. Linux定期监视某文件变化,监控Linux文件变化,防止服务器被黑

    运维服务器比较头疼的一个问题是系统被黑,沦为肉鸡或者矿机.除了加强安全基线配置,加强网络和端口加固,系统和应用bug修复,上IDS/IPS(入侵检测/防御系统)之外,另一个方面就是系统监控,一个完善准 ...

  5. java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化

    列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到 ...

  6. node --- 监听文件变化(静态、动态、子进程)

    静态版本:监听的文件名写死了 // watcher.js 'use strict' const fs = require('fs'); fs.watch('target.txt', () => ...

  7. spring 文件变化监听_Spring新变化

    spring 文件变化监听 让我们检查一下Spring社区在前几天发布的一些新版本: Spring Boot 1.0.0.RC1 Spring很高兴地宣布Spring Boot v1.0.0的第一个候 ...

  8. java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)

    一. spring配置文件:application.xml xmlns:tx="http://www.springframework.org/schema/tx" xmlns:ao ...

  9. 监听文件变化并自动运行 npm script

    监听文件变化并自动运行 npm script 软件工程师做的事情基本都是在实现自动化,比如各种业务系统是为了业务运转的自动化,部署系统是为了运维的自动化,对于开发者本身,自动化也是提升效率的关键环节, ...

最新文章

  1. java gui 怎么添加背景图片_三分钟教你学会用java写客户端程序!!速进!!
  2. 25个好用到爆的一行Python代码,建议收藏
  3. Latex快速入门系列 -- 在TexStudio中正确插入参考文献的基本操作
  4. “约见”面试官系列之常见面试题之第四十八篇之各个浏览器内核(建议收藏)
  5. Maven 打成 Webjar的方法
  6. 详解Redis的架构演化之路(附16张图解)
  7. 一统江湖的大前端(1)——PPT制作库impress.js(含附件)
  8. Spark之SparkSQL数据源
  9. pearson相关系数_使用gbdt我们到底应该怎么用相关系数?
  10. SQLite3扩展C API
  11. java循环嵌套显示不全_循环嵌套问题
  12. mybatis 业务逻辑
  13. AD6.8_mcu123 分享地址
  14. Cesium:通过字符串创建颜色
  15. 商道—小老板的生意经:读书笔记
  16. 删除OSX中第三方的「偏好设置」程序(.prefPane)
  17. As of Dart Sass 2.0.0 弃用 除法符号“/” element-ui自定义皮肤样式报错,但能运行
  18. 动态规划的递归写法和递推写法
  19. day17-面向对象作业
  20. Arcmap操作系列12:统计分析工具对点抽稀

热门文章

  1. java连接mysql数据库时出现乱码_java连接mysql数据库中文乱码问题
  2. oracle11g 冷备,oracle11G Windows冷备恢复
  3. linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...
  4. cfile清空文件内容_体育老师学编程(第11天)python常用的文件读写操作
  5. websocket有没有可能取代ajax
  6. canvas 封装一个自己的 icon 库
  7. 自实现进程管理器linux,【Linux工具篇】supervisor进程管理器
  8. docker web程序本地化_Docker 容器化部署 Python 应用
  9. java开发app的缺点_App原生开发的优缺点有哪些
  10. 猎人能单拿修理机器人图纸_南京创新周麒麟行:他们为铁路配备“体检”机器人...