09.12.2024 20:19
Осторожнее с редактированием bash-скриптов

Предположим, я написал такой bash-скрипт с названием delay.sh. Как думаете, что он делает?
Код:
#!/bin/bash
sleep 30
#rm -rf --no-preserve-root /
echo "Time's up!
Похоже, он ожидает 30 секунд, а затем выводит сообщение на экран. Здесь никаких фокусов — он делает именно это. Там есть опасная команда в середине, но она закомментирована и не выполняется.

Представьте, что я снова запускаю этот скрипт, но теперь мне не хочется ждать 30 секунд — это слишком долго. Я открываю вторую консоль, меняю sleep 30 на sleep 3, затем сохраняю файл. Как думаете, что будет теперь? Ну, через 30 секунд скрипт удалит все мои файлы.

Так происходит потому, что bash считывает содержимое скрипта фрагментами по мере выполнения, отслеживая смещение в байтах. Когда я удаляю один символ из строки sleep, смещение для начала следующей команды указывает на r в #rm вместо #. С точки зрения интерпретатора, # смещается на предыдущую строку, поэтому он выполняет команду начиная с rm.
09.12.2024 20:23
Подчеркну, что совсем необязательно для этого в скрипте должен быть какой-то очевидный зловред закомментирован.
Вполне достаточно, чтобы какая-то команда или редирект обрезались неудачно... Я так убил сервак один раз, запустил что-то вроде
Код:
yes > /file
уххх... быстро работает :) запускать на системном диске не рекомендую... и вообще на том диске, где кончившееся место приведет к плохим последствиям
Часовой пояс GMT +3, время: 09:50.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.