Как защитить систему от случайного отключения
Установка
Установить пакет Molly-Guard.
$ sudo apt install molly-guard
Она в основном отменяет следующие утилиты :halt
shutdown
poweroff
reboot
Можно также переопределить утилиты pm-hibernate
, pm-suspend
и pm-suspend-hybrid
, но это потребует дополнительных операций
Конфигурация хранится в каталоге /etc/molly-guard/.
Тестирование в демонстрационном режиме
Конфигурация по умолчанию защитит от случайных операций.
itsecforu@example:~$ sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. W: molly-guard: SSH session detected! Please type in hostname of the machine to reboot: example molly-guard: would run: /lib/molly-guard/reboot itsecforu@example:~$ sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. W: molly-guard: SSH session detected! Please type in hostname of the machine to reboot: x Good thing I asked; I won't reboot example ... W: aborting reboot due to 30-query-hostname exiting with code 1.
Осторожно, вы можете использовать более прямой подход к перезагрузке сервера.
$ ssh itsecforu@example sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. molly-guard: would run: /lib/molly-guard/reboot
Создание дополнительных сообщений
Вы можете создавать сообщения для определенных операций и сохранить их в каталоге /etc/molly-guard/messages.d.
Определите сообщение для операции перезагрузки.
$ echo -e "\nТы чего там удумал, старый...\n" | sudo tee /etc/molly-guard/messages.d/reboot
Любая другая операция без определенного сообщения будет использовать файл по умолчанию, если он существует.
$ echo -e "\nСообщите команде DevSecOps .\n" | sudo tee /etc/molly-guard/messages.d/default
Следующие примеры иллюстрируют это поведение.
itsecforu@example:~$ sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. Ты чего там удумал, старый... W: molly-guard: SSH session detected! Please type in hostname of the machine to reboot: example molly-guard: would run: /lib/molly-guard/reboot itsecforu@example:~$ sudo shutdown --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. Сообщите команде DevSecOps W: molly-guard: SSH session detected! Please type in hostname of the machine to reboot: example molly-guard: would run: /lib/molly-guard/shutdown
Создание дополнительных проверок
Требовать, чтобы stdin открывался на терминале, чтобы не позволять выполнять какие-либо из этих операций при неинтерактивном использовании SSH.
Создайте проверку 20-require-stdin в каталоге /etc/molly-guard/run.d/.
#!/bin/sh # # 20-require-stdin - require stdin opened on a terminal # set -eu # require an interactive terminal connected to stdin if [ ! -t 0 ]; then echo "STDIN is not opened on a terminal; I won't $MOLLYGUARD_CMD ...">&2 exit 1 fi
Убедитесь, что к этому файлу применены надлежащие права.
В следующем примере эта проверка будет использоваться для защиты системы от случайной перезагрузки.
$ ssh ansible@example sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. Ты чего там удумал, старый... STDIN is not opened on a terminal; I wont reboot... W: aborting reboot due to 20-require-stdin exiting with code 1. ansible@example:~$ sudo reboot --molly-guard-do-nothing I: demo mode; molly-guard will not do anything due to --molly-guard-do-nothing. Ты чего там удумал, старый... W: molly-guard: SSH session detected! Please type in hostname of the machine to reboot: example molly-guard: would run: /lib/molly-guard/reboot