우리는 웹사이트를 하나의 서버 구성에서 새로운 구성으로 마이그레이션하고 있으며 웹사이트는 이전과 다른 경로에 있게 됩니다. 이전 경로를 주의 깊게 확인하고 새 경로로 교체할 계획이지만, 누락된 경우 이전 경로에 액세스하려는 프로세스를 모니터링하고 해당 프로세스의 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/
--
심볼릭 링크가 완전히 다른 경로를 통한 액세스를 허용하는 경우 경로별로 파일 사용량을 모니터링하는 데에는 근본적인 문제가 있으므로 이에 특별한 주의를 기울이는 것이 좋습니다.