현재 3번 중 1번 재부팅하는 시스템이 있는데, 날짜 시간을 찾을 수 있고, 누가(시스템이라고 말하면) 알 수 있지만 이유는 알 수 없습니다.
다시 시작 스크립트를 쓸모없는 스크립트로 대체하여 누가, 어디서, 왜 다시 시작을 활성화하려고 하는지 파악하는 것이 가능한지 궁금합니다. 어떻게 해야 합니까?
저는 Linux linaro를 사용하고 있습니다. 우분투 기반 FS입니다. 이 문제 디버깅에 대한 제안을 환영합니다.
답변1
더러운 스크립트 방식
다시 시작하는 방법에는 여러 가지가 있습니다. 제가 조사해 볼 수 있다고 생각한 한 가지 접근 방식은 스크립트를 사용하여 종료, 종료, 다시 시작 및 초기화를 대체하는 것입니다.
for cmd in shutdown halt reboot init
do
mv /usr/bin/$cmd /usr/bin/${cmd}.ori
ln -s /usr/bin/${cmd}.ori /usr/bin/$cmd
done
그런 다음 정보를 기록하는 쉘 스크립트를 작성하십시오.
#!/bin/bash
echo "$0 called with $@ by $USER at `time` - Processes: `ps axjf`" >> /var/log/reboot.log
${0}.ori $@
그리고 이를 로 복사하거나 연결 해야 합니다. 단 , 재부팅할 때만 누구나 로그인할 수 있도록 /usr/bin/{shutdown,halt,reboot,init}
해야 합니다 ./var/log/reboot.log
root
ps axjf
스크립트라고 불리는 프로세스를 볼 수 있어야 합니다 . 로그에 더 많은 정보를 추가하고 싶을 수도 있지만 이는 좋은 시작일 것입니다.
당신이 놓칠 수도 있는 것들
다른 명령은 시스템 호출을 호출하여 시스템을 다시 시작할 수 있습니다.reboot
. 이는 "공식적인" 명령일 수도 있고 "악의적인" 명령일 수도 있습니다.
X 서버는 종료될 수 있으며 일부 설정을 사용하면 모든 사용자가 종료할 수 있습니다. 원격 액세스 및 종료가 허용되면 다른 사람이 원격 종료를 요청할 수 있습니다(그러나 이는 매 3번째 재부팅 동작을 설명하지는 않습니다).
대상 초기화
당신은 할 수 있습니다:
- 단계를 추가하다목표의 시작 부분에런레벨 0과 6에서 일정 시간(예:
sleep 60
조금 더) 기다립니다. ps axjf
60초마다 실행되어 파일에 기록하는 스크립트가 있습니다.
이는 종료 시 실행 중이던 프로세스에 대한 정보를 제공해야 합니다. 물론 60초마다 실행되는 내용을 조사하는 데 도움이 되는 다른 명령을 추가할 수도 있습니다.
커널 감사
이 문제를 조사하는 또 다른 방법은 다음을 사용하는 것입니다.커널 감사 기능, 그러나 커널에서 활성화해야 합니다(많은 배포판에서는 그렇지 않습니다).
그런 다음 다음을 사용하십시오.
auditctl -a entry,always -S reboot
각 재시작 호출을 기록하고 사용ausearch
완료된 통화를 찾아보세요.