Как защитить систему от случайного отключения

Установить пакет 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