존재하지 않는 파일이나 디렉터리에 액세스하려고 시도하는 프로세스를 모니터링합니다.

존재하지 않는 파일이나 디렉터리에 액세스하려고 시도하는 프로세스를 모니터링합니다.

우리는 웹사이트를 하나의 서버 구성에서 새로운 구성으로 마이그레이션하고 있으며 웹사이트는 이전과 다른 경로에 있게 됩니다. 이전 경로를 주의 깊게 확인하고 새 경로로 교체할 계획이지만, 누락된 경우 이전 경로에 액세스하려는 프로세스를 모니터링하고 해당 프로세스의 UID가 무엇인지 알 수 있는 방법이 있습니까?

답변1

이 작은 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)
  }
}

시스템 호출을 열고 반환 시 통계를 후크합니다(코드를 복사/붙여넣을 수 있습니다. 다른 시스템 호출을 잊어버렸을 수도 있습니다). 시스템 호출은 커널과 통신하는 유일한 방법이므로 아무것도 놓치지 않을 것입니다. 스크립트는 다음과 같은 출력을 생성합니다.

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

systemtap 사용의 장점은 다음과 같습니다.

  • 프로세스 중단 감소
  • 시스템 전체(모니터링되는 프로세스뿐만 아니라), 스크립트에서 직접 선택 항목을 줄일 수 있습니다.
  • 리소스 집약도가 낮음(모든 작업 이후에 greping하는 대신 실패한 작업만 표시)
  • 호출 프로그램에 대한 자세한 정보(예: 추적, 호출 시간 등)를 얻기 위해 스크립트를 개선할 수 있습니다. 귀하의 응용 프로그램에 따라 다릅니다.

단점은 다음과 같습니다.

  • 표준은 아니므로 설치해야 합니다(그러나 대부분의 배포판에서 작동할 만큼 표준입니다). Redhat 및 변종의 경우:sudo yum install systemtap
  • 모듈을 빌드하려면 디버깅 정보가 필요합니다. Redhat 및 변종의 경우:sudo debuginfo-install kernel

유용한 링크:Tapset(포함된 기능) 인덱스,그리고초보자 가이드

이민에 행운을 빕니다!

답변2

다음과 같이 해야 합니다.

strace -f \
-e trace=open,stat,stat64,lstat,lstat64,chdir,mkdir,rename,symlink,creat \
 -o >(grep "the paths you want to catch" > log) \
commandToStartYourServer

-f스위치가 하위 프로세스를 추적하도록 하려고 합니다 . 추적 옵션은 IO(제조 추적 ) fabricate를 추적하는 데 사용되는 하위 집합 입니다."open,stat,stat64,lstat,lstat64,execve,exit_group,chdir,mkdir,rename,clone,vfork,fork,symlink,creat"

이는 grep 및 프로세스 교체(기본적으로 시스템 수준 파이프)를 통해 출력을 필터링하여 디스크 IO를 추가로 제한합니다.

답변3

패트레이스를 사용할 수 있습니다. 커널 지원(fanotify)은 대부분의 최신 시스템에 있어야 하지만 fatrace 사용자 공간 애플리케이션은 일부 운영 체제의 표준 저장소에 없습니다. fatrace는 이전 파일이 별도의 파일 시스템에 있는 경우 특히 좋습니다.

http://www.lanedo.com/filesystem-monitoring-linux-kernel/

--

더 일반적인 방법은 auditd이지만 사용하기가 조금 더 어렵습니다.

http://linux-audit.com/configuring-and-auditing-linux-systems-with-audit-daemon/

--

심볼릭 링크가 완전히 다른 경로를 통한 액세스를 허용하는 경우 경로별로 파일 사용량을 모니터링하는 데에는 근본적인 문제가 있으므로 이에 특별한 주의를 기울이는 것이 좋습니다.

관련 정보