🚨 НИКОГДА не редактируй bash-скрипт во время его выполнения!
Привет, повелитель терминала! 👋
Знаешь, что может превратить безобидный скрипт в оружие массового уничтожения данных? Всего одно неосторожное редактирование.
💣 Смотри, какая бомба:
#!/bin/bash
sleep 30
#rm -rf --no-preserve-root /
echo "Time's up!"
Выглядит безопасно? Команда
rm закомментирована, скрипт просто ждёт 30 секунд. Но стоит тебе отредактировать его во время выполнения...
⚡ Что происходит:
1.
Запускаешь скрипт → bash начинает читать его частями
2.
Меняешь sleep 30 на
sleep 3 в редакторе
3.
Сохраняешь файл → смещение байтов сбивается
4.
BOOM! → bash читает
rm -rf / вместо комментария
🔍 Доказательство через strace:
# Открытие скрипта
openat(AT_FDCWD, "delay.sh", O_RDONLY) = 3
# Парсинг первой строчки (до 80 символов)
read(3, "#!/bin/bash\nsleep 30\n#echo \"Don'"..., 80) = 64
# Возврат к началу
lseek(3, 0, SEEK_SET) = 0
# Переключение на на файловый дескриптор 255
dup2(3, 255) = 255
# Чтение 64-байтового куска файла, чтобы получить команду
read(255, "#!/bin/bash\nsleep 30\n#echo \"Don'"..., 64) = 64
# Поместить курсор обратно в конец команды, которую мы собираемся выполнить
# Offset 21 is the `#`
lseek(255, -43, SEEK_CUR) = 21
# Приостановка выполнения, уход в sleep
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2072
# До возвращения wait4 файл редактируется с `30` на `3`
# Чтение 64-байтового куска файла, чтобы получить следующую команду
# В этом демо я заменил опасную команду на echo
read(255, "echo \"Don't execute me\"\necho \"Ti"..., 64) = 42
# Bash решает выполнить оба echo одновременно без нового чтения
# Очевидно, что-то идёт не так
write(1, "Don't execute me\n", 17) = 17
write(1, "Time's up!\n", 11) = 11
# Чтение следующего фрагмента и обнаружение конца файла
read(255, "", 64) = 0
🛡️ Как защититься:
•
Копируй скрипт перед редактированием
•
Останови выполнение перед правками
•
Используй блокировки файлов
•
Тестируй на копиях важных скриптов
💡 Вывод
Bash читает скрипт блоками по 64 байта и отслеживает позицию. Удаление символов сдвигает содержимое, но не позицию чтения!
🌐 Источник:
https://habr.com/ru/articles/500832/________________Дополнительный материал:
🧠 -
GRUB Files Unveiled: Путеводитель по конфигурационным файлам🧠 -
Как настроить автоматическое включение вашего компьютера с помощью RTC🧠 -
GRUB Rescue Ops: Как оживить систему, замершую на grub>#Linux_Mastery #Linux #Bash #Security #DevOps #SysAdmin #ScriptSafety