그래서 어떤 프로세스가 내 루트에 ']' 디렉토리를 생성하는지 알고 싶었습니다. 나는 이것이 일부 스크립트의 오타라고 가정했습니다. 그래서 저는 위에 표시된 것과 매우 유사하게 해당 디렉토리에 대한 감사를 설정했습니다.이 질문.
다음날 로그를 확인한 결과 디렉터리가 다시 생성되어 감사에 의해 기록되었음을 확인했습니다. 하지만 이 출력에서 제가 알 수 있는 것은뿌리그것을 만들었습니다.
산출:
type=SYSCALL msg=audit(26.04.2013 06:25:20.275:85) : arch=i386 syscall=mkdir success=yes exit=0 a0=bfd02ea5 a1=1ed a2=bfd02ea5 a3=bfd025b8 items=2 ppid=24114 pid=24115 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=4294967295 comm=mkdir exe=/bin/mkdir key=weird
다음 줄로 끊어짐:
type=SYSCALL
msg=audit(26.04.2013 06:25:20.275:85) :
arch=i386
syscall=mkdir
success=yes
exit=0 a0=bfd02ea5
a1=1ed a2=bfd02ea5 a3=bfd025b8
items=2 ppid=24114 pid=24115
auid=unset
uid=root
gid=root
euid=root
suid=root
fsuid=root
egid=root
sgid=root
fsgid=root
tty=(none)
ses=4294967295
comm=mkdir
exe=/bin/mkdir
key=weird
어떤 스크립트가 이 명령을 루트로 실행하는지 알고 싶습니다. 그게 가능합니까? 해당 PPID를 사용하는 프로세스가 더 이상 실행되지 않습니다.
답변1
이것이 cron에 의해 시작된 스크립트에 의해 발생했다고 가정하면 모든 crond-children을 추적할 수 있습니다.
strace -p $CRONPID -f -o /path/to/cron-strace.log -e trace=mkdir
그러면 다음과 같은 출력이 발생합니다.
Process 3584 attached
Process 18227 attached
[pid 18227] execve("./testscript", ["./testscript"], [/* 100 vars */]) = 0
Process 18228 attached
[pid 18228] execve("/usr/bin/mkdir", ["mkdir", "/home/hl/tmp/strace-testdir"], ...) = 0
[pid 18228] mkdir("/home/hl/tmp/strace-testdir", 0777) = 0
물론 strace로 인해 스크립트 실행 속도가 느려지지만 일반적으로 문제가 되지 않습니다.
답변2
이 출력만으로는 어떤 프로그램이 mkdir
명령을 호출했는지 확인할 수 없습니다.
당신이 가지고 있다면BSD 프로세스 회계, 다음 명령은 PID 24114가 있는 프로그램을 보여줍니다.
dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / 24114 / {print}'
이것은 아마도 sh
. 열 10( |
구분 기호 포함)에는 기록된 프로세스의 PID와 PPID가 포함되어 있으므로 PPID를 사용하여 검색을 반복하여 호출된 프로그램 sh
등을 확인합니다. 또한 프로세스가 시작된 시간을 알 수 있으므로 이것이 어떤 크론 작업인지 파악하는 데 도움이 될 수 있습니다.
auditd만 사용하면 호출뿐만 아니라 해당 디렉터리에 대한 모든 액세스를 기록해야 합니다 mkdir
. 이를 통해 디렉터리를 변경하거나 디렉터리에 있는 파일에 액세스하는 명령을 기록할 수 있습니다. 디렉토리가 생성되었지만 다른 사람이 여기에 액세스하지 않는 경우 auditd만으로는 이를 파악하는 데 충분하지 않다고 생각합니다.