Небезпечні Linux-команди, які можуть зламати систему
Вступ
Linux заслужено вважається однією з найстабільніших та найнадійніших операційних систем. Саме тому її широко використовують для серверів, контейнерних платформ, хмарної інфраструктури, суперкомп'ютерів та корпоративних середовищ. Однак навіть така стійка система може бути миттєво виведена з ладу однією невдалою командою.
На відміну від багатьох інших операційних систем, Linux надає адміністратору практично необмежений контроль над системою. Обліковий запис root має право змінювати будь-який файл, завершувати будь-який процес, форматувати диски, змінювати ядро та навіть повністю видалити операційну систему без додаткових підтверджень. Саме ця свобода є одночасно найбільшою перевагою та найбільшим ризиком.
У цій статті розглянемо найнебезпечніші Linux-команди, які можуть призвести до втрати даних, пошкодження файлової системи, зависання сервера, перевантаження ядра, появи kernel panic, запуску fork-бомб, створення мільйонів каталогів та інших критичних проблем. Також розглянемо способи захисту від подібних ситуацій.
Чому Linux дозволяє виконувати настільки небезпечні команди
Філософія UNIX і Linux базується на принципі довіри до адміністратора.
Система не намагається захистити користувача від власних дій. Якщо процес має достатні права доступу, ядро виконає практично будь-яку операцію.
Саме тому більшість катастроф у Linux є наслідком людської помилки, а не вразливостей операційної системи.
Найчастіші причини:
- запуск команд від root;
- помилки у shell-скриптах;
- випадкове видалення директорій;
- неправильне використання wildcard (
*); - копіювання команд з Інтернету без перевірки;
- виконання шкідливих сценаріїв.
Видалення всієї файлової системи через rm -rf
Без перебільшення це найвідоміша команда серед системних адміністраторів.
rm -rf /або
rm -rf /*Що відбувається
Команда рекурсивно видаляє всі файли та каталоги.
Параметри означають:
-r- рекурсивне видалення;-f- без підтвердження;/- коренева директорія.
У сучасних дистрибутивах GNU Coreutils існує захист:
rm: it is dangerous to operate recursively on '/'Але його можна вимкнути:
rm -rf / --no-preserve-rootПісля цього система почне видаляти власні бібліотеки, конфігурацію, ядро, драйвери та користувацькі файли.
Наслідки
- система перестає завантажуватися;
- втрата всіх даних;
- необхідність повного перевстановлення ОС;
- можливість втрати RAID або LVM-конфігурації.
Небезпека wildcard (*)
Іноді достатньо однієї помилки.
Приклад:
rm -rf $DIR/*Якщо змінна порожня:
DIR=""отримаємо
rm -rf /*Саме такі помилки неодноразово ставали причиною масштабних аварій у виробничих середовищах.
Як уникнути
Перед виконанням перевіряйте змінні:
if [ -n "$DIR" ]; then
rm -rf "$DIR"/*
fiФорматування диска через mkfs
Команда
mkfs.ext4 /dev/sdaстворює нову файлову систему.
Фактично вона знищує попередню структуру даних.
Приклади:
mkfs.xfs /dev/sdbmkfs.ext4 /dev/nvme0n1Наслідки
- втрата таблиці inode;
- знищення файлової системи;
- складне або неможливе відновлення інформації.
Перед використанням необхідно перевіряти список дисків:
lsblkабо
fdisk -lПерезапис диска через dd
Команда
dd if=/dev/zero of=/dev/sda bs=4M status=progressповністю перезаписує диск нулями.
Інший приклад:
dd if=/dev/random of=/dev/sdaУ цьому випадку диск заповнюється випадковими даними.
Наслідки
- повне стирання інформації;
- руйнування GPT;
- руйнування MBR;
- втрата завантажувача;
- пошкодження RAID.
Fork-бомба
Однією з найвідоміших атак на Linux є fork-бомба.
Класичний приклад:
:(){ :|:& };:Як працює fork-бомба
Функція створює дві власні копії.
Кожна копія створює ще дві.
Процеси ростуть експоненційно:
1
2
4
8
16
32
64
128
256
512
1024
...За декілька секунд сервер може створити сотні тисяч процесів.
Наслідки
- повне завантаження CPU;
- вичерпання PID;
- нестача пам'яті;
- зависання SSH;
- неможливість авторизації;
- примусове перезавантаження.
Захист
Обмежити кількість процесів:
ulimit -u 500або через /etc/security/limits.conf
* hard nproc 500Для systemd можна використовувати:
TasksMax=500Спам каталогами
Ще одна поширена проблема - масове створення директорій.
Наприклад:
while true
do
mkdir test_$RANDOM
doneабо
for i in {1..1000000}
do
mkdir dir$i
doneЩо відбувається
Створюються сотні тисяч або навіть мільйони каталогів.
Наслідки:
- переповнення inode;
- уповільнення файлової системи;
- зростання часу резервного копіювання;
- проблеми з файловими менеджерами;
- перевантаження журналювання.
Особливо критично це для невеликих SSD та файлових систем із фіксованою кількістю inode.
Перевірити використання inode можна командою:
df -iЗаповнення диска нескінченним файлом
Команда
yes > file.txtніколи не завершується.
Вона постійно записує символи у файл.
Ще небезпечніше:
cat /dev/zero > bigfileабо
dd if=/dev/zero of=bigfileНаслідки
- заповнення файлової системи;
- відмова баз даних;
- неможливість запису логів;
- аварійна зупинка служб.
Kernel Panic через SysRq
У Linux існує спеціальний механізм SysRq.
Якщо він дозволений:
echo c > /proc/sysrq-triggerядро навмисно викликає:
Kernel PanicДля чого це потрібно
Команда використовується:
- розробниками ядра;
- тестуванням watchdog;
- перевіркою crash dump;
- аналізом аварій.
На робочому сервері її запуск призводить до миттєвого падіння системи.
Вимкнення ядра через Magic SysRq
Також існують команди:
echo b > /proc/sysrq-triggerмиттєве перезавантаження без синхронізації дисків.
echo o > /proc/sysrq-triggerмиттєве вимкнення живлення.
Такі команди можуть спричинити пошкодження файлової системи.
Завершення всіх процесів
Команда
kill -9 -1надсилає сигнал SIGKILL усім процесам.
Якщо її запускає root, можуть завершитися майже всі служби.
Наслідки:
- падіння SSH;
- зупинка Docker;
- завершення PostgreSQL;
- завершення Nginx;
- завершення системних сервісів.
Видалення спеціальних директорій
Ніколи не видаляйте:
rm -rf /procrm -rf /sysrm -rf /devЦе спеціальні псевдофайлові системи.
Навіть якщо після перезавантаження частина з них відновиться, працююча система може перестати функціонувати коректно.
Зміна прав доступу на всю систему
Приклад:
chmod -R 777 /або
chmod -R 000 /Наслідки:
- порушення моделі безпеки;
- відмова запуску служб;
- проблеми із SELinux;
- відсутність доступу до системних файлів.
Неправильне перенаправлення в пристрої
Команда
cat file > /dev/sdaзаписує вміст файлу безпосередньо у диск.
Це миттєво пошкоджує файлову систему.
Перезапис MBR або GPT
Наприклад:
dd if=file.img of=/dev/sda bs=512 count=1або
dd if=/dev/zero of=/dev/sda bs=512 count=2048Такі команди можуть повністю знищити таблицю розділів.
Нескінченне навантаження на процесор
Приклад:
while true
do
:
doneабо
yes > /dev/nullCPU швидко досягає 100%.
Якщо запустити декілька таких процесів одночасно, сервер може перестати відповідати.
Видалення журналів
Команда
rm -rf /var/log/*не завжди пошкоджує систему, але робить практично неможливим аналіз інцидентів.
У виробничих середовищах це може суттєво ускладнити розслідування аварій або кібератак.
Практичний кейс: одна помилка - повна втрата сервера
Уявімо Bash-скрипт очищення тимчасових файлів:
TMP_DIR="$1"
rm -rf "$TMP_DIR"/*Адміністратор випадково запускає його без параметра:
./cleanup.shЯкщо перевірка аргументів відсутня, змінна може бути порожньою або містити некоректний шлях. У подібних сценаріях одна логічна помилка здатна призвести до видалення критично важливих даних.
Безпечніший варіант:
#!/bin/bash
if [ -z "$1" ]; then
echo "Необхідно вказати каталог."
exit 1
fi
if [ ! -d "$1" ]; then
echo "Каталог не існує."
exit 1
fi
rm -rf -- "$1"/*Такий підхід дозволяє уникнути більшості критичних помилок під час автоматизації.
Як захистити Linux від випадкових руйнівних команд
Навіть досвідчені адміністратори можуть припуститися помилки. Для мінімізації ризиків варто дотримуватися таких рекомендацій:
- не працювати під обліковим записом root без необхідності;
- використовувати
sudoлише для окремих адміністративних команд; - регулярно створювати резервні копії;
- перевіряти шляхи перед використанням
rm,mvтаdd; - обмежувати кількість процесів через
ulimitіsystemd; - контролювати використання inode (
df -i); - застосовувати AppArmor або SELinux для обмеження доступу процесів;
- тестувати небезпечні команди у віртуальних машинах або контейнерах;
- використовувати контроль версій для конфігураційних файлів;
- уважно перевіряти shell-скрипти перед запуском у виробничому середовищі.
Висновки
Більшість критичних інцидентів у Linux пов'язані не з помилками операційної системи, а з неправильним використанням її потужних можливостей. Команди rm, dd, mkfs, chmod, kill, механізм Magic SysRq, fork-бомби або нескінченні цикли можуть за лічені секунди вивести з ладу навіть високопродуктивний сервер.
Особливо небезпечними є сценарії, коли руйнівні команди виконуються від імені root або в автоматизованих скриптах без перевірки вхідних параметрів. Один неправильно вказаний шлях, порожня змінна чи помилка у циклі здатні призвести до втрати даних, пошкодження файлової системи, виснаження ресурсів процесора, пам'яті або inode.
Найкращим захистом залишається поєднання технічних механізмів безпеки - резервного копіювання, принципу найменших привілеїв, обмеження системних ресурсів, використання SELinux або AppArmor - із дисципліною адміністратора. Перед виконанням будь-якої потенційно небезпечної команди варто ще раз перевірити її параметри, особливо якщо вона запускається від імені суперкористувача або працює з критично важливими даними. Саме уважність і системний підхід дозволяють уникнути більшості катастрофічних помилок у Linux.