ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
122 UnixoidХАКЕР 04 /171/ 2013autosnap.sh#!/bin/bashset -eVOLUME=/dev/sda11TMP_PATH=/tmp/snapshotsMOUNT_OPTS="subvol=@snapshots"# Текущие дата и время — необходимы# для формирования имен папок со снапшотамиNOW="$(date +%Y%m%d%H%M)"NOW_SEC="$(date +%s)"if [ $# -ne 1 ]; then# Если скрипт запущен без аргументов,# ставим по умолчанию один день назадOLDER_SEC="$(date --date "1 day ago" +%s)"else# Если же у нас указан аргумент, считаем,# что это дата в любом формате, который# понимает команда date, со всеми вытекающимиOLDER_SEC="$(date --date "$1" +%s)"fi# Вычитаем из текущей даты требуемую# и преобразуем ее в минутыOLDER=$(($NOW_SEC-$OLDER_SEC))OLDER_MIN=$(($OLDER/60))[ ! -d "${TMP_PATH}/" ] && mkdir "${TMP_PATH}/"[ -z "`grep "${TMP_PATH}" /proc/mounts`" ]&& mount "${VOLUME}" "${TMP_PATH}/" -o"${MOUNT_OPTS}" && { # Монтируемmkdir "${TMP_PATH}/${NOW}/"# Создаем снапшотыbtrfs subvol snap / "${TMP_PATH}/${NOW}/rootsnap" > /dev/null 2>&1btrfs subvol snap /home "${TMP_PATH}/${NOW}/homesnap" > /dev/null 2>&1} && {# Ищем папки со снапшотами старше указанной датыfor f in `find "${TMP_PATH}" -mindepth 1-maxdepth 1 -type d -cmin +"$OLDER_MIN"-print0 |xargs -0`;dobtrfs subvol del "${f}/rootsnap"> /dev/null 2>&1 &&btrfs subvol del "${f}/homesnap"> /dev/null 2>&1 &&# и удаляем снапшоты и папки, их содержащиеrmdir "$f"done}umount -l "${TMP_PATH}" && rmdir "${TMP_PATH}"Скрипт этот можно разместить, где удобно (лично я предпочитаюподобные вещи размещать в /usr/local/bin, но это деловкуса), и запускать его либо из крона, либо из rc.local. По умолчаниюскрипт ротирует снапшоты старше одного дня, но ты можешьзадать любое желаемое количество в формате командыdate — главное, не забудь заключить в кавычки.ИСПОЛЬЗОВАНИЕ ISO-ОБРАЗАДля того чтобы при повреждении каких-либо жизненно важныхфайлов не дергать каждый раз болванку с записанной убунтой,есть возможность в меню Grub добавить пункт загрузки с ISOобраза,что я и предлагаю сделать. Для этого понадобится не-Btrfs-раздел (поскольку по неизвестным причинам стандартнаяinitramfs убунтовской исошки не желает видеть образ, еслион находится на разделе с описываемой ФС) и прямые руки.Редактируем конфигGrub'аINFOЕсли ты работаешьв chroot-окружении подroot, то есть возможностьоттуда вырваться. Одиниз способов — использованиесистемного вызоваmknod() с последующиммонтированием реальногокорня. Установкапатчсета grsecurityпозволяет решить этупроблему.Добавляем в файл /etc/grub.d/40_custom следующие строчки:menuentry "Ubuntu 12.10 i386 iso" {insmod part_msdosinsmod fat# Устанавливаем корень, откуда берем ISOset root='hd0,msdos7'# Путь к образу относительно указанного выше корняset isofile=/ubuntu-12.10-desktop-i386.iso# Монтируем в качестве loopback-девайса в Grubloopback loop $isofilelinux (loop)/casper/vmlinuz boot=casperiso-scan/filename=$isofile noeject noprompt --initrd (loop)/casper/initrd.lz}и запускаем команду обновления основного конфига Grub:$ sudo update-grubТеперь даже в случае серьезного повреждения системы —если, конечно, не будет затронут загрузчик и его файлы —ты всегда сможешь загрузиться с ISO-образа и изменить поврежденныефайлы или откатиться на предыдущее состояниесистемы. Предположим, ты уронил систему и тебе необходимоее восстановить из снапшота Btrfs. Для этого загрузись с данногоISO-образа, примонтируй тот раздел, систему на котором ты уронил,— именно раздел, не подтом! — и введи следующие команды(естественно, с поправкой на твои снапшоты и разделы):# cd /mnt/sda11# mv @ @_badroot# mv @snapshots/201302011434/rootsnap @То же самое, при необходимости, делаем с @home и перезагружаемся.Если все прошло нормально, то можешь удалить@_badroot:$ sudo btrfs subvol del @_badrootТеперь даже в случае серьезного повреждениясистемы — если, конечно, не будетзатронут загрузчик и его файлы — тывсегда сможешь загрузиться с ISO-образаЗАКЛЮЧЕНИЕВ *nix-системах есть множество способов обезопасить себяот неудачных экспериментов или смягчить их последствия.Я рассмотрел некоторые из них. Однако стоит заметить, что всеэти способы предназначены в основном для экспериментаторов,любящих поковыряться в системе. Для отлова малвари онине подходят — их достаточно легко обнаружить, хотя некоторыйуровень безопасности они, конечно же, обеспечивают.