sa2*_*289 4 linux monitoring files
我们正在将网站从一种服务器配置迁移到新配置,并且这些网站将采用与以前不同的路径。我们计划仔细检查并用新路径替换旧路径,但如果我们错过任何路径,是否有某种方法可以监视任何试图访问旧路径的进程,并且还知道该进程所属的 UID 是什么?
您可以使用这个小 systemtap 脚本:
#!/usr/bin/stap
function proc:string() { return sprintf("PID(%d) UID(%d) PROC(%s)", pid(), uid(), execname()) }
probe syscall.open.return, syscall.stat.return,
syscall.open64.return ?, syscall.stat64.return ? {
filename = user_string($filename)
if ($return < 0) {
printf("failed %s on %s by %s\n", pn(), proc(), filename)
}
}
Run Code Online (Sandbox Code Playgroud)
它将在返回时挂钩系统调用 open 和 stat (您可以复制/粘贴代码,也许我忘记了其他一些系统调用)。由于系统调用是与内核通信的唯一方式,因此您不会错过任何内容。这个脚本会产生这样的输出:
failed syscall.stat.return on PID(4203) UID(1000) PROC(bash) by /tmp/rofl
failed syscall.stat.return on PID(4203) UID(1000) PROC(bash) by /tmp/hihi
Run Code Online (Sandbox Code Playgroud)
在使用 systemtap 的优点中,我们有:
对于缺点:
sudo yum install systemtapsudo debuginfo-install kernel一些有用的链接:tapset(包含的函数)索引和初学者指南
祝您移民顺利!