SATtva Персональная страница
темы архив все rss xml 2.0
 
 
блог
досье
связь
english
 

Казнить нельзя помиловать: о внимательном отношении к знакам препинания

12.06.2008
линукс

Товарищи-юниксоиды не дадут соврать, что rm -r ./* или rm -r /* из-под рута -- две большие разницы. :-) Вот из-за этой пропущенной точки позавчера вечером (после просмотра провального матча с испанцами... и, наверное, под влиянием впечатлений) едва не убил всю систему. Команда за секунду успела сожрать /boot, /bin, /dev и /etc, прежде чем я опомнился и нажал Ctrl+C.

Первая мысль, которая следом посетила мозг, была "Пиздеееец!". Потом -- оценка ситуации и понесённого ущерба:
1) данные не пострадали (и в любом случае есть бэкапы);
2) начисто уничтожен загрузчик и конфигурация;
3) система зашифрована, и, вкупе с предыдущим пунктом, перезагрузить её теперь удастся только один раз; :-))
4) уничтожены все консольные утилиты, bash и пр.;
5) уничтожены все файлы устройств, так что даже в отсутствие предыдущего пункта подмонтировать LiveCD никак не получится;
6) луч надежды -- две оставшиеся открытыми консоли, в одной из которых залогинен тот самый злосчастный рут, и сохранившиеся в целости приложения.

Самый простой выход из сложившегося положения -- плюнуть на систему, перезагрузиться, отформатировать разделы и поставить всё с нуля. Тем более, что от системных настроек, нажитых непосильным трудом, так или иначе ничего не осталось. Нет, захотелось выяснить пределы прочности Gentoo и, как Мюнхгаузену, самому вытащить себя из болота.

Во-первых, в отсутствие /bin очень помог Midnight Commander с его собственной реализацией операций копирования. Во-вторых, в домашнем каталоге рута нашлась сборка busybox, оставленная от работ над initramfs. Благодаря этому удалось восстановить mount, cp и другие жизненно важные утилиты.

Затем был оживлён /dev:

mkdir /mnt/tmp
mount --bind / /mnt/tmp
cp -a /mnt/tmp/dev/* /dev/
umount /mnt/tmp

So far so good. Теперь можно пошариться в содержимом Gentoo LiveCD:

mount /dev/hda /mnt/cd
mount /mnt/cd/image.squashfs /mnt/tmp

И восстанавливаем убитые директории:

cp -f /mnt/tmp/bin/* /bin/
cp -f /mnt/tmp/etc/* /etc/

Некоторые утилиты отказывались работать, но это было исправлено копированием соответствующих библиотек из /mnt/tmp/lib, с которыми они были скомпонованы и на которые ссылались.

Неокученным остался только /boot. Образ ядра был взят, как и положено, из /usr/src/linux/..., а initramfs -- из домашнего каталога рута, где он лежал, как и busybox, со времён своей сборки. Однако, без загрузчика от всего этого добра мало проку, к тому же с LiveCD была взята не нативная конфигурация системы (хоть и близкая ей).

Дальше последовал долгий и нудный процесс восстановления настроек portege -- менеджера пакетов Gentoo. В первую очередь создаём ссылку /etc/make.profile на текущий профиль системы. Затем прописываем в /etc/make.conf основные параметры сборки (главную проблему здесь создавала нерабочая система документации -- man отказывался запускаться по какой-то мутной причине, спасало то, что значительная часть документации с сайта Gentoo лежит на диске). И, наконец, приводим конфигурацию portege к той, что была до атомной войны. Процесс выглядел так:

1) emerge -ep world, смотрим на изменения use-флагов (те, что отмечены звёздочкой), корректируем эти изменения через /etc/make.conf и /etc/portage/package.use.
2) Отлавливаем оставшиеся изменения с помощью emerge -ep world | grep '\*'.
3) Вносим изменения в /etc/portage/package.{mask,unmask,keywords}, отлавливая их через emerge -ep world | grep 'D', emerge -ep world | grep 'S', и предупреждения Портежа о недоступных пакетах.

Когда portege перестаёт ругаться на недоступные пакеты, количество простых пересборок становится равным числу установленных пакетов и никаких изменений в use-флагах установленных пакетов больше нет, заканчиваем упражнение.

Мне первым делом пришлось пересобрать третью версию gcc, поскольку конфигурация с LiveCD предполагала только четвёртую версию, которая с hardened-профилем бесполезна. Затем переустановил grub и настроил загрузочное меню. На всякий случай сделал надёжную резервную копию криптоключей от разделов диска. И, наконец, через emerge -e world запустил полную пересборку... которая, добравшись до сборки boost'а из C++, сожрала всю оперативку и своп и повесила компьютер с ненастроенным /etc/fstab и device-mapper'ом. :-))

Восстановительные работы ещё не закончены, но оставшиеся шаги уже понятны. Хотя Линукс сейчас не запустить, резервные копии криптоключей позволят подключить разделы с LiveCD и завершить конфигурацию разделов. Затем последует запуск самой ОС, досборка мира и долгий и нудный процесс по восстановлению системных настроек, их приведению в изначальный вид.

Какой опыт я из этого вынес? К резервным копиям данных следует добавить и резервирование настроек системы: их подгонка под свои нужды -- слишком длительный и затратный процесс, чтобы подвергать их такому риску. И надо, наконец, побороть лень и настроить grsecurity!
Комментарии

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от гость

12.06.2008 17:23

предеставляю, если бы это случилось под виндой - только переустановка.

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от Mellon

14.06.2008 14:18

можно было бы после восстановления /dev снять образ с харда (или с раздела) и попробовать восстановить потертые файлы, методик для этого достаточно, например, откатить журнал, или восстановить файлы по заголовкам и концовкам такими утилитами как http://foremost.sourceforge.net/

К слову, вот описание 10 способов восстановления файлов:
http://www.opennet.ru/base/sys/recover_file10.txt.html

Конечно, сие имеет смысл, если у вас не зашифрован раздел с восстанавливаемыми данными ;)

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от SATtva

15.06.2008 17:20

Всё восстановил, остались мелочи в настройках.

Касаемо восстановления файлов -- хорошая мысль, но не дающая 100-процентной гарантии. Это приемлемо для пользовательских данных (восстановится какой-то документ или нет -- это ни на что не повлияет), но с файлами конфигурации приведёт к хаосу в систему. Всё равно придётся искать корни проблем. Проще пересобрать мир, привести конфигурацию к исходному виду и уже отсюда двигаться к подгонке настроек.

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от Maldur

11.07.2008 13:08

1. Не делайте rm -rf ./* так как достаточно просто rm -rf * Избыточность данных никогда не доводила до добра.
2. "восстановление" файлов - это как-то несерьёзно для консультанта по безопасности данных. Всегда рекомендуйте делать резервное копирование данных, так все эти ссылки про восстановление могут сработать в самом лучшем случае если очень повезёт только частично.
3. Ну и не расстраивайтесь, все юниксоиды когда то ошибались с оргументами команды rm :-)

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от SATtva

11.07.2008 15:39

1. Справедливо.
2. Перечитайте постинг внимательней.
3. Кто здесь расстраивается? Жизнь продолжается.

Re: Казнить нельзя помиловать: о внимательном отношении к знакам препинания от spinore

08.10.2008 10:46

Хм, естественней бэкапить систему полностью, снимать образ диска. Тогда восстановление банально: тривиальный откат назад. Можно проводить ЕЖенедельно :)
Оставить комментарий
Заголовок:

Текст:

Ваше имя:

Ваш e-mail:


Код подтверждения: