====== Как защитить систему от случайного отключения ====== ==== Установка ==== Установить пакет 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