루트 권한 없이 어떤 프로세스가 파일을 삭제했는지 확인하는 방법은 무엇입니까?

루트 권한 없이 어떤 프로세스가 파일을 삭제했는지 확인하는 방법은 무엇입니까?

실행 파일을 각 노드에 복사하고 실행한 다음 출력을 다시 서버 노드에 복사하여 클러스터에서 프로그램을 수동으로 실행합니다. 갑자기 이 과정에 관련된 모든 파일들이 일제히 삭제되고 있다는 걸 알아차렸고, 어디서 이런 일을 하고 있는지, 적어도 어떤 스크립트가 이를 삭제하고 있는지 알 수 없었다.

이것은 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파일의 컴파일 위치가 first 이라는 것을 알 수 있습니다 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

관련 정보