🚨 НИКОГДА не редактируй bash-скрипт во время его выполнения!
Привет, повелитель терминала! 👋
Знаешь, что может превратить безобидный скрипт в оружие массового уничтожения данных? Всего одно неосторожное редактирование.
💣 Смотри, какая бомба:
Выглядит безопасно? Команда
⚡ Что происходит:
1. Запускаешь скрипт → bash начинает читать его частями
2. Меняешь
3. Сохраняешь файл → смещение байтов сбивается
4. BOOM! → bash читает
🔍 Доказательство через strace:
🛡️ Как защититься:
• Копируй скрипт перед редактированием
• Останови выполнение перед правками
• Используй блокировки файлов
• Тестируй на копиях важных скриптов
💡 Вывод
Bash читает скрипт блоками по 64 байта и отслеживает позицию. Удаление символов сдвигает содержимое, но не позицию чтения!
🌐 Источник: https://habr.com/ru/articles/500832/
____________________
Дополнительный материал:
🧠 - GRUB Files Unveiled: Путеводитель по конфигурационным файлам
🧠 - Как настроить автоматическое включение вашего компьютера с помощью RTC
🧠 - GRUB Rescue Ops: Как оживить систему, замершую на grub>
#Linux_Mastery #Linux #Bash #Security #DevOps #SysAdmin #ScriptSafety
Привет, повелитель терминала! 👋
Знаешь, что может превратить безобидный скрипт в оружие массового уничтожения данных? Всего одно неосторожное редактирование.
💣 Смотри, какая бомба:
#!/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
Хабр
Осторожнее с редактированием bash-скриптов
Предположим, я написал такой bash-скрипт с названием delay.sh . Как думаете, что он делает? #!/bin/bash sleep 30 #rm -rf --no-preserve-root / echo "Time's up!" Похоже, он ожидает 30 секунд,...
👍21