如何找出哪个进程在没有root权限的情况下删除文件?

如何找出哪个进程在没有root权限的情况下删除文件?

我通过将可执行文件复制到每个节点、运行它并将输出复制回服务器节点来手动运行集群中的程序。突然,我注意到参与所有此过程的文件正在被一致删除,并且我无法找出我在哪里执行此操作,或者至少找不到哪个脚本正在删除它。

这与SO中的问题有关:https://stackoverflow.com/questions/23608486/how-to-find-which-process-removing-a-directory-in-linux

但请注意,在这里我可以复制这个问题。我没有管理员权限,因此无法使用,auditd但我可以根据需要重复该过程。有趣的是,我只是尝试更改文件的权限,但它不断消失。

我不期待任何神奇的事情

$ please tell me who did

但我很高兴听到关于如何尝试解决这个问题的聪明想法。

顺便说一句,我问管理员是否有任何进程可能会删除该文件,他说这是不可能的。

注意:我最初在 SO 中发布了此内容,但被标记为离题

编辑:好的,从我使用 Mark Plotnick 建议所看到的来看strace,我看到首先调用了文件的编译gcc位置。.c然后有一个lstat可执行文件。然后它出现在具有取消链接 PID 的execve调用上:/usr/bin/ld

5980 execve("/usr/bin/ld", ["/usr/bin/ld", "-plugin", "/cm/local/apps/gcc/6.3.0/libexec"..., "-plugin-opt=/cm/local/apps/gcc/6"..., "-plug       in-opt=-fresolution=/tmp/cc"..., "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"..., "-plugin-opt=-pass-through=-lc",        "-plugin-opt=-pass-through=-lgcc", "-plugin-opt=-pass-through=-lgcc_"..., "--eh-frame-hdr", "-m", "elf_x86_64", "-dynamic-linker", "/lib64       /ld-linux-x86-64.so.2", "-o", "MY/EXECUTABLE/BEING/DELETED", "/lib/../lib64/crt1.o", "/lib/../lib64/crti.o", "/cm/local/apps/gcc/6.3.0/lib/g       cc"..., "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/local/apps/gcc/6.3.0/lib/g"..., "-L/cm/local/apps/gcc/6.3.0/lib/g"..., "-L/lib/../lib       64", "-L/usr/lib/../lib64", "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/shared/apps/slurm/17.02.2/"..., "-L/cm/local/apps/gcc/6.3.0/lib/g       "..., "/tmp/ccdL3Sax.o", "-lm", "-lgcc", "--as-needed", ...], [/* 39 vars */]) = 0

进而:

5980  stat("MY/EXECUTABLE/BEING/DELETED", {st_mode=S_IFREG|0755, st_size=17392, ...}) = 0
5980  lstat("MY/EXECUTABLE/BEING/DELETED", {st_mode=S_IFREG|0755, st_size=17392, ...}) = 0
5980  unlink("MY/EXECUTABLE/BEING/DELETED") = 0
5980  open("MY/EXECUTABLE/BEING/DELETED", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3

相关内容