Перейти к содержимому

Как защитить продакшн сервер от rm -rf и опасных команд

Каждый DevOps-инженер и системный администратор хотя бы раз сталкивался с ситуацией, когда случайное нажатие Enter в «не том» окне терминала приводило к катастрофическим последствиям: удалению конфигурационных каталогов, обнулению баз данных или падению критических сервисов.

В этом практическом руководстве мы разберем, как встроенная система Prod Guard в Shellit защищает ваши боевые сервера на уровне PTY-потока терминала до того, как байты команды физически покинут ваше устройство.


Анатомия проблемы: почему происходят инциденты на проде

Случайные деструктивные действия возникают не из-за нехватки знаний, а из-за когнитивной перегрузки:

  1. Потеря контекста между вкладками: когда у инженера открыто 10 вкладок (локальный bash, staging, dev-песочница и production), легко отправить команду rm -rf * в окно боевого сервера.
  2. Ошибки с переменными окружения: скрипты вида rm -rf $TARGET_DIR/ при пустой или неинициализированной переменной превращаются в rm -rf /.
  3. Опечатки в путях: пробел между слешем и точкой (rm -rf / .config вместо rm -rf ~/.config).
  4. Случайная вставка из буфера обмена (Paste Jacking): вставка многострочного текста, содержащего невидимый символ перевода строки \n.

Шаг 1. Маркировка сервера тегом окружения PROD

Защита Prod Guard активируется автоматически на основе цветового тега среды в Shellit:

  1. Откройте карточку нужного сервера в каталоге хостов (или нажмите Ctrl+E / Cmd+E для редактирования).
  2. В поле Окружение (Environment) выберите вариант PROD (Production).
  3. При необходимости укажите критичность сервера (например, «Database Cluster» или «Edge Gateway»).
  4. Сохраните изменения.

Настройки безопасности и политика аудита сессий в Shellit

С этого момента при любом подключении к данному серверу:

  • Вкладка терминала получает ярко-красный бейдж PROD.
  • Вокруг активного терминала активируется пульсирующая предупреждающая рамка безопасности.
  • В строке состояния терминала отображается индикатор [🛡️ PROD GUARD ACTIVE].

Шаг 2. Как работает перехват команд в реальном времени

В отличие от классических alias-оберток (alias rm='rm -i'), которые легко обходятся вызовом /bin/rm или сбрасываются в subshell, Prod Guard работает на уровне эмулятора терминала:

[Клавиатура оператора]
│
▼
[Shellit PTY Buffer Stream] ──► (Парсинг токенов и регулярных выражений)
│
├───► Опасная команда? ──► [НЕТ] ──► Немедленная отправка в SSH сокет
│
└───► [ДА!] ──► Блокировка отправки \n и вывод модального окна подтверждения

Терминальный клиент буферизирует текущую вводимую строку. Когда вы нажимаете Enter, клиент анализирует строку на наличие запрещенных паттернов. Если паттерн найден, символ \n (CRLF) не передается удаленному SSH-серверу.


Шаг 3. Список автоматически перехватываемых команд

По умолчанию Prod Guard блокирует следующие классы операций на PROD:

1. Рекурсивное удаление

  • rm -rf / и rm -rf /*
  • rm -rf . и rm -rf *
  • rm -rf --no-preserve-root

2. Форматирование и работа с блочными устройствами

  • mkfs, mkfs.ext4, mkfs.xfs
  • dd if=... of=/dev/sd* или of=/dev/nvme*
  • fdisk, parted, wipefs

3. Разрушение баз данных в интерактивных CLI

  • DROP DATABASE ...;
  • DROP TABLE ...;
  • TRUNCATE TABLE ...;

4. Остановка критических инфраструктурных демонов

  • systemctl stop docker / systemctl stop containerd
  • systemctl stop kubelet
  • kubeadm reset
  • docker system prune -a --volumes -f

Шаг 4. Реакция системы и диалог подтверждения

Когда Prod Guard обнаруживает опасную конструкцию, на экране появляется модальный экран тревоги:

  1. Точный текст команды: вы видите команду целиком, включая все аргументы.
  2. Целевой хост: указывается IP или домен сервера (например, prod-db-master (198.51.100.10)), чтобы вы осознали контекст выполнения.
  3. Двухфакторное подтверждение: чтобы выполнить команду, недостаточно случайно нажать Space или Enter. Требуется нажать явную кнопку «Выполнить один раз» либо ввести контрольное слово CONFIRM.

Дополнительно: Политика записи сессий «Только на PROD»

Для соблюдения стандартов безопасности (SOC 2, ISO 27001) в меню Настройки → Безопасность вы можете активировать автоматическую запись сессий в формате asciinema / raw log:

  • Записывать только PROD: сессии на Dev и Staging остаются приватными, а каждая сессия на боевых серверах автоматически архивируется и подписывается в локальном зашифрованном хранилище.
  • Auto-Clear Clipboard: автоматическая очистка буфера обмена через 30 секунд после копирования конфигов и паролей.