заменить / удалить текст (sed) файлом

Грязный способ скриптов

Существует несколько способов перезагрузки. Один из способов, который я вижу, заключается в замене 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

Вы можете:

  • добавить шаг в начале цели на уровнях выполнения 0 и 6, который ждет некоторое время (например: sleep 60 или немного больше)
  • иметь скрипт, выполняющий ps axjf каждые 60 секунд и записывающий в файл

Это должно дать информацию о запущенных процессах на момент выключения. Конечно, вы можете добавить другие команды, которые могут помочь вам в исследовании того, что выполняется каждые 60 секунд

Аудит ядра

Другой способ исследовать это - использовать функцию аудита ядра, но она должна быть включена в вашем ядре (во многих дистрибутивах это не так).

Затем используйте:

auditctl -a entry,always -S reboot

для записи каждого вызова перезагрузки, и используйте ausearch для поиска вызовов, которые были сделаны.

0
05.06.2019, 04:18
1 ответ

Решено. Он должен удалить флаг -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
0
28.01.2020, 03:36

Теги

Похожие вопросы