Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> backup конфигов на почту

Архивируем и храним конфиги FreeBSD

Автор: Wic.


Intro
Я думаю, у всех случались ситуации, когда домашний роутер или офисная файлопомойка по причинам старости железа или недостаточной прямоты рук уходили в оффлайн и самое быстрое, что могло их вернуть к жизни, это установка с нуля. И хорошо, когда есть backup, а если его нет? Или же есть, но после того как он был сделан, конфиги были переписаны, и снова нужно что-то допиливать. А может он находится на жестком диске, чье бездыханное тело лежит на вашем столе? Вот и у меня случилась такая ситуация, когда жесткий диск умирает, а backup старый и в мыле пришлось вспоминать все изменения и снова вносить их. По этому после восстановления работы сервера, решил сделать систему, которая будет периодически делать backup и отправлять мне его на почту.

Methods & Instruments
Архивирование
Для начала, нужно все необходимые конфиги собрать в один файл и сжать его. Для чего используется стандартная утилита tar, она упакует конфиги и сожмет их, чтобы места лишнего не занимали.
tar -cj -hP -T ./list -f /tmp/backup.tar.bzip2

То, что мы хотим сжимать указываем в файле list. Убеждаемся в отсутствие лишних переходов на новую строку в конце файла, иначе tar может пытаться их добавить в архив, что у него естественно не получится и он будет грязно ругаться. Себе я решил архивировать такой список:
/etc/
/usr/local/etc/
/usr/src/sys/amd64/conf/MYKERN
/root/

Если есть желание архивировать не всё подряд, то создаем еще один файл, в котором указываем, что не надо архивировать. Назовем этот файл notbackup. К примеру он может содержать:
*passwd
*.default

Тогда команда архивации будет выглядеть немного иначе:
tar -cj -hP -T ./list -X ./notbackup -f /tmp/backup.tar.bzip2

Шифрование
Я думаю, что никто не хочет, чтобы его конфиги путешествовали по всемирной паутине в открытом виде. Даже если они попадут в чужие руки, пусть эти руки натрут мозоли, перед тем как откроют их, если вообще откроют. Для шифрования используем opensll:
openssl enc -rc5-cbc -e -pass file:./pass \
 -in /tmp/backup.tar.bzip2 -out /tmp/bu.rar

где файл pass содержит фразу, по которой происходит шифрование. Это может быть и не фраза, а к примеру первый томик "войны и мир", конечно будет надежней. А вот при распаковке придется вновь предоставить этот томик в той же редакции, и чтобы с исходным совпадал вплоть до бита. Тут каждый ищет компромисс между надежностью и параноей.  А новое название было сделано таким для маскировки под многими любимый архиватор.

Отправка на почту
Тут нужен был простой минимум: отправить полученный файл с одного моего ящика на другой, где они и будут храниться. Хранить я их решил где-нибудь в районе mail.ru. С этим возникло больше всего проблем. Оказалось, чтобы стандартными средствами отправить почту на мой ящик, нужно настроить полноценный почтовый сервер, что на тот момент никак не входило в мои планы. Пришлось искать простую утилиту, которая сможет через smtp отправить мне зашифрованные конфиги. После прочесывания портов обнаружился простой перловский скрипт smtp-cli, который может легко отправить наш файл куда надо. Ставим его:
cd /usr/ports/mail/smtp-cli/
make install clean

Мануалов на него не было. Но зато была встроенная справка (smtp-cli --help), по которой легко пишется команда для отправки.
smtp-cli --host=smtp.ngs.ru --user=ngsmail@ngs.ru \
 --pass=MyMegaPass --from="ngsmail@ngs.ru" --subject="`date`" \
 --to=mien_archive@mail.ru --attach=/tmp/bu.rar

После всех итераций был написан финальный скрипт на отправку:
#!/bin/sh 
sleep 30
tar -cjz -hP -T /root/work/arch/list -f /tmp/backup.tar.bzip2
openssl enc -rc5-cbc -e -pass file:/root/work/arch/pass \
 -in /tmp/backup.tar.bzip2 -out /tmp/bu.rar
rm /tmp/backup.tar.bzip2
smtp-cli --host=smtp.ngs.ru --user=ngsmail@ngs.ru --pass=MyMegaPass \
 --from="ngsmail@ngs.ru" --subject="`date`" \
 --to=mien_archive@mail.ru --attach=/tmp/bu.rar
rm /tmp/bu.rar

А так же простой скрипт на распаковку, который попросит ту волшебную фразу из файла pass, а затем создаст новую папку restore и всё туда извлечет. Идеально, когда при копирование старых файлов поверх новой системы всё снова начинает работать как раньше. Сам скрипт:
#!/bin/sh 
echo "Etner pass for archive"
openssl enc -rc5-cbc -d -pass stdin -in bu.rar -out oldbackup.tar.bzip2
mkdir restore
tar -C restore -xf oldbackup.tar.bzip2
rm oldbackup.tar.bzip2


Cron или "а теперь хочу, чтобы всё работало само"
Желательно, чтобы наши конфиги без нашего ведома собирались, шифровались и шли дружным строем в хранилище. Как часто они это будут делать, каждый выбирает сам, я решил для начала поставить два раза в неделю и после перезагрузки. Вносим изменения в наш любимый крон:
echo "### Config Backup" >> /etc/crontab
echo "@reboot         root    /root/work/arch/arch.sh" >> /etc/crontab
echo "0 4 * 1-6/3 root /root/work/arch/arch.sh" >> /etc/crontab

Так же проверяем, чтобы в переменной PATH находились все необходимые пути. Переменная  PATH в моем конфиге.
PATH=/etc:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

Conclusions
После допилки нескольких косяков и багов, нехитрая система заработала.  Что мне надо на данный момент она делает.
Так же не забываем поставить соответствующие разрешения на файлы, чтобы никто кроме root'a читать/исполнять не мог.

Скрипты для архивирования конфигов и складирования их на почте.
файл скачан размер размещён примечание
scripts.zip
358 0.8kb 2011-10-09 Для самых ленивых - все файлы одним архивом.


References
ports
man tar
man openssl



размещено: 2011-10-09,
последнее обновление: 2011-10-22,
автор: Wic


PbIXTOP, 2011-10-16 в 18:24:25

Если шифруется openssl почему не использовать асинхронное шифрование?
Тогда можно не боятся даже взлома сервера

fox, 2011-10-21 в 10:56:55

Занятно. Но помоему есть готовые решения типа bacuka или amanda…

Михаил, 2011-10-21 в 15:16:51

Могу ошибиться, но:
1. В tar нельзя использовать одновременно опции -j и -z при архивировании;
2. При указании опции -P разархивирование будет происходить в первоначальное местоположение в независимости от того, что указано в -C.

Wic, 2011-10-22 в 12:54:07

RSA шифрование не стало кушать большие файлы. Другие пока не пробовал.
Всегда есть готовое, но велосипеды вновь и вновь изобретают для собственного развития.
По тару ошибки поправил. Большое спасибо.

AGN, 2011-10-31 в 10:21:32

Сейчас (в 9.0 точно, в 8.2 не уверен) тар умеет XZ сжатие, что для бэкапа конфигов и засыла на почту будет очень кстати...
ключ -J
Я такие скриптики писал ещё на 4.9 для отправки на фтп бекапов небольших БД.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0376 секунд
Из них PHP: 24%; SQL: 76%; Число SQL-запросов: 78 шт.
Исходный размер: 27121; Сжатая: 7740