Грязный способ скриптов
Существует несколько способов перезагрузки. Один из способов, который я вижу, заключается в замене shutdown, halt, reboot и init на скрипты:
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
должна позволить вам увидеть, какой процесс вызвал ваш сценарий. Возможно, вы захотите добавить больше информации в журнал, но это должно быть хорошим началом.
Вещи, которые могут быть пропущены
Другие команды могут перезагрузить систему, вызвав syscall reboot
. Это могут быть "официальные" команды или "неавторизованные".
X-сервер можно выключить, и с некоторыми настройками это может сделать любой пользователь. Если удаленный доступ и выключение разрешены, другие люди могут потребовать выключения на расстоянии (однако это не объясняет поведение с перезагрузкой каждые 3 раза).
Init target
Вы можете:
sleep 60
или немного больше)ps axjf
каждые 60 секунд и записывающий в файлЭто должно дать информацию о запущенных процессах на момент выключения. Конечно, вы можете добавить другие команды, которые могут помочь вам в исследовании того, что выполняется каждые 60 секунд
Аудит ядра
Другой способ исследовать это - использовать функцию аудита ядра, но она должна быть включена в вашем ядре (во многих дистрибутивах это не так).
Затем используйте:
auditctl -a entry,always -S reboot
для записи каждого вызова перезагрузки, и используйте ausearch
для поиска вызовов, которые были сделаны.
Решено. Он должен удалить флаг -e
.
$ echo "_uU_%UHY%^GSSD$%GWRW$T#wf4werwefF$fW#$wfdd%6blahblahblah" > pattern.txt
$ sudo grep -rl "_uU". | xargs sed -i s/$(cat pattern.txt)//g