어떤 프로세스가 파일을 변경하는지 확인


35

내 컴퓨터에서 어떤 프로세스가 구성 파일을 변경하는지 확인하는 안정적인 방법을 찾으려고합니다 /etc/hosts.

lsof /etc/hosts현재 파일을 열어 놓은 프로세스를 찾는 데 사용할 수 있지만 프로세스가 파일을 열어서 쓰고 나서 다시 닫아서 도움이되지 않습니다.

나는 또한 lsof반복 옵션 (-r)을 보았지만 1 초에 한 번만 빠르게 진행되는 것처럼 보이며 진행중인 쓰기를 캡처하지 못할 것입니다.

파일 시스템의 변경 사항을 모니터링하는 몇 가지 도구를 알고 있지만이 경우 책임이있는 프로세스를 알고 싶습니다. 이는 프로세스에서 처리하는 것을 의미합니다.

답변:


52

감사를 사용하여이를 찾을 수 있습니다. 아직 사용할 수없는 경우 배포판에 대한 감사를 설치하고 활성화하십시오.

/ etc / hosts에 감사 감시 설정

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

호스트 파일이 변경 될 때까지 기다린 다음 ausearch를 사용하여 기록 된 내용을 확인하십시오.

/sbin/ausearch -f /etc/hosts | more

당신은 출력의 질량을 얻을 것이다


time-> 수 10 월 12 일 09:34:07 2011 type = PATH msg = audit (1318408447.180 : 870) : item = 0 name = "/ etc / hosts"inode = 2211062 dev = fd : 00 mode = 0100644 ouid = 0 ogid = 0 rdev = 00 : 00 obj = system_u : object_r : etc_t : s0 type = CWD msg = audit (1318408447.180 : 870) : cwd = "/ home / iain"type = SYSCALL msg = audit (1318408447.180 : 870) : 아치 = c000003e syscall = 2 성공 = 예 exit = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c items = 1 ppid = 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "touch" exe = "/ bin / touch" subj = user_u : system_r : unconfined_t : s0 key = "hosts-file"


이 경우 터치 명령을 사용하여 pid 파일이 7294이고 ppid 파일이 7259 (내 셸) 인 파일을 변경했습니다.


2
"배포에 대한 감사 활성화"가 약간 확장되어야합니다. 짜증나게, 위의 명령은 나에게 오류 나 결과를주지 않았다. "/ sbin / auditctl -e 1"도 도움이되지 않았습니다. 로깅을 수행하기 위해 감사 데몬을 실행하면 도움이되었습니다. "/etc/init.d/auditd start"(규칙이 삭제되었으므로 다시 입력해야했습니다).
tobixen

나를 위해 작동하지 않았다, ausearch항상 반환<no matches>
m0skit0

1
때로는 프로세스가 작업을 수행하기 위해 외부 명령을 호출하는 등의 프로세스를 수정 한 실제 프로세스를 얻기 위해 여러 감사를 설정해야 할 수도 있습니다. 즉, 사용자 crontab 항목이 지속적으로 재설정되는 이유를 찾으려고했습니다. crontab 명령은 책임이 있었지만 종료 된 ppid를 검사 할 때까지 / usr / bin / crontab을 감사 한 다음 crontab에 대한 액세스 타임 스탬프를 crontab의 감사 된 실행과 일치시켜야합니다. 그것은 ppid ... 오케스트레이션 데몬이 특정 사용자 cron 구성을 시행하고 있음을 보여주었습니다.
Wil

3

inotify-tools를 사용할 수도 있습니다.

  inotifywait -mq -e open -e modify /etc/hosts

14
감사를 통해 원하는 정보를 제공 할 수 있습니다. inotify가이를 가능하게한다는 가정을하기는 쉽지만 수정하지 않은 프로세스 ID를 제공하지 않기 때문에 불가능합니다.
객관적인

2

많은 검색 후 해결책을 찾았습니다.이 명령을 사용하십시오. sudo fs_usage | grep [path_to_file]


2
이것은 MacOS 전용입니다.
majick

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.