주어진 파일을 생성 한 프로그램이나 스크립트를 찾을 수 있습니까?


35

"client_state.xml", "lockfile"및 "time_stats_log"라는 3 개의 파일이 홈 디렉토리에 갑자기 나타났습니다. 마지막 두 개는 비어 있습니다. 그들이 어떻게 도착했는지 궁금합니다. 처음 발생한 것은 아니지만 몇 주 전입니다. 파일을 삭제했는데 파산하거나 불평 한 것이 없습니다. 에 의해보고 된 시점에서 내가하고있는 일을 생각할 수 없었습니다 stat $filename. 그들이 어디에서 왔는지 알 수있는 방법이 있습니까?

또는 파일 작성을 위해 홈 디렉토리 (하위 디렉토리는 아님)를 모니터하는 방법이 있습니까?


누군가 언급 할 것이 확실하기 때문에, 나는 inotify하지 않습니다.
Wolf

답변:


18

어떤 프로그램 이 파일을 만들지 결정하는 방법이 없다고 생각 합니다.

다른 질문의 경우 : 을 사용하여 파일이 재생성되는 것을 볼 수 있습니다inotify . 서브 시스템에 inotifywait대한 명령 행 인터페이스입니다 inotify. create홈 디렉토리에서 이벤트 를 찾도록 지시 할 수 있습니다 .

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

-m(모니터) 로 실행하고 싶을 것입니다.이 모니터는 첫 번째 이벤트를 본 후에 종료하지 않도록 지시합니다.


어떻게해야 inotify합니까? 설치되지 않았으며 (커널 2.6.34) 없습니다 /dev/inotify.
Wolf

1
@Wolf 어떤 배포판? 자신의 커널을 빌드하면 CONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace)입니다. inotifywait무엇인가라는 이름의 패키지에 아마inotify-tools
마이클 Mrozek

@Michael, 오픈 수세 11.3입니다. 나는 결코 커널을 만들지 않았다. 약 5 개월 동안 Linux를 사용해 왔으며 약간 어려운 개념입니다. 그러나 나는 튜토리얼이나 무언가를 둘러 볼 것입니다.
Wolf

@Wolf 글쎄, 만약 당신이 가지고있는 커널이 없다면 dogbane의 대답 은 더 쉬울 것입니다
Michael Mrozek

2
@Michael 사실, 좀 더 사냥과 연구를 한 후에 inotify-tools패키지 가 들어있는 커뮤니티 저장소를 추가 했으므로 이제 inotifywait(및 inotifywatch)가 있습니다. 나는 그것을 테스트했고 작동하는 것 같습니다.
Wolf

22

LoggedFS를 통해 파일 시스템에 액세스하여 파일 시스템에서 발생하는 모든 것을 볼 수 있습니다 . 이것은 디렉토리 트리의 모든 액세스를 기록 하는 스택 파일 시스템 입니다.

loggedfs -l /var/tmp/$USER-home-fs.log ~

전체 홈 디렉토리를 기록하면 시스템 속도가 느려질 수 있습니다. 최소한 엄격한 필터를 사용 하여 구성 파일 을 작성하려고 합니다.

루트 액세스 권한이있는 경우 Linux에서 감사 서브 시스템 을 사용 하여 파일 시스템 액세스를 포함하여 많은 것을 로깅 할 수 있습니다 . auditd데몬이 시작 되었는지 확인한 다음로 로그 할 대상을 구성하십시오 auditctl. 기록 된 각 작업은 /var/log/audit/audit.log(일반 배포시)에 기록됩니다 . 특정 파일 시청을 시작하려면

auditctl -w /path/to/file

또는 긴 형식으로

auditctl -a exit,always -F path=/path/to/file

디렉토리에 ( -w또는을 사용 하여) 시계를 배치하면 디렉토리 -F dir=에있는 파일과 해당 서브 디렉토리도 반복적으로 감시됩니다.


BSD는 또한 보안 이벤트 감사를 통해이를 지원합니다. freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff

4

당신은보고 싶을 수도 auditd이 패키지는 보안 감사를 수행 할 수 있습니다, 어떤이 파일 시스템에서 변경 사람에 대한 많은 정보를 얻을.


여러 사용자에게 셸 액세스를 제공하는 서버가 있고 개별 작업에 대해 일정 수준의 책임을 제공해야하는 경우 명령 기록 로깅을 사용하여 bash 및 tcsh와 같은 특정 셸을 빌드 할 수 있습니다. < timkennedy.net/2010/12/07/… > 에서 쉘 로그인에 관한 블로그 게시물을 작성했습니다 . 쉘 로깅은 하지 가 (스크립트 또는 프로그램 등) (non-interactive) 형 모드 쉘에 의해 실행되는 명령을 기록하지 않으므로, 진정한 감사 시스템에 대한 대체. 이러한 종류의 세분성을 얻으려면 훌륭한 감사 솔루션이 필요합니다.
Tim Kennedy

1
@TimKennedy-블로그 게시물이 더 이상 표시되지 않습니다.
SLM

1
죄송합니다. 사이트가 해킹되어 잠시 동안 다운되었습니다. 새 페이지는 timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html에 있습니다
Tim Kennedy

3

나는 이것이 오래된 질문이라는 것을 알고 있지만 누군가가 유용하다고 생각하는 경우를 대비하여 다른 접근법을 제안 할 것입니다. 나는 원래 이것에 대한 질문에 대한 답변으로 이것을 게시했습니다.

옵션 중 하나 sysdig는 오픈 소스 시스템 모니터링 응용 프로그램입니다. 이를 사용하여 이름별로 파일의 활동을 모니터 할 수 있습니다. 당신이 프로세스라는 이름의 파일을 생성 있었는지보고 싶어한다고 가정하자 /tmp/example.txt:

# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0

해당 출력에서 touchpid 5470으로 이름 지정된 프로세스 가 파일을 열었 음을 알 수 있습니다.

자세한 정보가 필요하면 시스템 호출 추적이 수집되는 "캡처 모드"에서 실행할 수 있습니다.

# sysdig -w /tmp/dumpfile.scap

그런 다음 파일이 작성 될 때까지 기다린 후 중지 sysdig하고 실행하십시오.

# csysdig -r /tmp/dumpfile.scap

그러면 발생한 모든 것을 탐색 할 수 있습니다. 당신은 눌러 <F2>선택 Files, 언론 <F4>, 파일 이름에 대해 다음을 눌러 검색 <F6>(당신에게 위의 명령과 유사한 출력이 표시됩니다) "발굴"에. 이를 통해 동일한 접근 방식을 사용하여 실제로 파일을 작성한 프로세스에 대한 정보를 찾을 수 있습니다.

의 GUI 버전있다 csysdig라고는 sysdig-inspect그보다 차의 당신의 컵라면.


또는 프로세스가 해당 파일에 쓰는지
rogerdpack

2

inotify루프에서 파일을 확인하는 스크립트를 작성할 수 없습니다 .

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done

2
이것은 어떤 프로그램이 그것을 만들 었는지를 보여주지 않습니다
OverCoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.