그래서 내 루트 디렉터리에 "]" 디렉터리를 생성하는 프로세스를 알고 싶습니다. 나는 이것이 일부 스크립트의 오타라고 가정합니다. 그래서 위에 표시된 것과 매우 유사하게 해당 디렉터리에 대한 감사를 설정했습니다.이 문제.
다음날 로그를 확인해 보니 해당 디렉터리가 다시 생성되어 감사 및 기록이 되어 있었던 것으로 나타났습니다. 하지만 이 출력에서 내가 볼 수 있는 것은뿌리그것을 만들었습니다.
산출:
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
등을 확인하세요. 또한 프로세스가 시작된 시기를 확인할 수 있으며 이는 이것이 어떤 크론 작업인지 결정하는 데 도움이 될 수 있습니다.
mkdir
auditd만 사용하면 호출뿐만 아니라 디렉토리에 대한 모든 액세스를 기록해야 하므로 이를 변경하거나 디렉토리 내의 파일에 액세스하는 명령이 기록됩니다. 디렉토리가 생성되었지만 다른 사람이 여기에 액세스하지 않는 경우 auditd만으로는 문제를 해결하기에 충분하지 않다고 생각합니다.