답변:
마침내 나는 여기서 답을 찾았습니다 .
Linux Audit 데몬이 트릭을 수행합니다.
sudo auditctl -w /path/to/somefile -p wra
그리고
ausearch -f /path/to/somefile -i
위의 답변이 노화됨에 따라 sysdig 의 대안을 제안하겠습니다 . 파일을 삭제하는 프로세스 pid
와 name
프로세스를 표시 합니다 /tmp/test
. 먼저로 파일을 만듭니다 touch /tmp/test
. 그런 sysdig
다음 다음 필터로 시작 하십시오.
$ sudo sysdig -p'%proc.pid,%proc.name' '(evt.type=unlinkat and (evt.arg.name=test or evt.arg.name=/tmp/test)) or (evt.type=unlink and evt.arg.path=/tmp/test)'
unlinkat(2)
경로 (예 :) 가 상대적 일 or
경우 필터가 필요합니다 . (을 호출하는 ) 및 ( GNU 버전 을 호출하는 ) 둘 다 처리하려면 필터가 두 syscall과 일치해야합니다.evt.arg.name
unlink
unlink(2)
rm
unlinkat(2)
sysdig
프로세스가 파일을 삭제할 때 실행 중이어야합니다. 그런 다음 이러한 명령을 실행할 때 :
$ unlink /tmp/test
$ touch /tmp/test
$ rm /tmp/test
$ cd /tmp; touch test; rm test
다음과 같은 출력이 표시됩니다.
11380,unlink
11407,rm
11662,rm
필터링 및 출력에 대한 설명은 sysdig 사용자 안내서 를 참조하십시오 .
필터가 꽤 길기 때문에 끌을 쓰는 것이 편리하다는 것을 알았습니다. sysdig
명령 과 연관된 lua 스크립트입니다 .
description = "displays processes that delete a file"
short_description = "spy file deletion"
category = "files"
args =
{
{
name = "path",
description = "the path of the file to monitor",
argtype = "string"
},
}
function on_set_arg(name, val)
path = val
return true
end
function on_init()
local filename = path
for i in string.gmatch(path, "[^/]+") do
filename = i
end
chisel.set_event_formatter("%proc.pid\t%proc.name")
chisel.set_filter(
"(evt.type=unlinkat and (evt.arg.name=" .. path .. " or \
evt.arg.name=" .. filename .. ")) or \
(evt.type=unlink and evt.arg.path=" .. path .. ")")
return true
end
의견을 말하고 개선하십시오. lua 스크립트를 spy_deletes.lua
디렉토리 내의 파일에 넣고이 디렉토리에서 실행 sysdig
하여 끌을 사용할 수 있습니다. 입력 sudo sysdig -cl
하면 다음과 같이 표시됩니다.
Category: files
---------------
spy_deletes spy file deletion
이제 당신은 그것을 호출 할 수 있습니다 :
$ sudo sysdig -c spy_deletes /tmp/test
그리고 다른 터미널 유형에서 :
$ touch test; unlink test
$ touch test; unlink /tmp/test
$ touch test; rm test
$ touch test; rm /tmp/test
출력됩니다 :
16025 unlink
16033 unlink
16041 rm
16049 rm
unlinkat
필터는보다 정확하고 유일한 절대 경로와 일치 자격이있다. 전달 된 디렉토리의 fd를 검색해야합니다 unlinkat(2)
.
rm /tmp/test
다른 터미널 에 입력 하고 있었습니다 . 명확하게하기 위해 답변을 편집했습니다.