Сатья: Backup конфигов на почту

Обсуждаем сайт и форум.

Модератор: f0s

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Сатья: Backup конфигов на почту

Непрочитанное сообщение Wic » 2011-09-25 18:10:30

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

Methods & Instruments
Архивирование
Для начала нужно все необходимы конфиги, собрать в один файл и сжать его. Для чего используется стандартная утилита tar, она упакует конфиги и сожмет их, чтобы места лишнего не занимали.

Код: Выделить всё

tar -cjz -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 -cjz -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.gz
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, а затем создаст новую папку и всё туда извлечет. А нам останется только записать это поверх новой системы. Сам скрипт:

Код: Выделить всё

#!/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
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/games:/usr/local/sbin:/usr/local/bin:/root/bin
Conclusions
После допилки нескольких косяков и багов, нехитрая система заработала. Что мне надо на данный момент она делает.
Так же не забываем поставить соответствующие разрешения на файлы, чтобы никто кроме root'a читать/исполнять не мог.

References
man tar
man openssl

Готов выслушать критику, пожелания и прочие комментарии. Так же интересен вопрос "А нужна ли такая заметка в статьях?"

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Raven2000
-=_UNIX_=-
Сообщения: 4425
Зарегистрирован: 2006-10-29 17:59:13
Откуда: Там, где нас нет.
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение Raven2000 » 2011-09-27 21:28:03

Господи нагородил то (но это может и неплохо ) =)
1. настрой чтобы рут мог отправлять почту встроенными средствами или ssmtp (у меня на сайте есть)
2. отправляй от рута письмо с приаттаченым файлом и все.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение Wic » 2011-09-29 21:42:14

В тот момент мне нужен был самый простой способ отправки, который в портах оказался чуть выше чем ssmtp =)
Статья про ssmtp полезная, но для моих скромных задач этого пока не надо. Если нужно было системные сообщения пересылать на свою почту, тогда ssmtp то что надо, настраивается быстро и просто.

Аватара пользователя
Daywalker
ст. сержант
Сообщения: 326
Зарегистрирован: 2007-03-11 22:28:45
Откуда: г. Котельники, МО
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение Daywalker » 2011-10-02 15:20:49

мне понравилось. Публикуй
http://blog.volobuev.su - Блог о системном и сетевом администрировании.

Аватара пользователя
AGN
ефрейтор
Сообщения: 63
Зарегистрирован: 2009-10-05 2:54:49
Откуда: MSK
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение AGN » 2011-10-31 9:30:26

Код: Выделить всё

 tar -cJ -hP -T ./list -f /tmp/backup.tar.xz 
Прогресс! ;) нанотехнологии...

P.S. советую в скриптах использовать только абсолютные пути... т.е. не ./list а /root/list

И в исключения не лишним будет пихнуть default и *.sample

Wic
рядовой
Сообщения: 32
Зарегистрирован: 2009-02-09 7:51:54
Откуда: Нск
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение Wic » 2011-11-01 18:30:03

про абсолютные пути, надеюсь, каждый догадается =) Это всё таки основа и под себя ее каждый сможет доработать

Аватара пользователя
AGN
ефрейтор
Сообщения: 63
Зарегистрирован: 2009-10-05 2:54:49
Откуда: MSK
Контактная информация:

Re: Сатья: Backup конфигов на почту

Непрочитанное сообщение AGN » 2011-11-03 9:31:39

Кстати... по поводу -J
Если у вас bsdtar версии ниже 2.8 - он сам ещё не умеет работать с lzma2 (xz)... есть три выхода из этой ситуации:
1. Забить :) и юзать старый добрый BZIP2 (-j)...
2. Установить свежий XZ (/usr/ports/archivers/xz) и засылать в него вывод tar'а через unix-пайп... примерно вот так: tar cf - baz | xz -6e > baz.tar.xz
3. Установить новый BSDtar вот отсюда.

Первый способ не для нас... :)
Второй по идее системно правильный... но скучный. :)
А вот третий интересный, но это вроде как вмешательство в систему...
Качаем архив с исходниками:

Код: Выделить всё

fetch http://libarchive.googlecode.com/files/libarchive-2.8.5.tar.gz
Распаковываем:

Код: Выделить всё

tar -xf libarchive-2.8.5
Конфигурим:

Код: Выделить всё

cd libarchive-2.8.5 && ./configure --prefix=/usr
Собираем и ставим:

Код: Выделить всё

make && make install
и вуаля:

Код: Выделить всё

 tar --version
bsdtar 2.8.5 - libarchive 2.8.5
В 9.0-RC1 кстати тар 2.8.4... хотя 2.8.5 вышел в сентябре, а 9.0-РЦ1 в октябре... но не суть важно.