RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Intro Я думаю, у всех случались ситуации, когда домашний роутер или офисная файлопомойка по причинам старости железа или недостаточной прямоты рук уходили в оффлайн и самое быстрое, что могло их вернуть к жизни, это установка с нуля. И хорошо, когда есть backup, а если его нет? Или же есть, но после того как он был сделан, конфиги были переписаны, и снова нужно что-то допиливать. А может он находится на жестком диске, чье бездыханное тело лежит на вашем столе? Вот и у меня случилась такая ситуация, когда жесткий диск умирает, а backup старый и в мыле пришлось вспоминать все изменения и снова вносить их. По этому после восстановления работы сервера, решил сделать систему, которая будет периодически делать backup и отправлять мне его на почту.
Methods & Instruments Архивирование Для начала, нужно все необходимые конфиги собрать в один файл и сжать его. Для чего используется стандартная утилита tar, она упакует конфиги и сожмет их, чтобы места лишнего не занимали.
tar -cjz -hP -T ./list -f /tmp/backup.tar.bzip2
То, что мы хотим сжимать указываем в файле list. Убеждаемся в отсутствие лишних переходов на новую строку в конце файла, иначе tar может пытаться их добавить в архив, что у него естественно не получится и он будет грязно ругаться. Себе я решил архивировать такой список:
Если есть желание архивировать не всё подряд, то создаем еще один файл, в котором указываем, что не надо архивировать. Назовем этот файл notbackup. К примеру он может содержать:
*passwd
*.default
Тогда команда архивации будет выглядеть немного иначе:
tar -cjz -hP -T ./list -X ./notbackup -f /tmp/backup.tar.bzip2
Шифрование Я думаю, что никто не хочет, чтобы его конфиги путешествовали по всемирной паутине в открытом виде. Даже если они попадут в чужие руки, пусть эти руки натрут мозоли, перед тем как откроют их, если вообще откроют. Для шифрования используем opensll:
где файл pass содержит фразу, по которой происходит шифрование. Это может быть и не фраза, а к примеру первый томик "войны и мир", конечно будет надежней. А вот при распаковке придется вновь предоставить этот томик в той же редакции, и чтобы с исходным совпадал вплоть до бита. Тут каждый ищет компромисс между надежностью и параноей. А новое название было сделано таким для маскировки под многими любимый архиватор.
Отправка на почту Тут нужен был простой минимум: отправить полученный файл с одного моего ящика на другой, где они и будут храниться. Хранить я их решил где-нибудь в районе mail.ru. С этим возникло больше всего проблем. Оказалось, чтобы стандартными средствами отправить почту на мой ящик, нужно настроить полноценный почтовый сервер, что на тот момент никак не входило в мои планы. Пришлось искать простую утилиту, которая сможет через smtp отправить мне зашифрованные конфиги. После прочесывания портов обнаружился простой перловский скрипт smtp-cli, который может легко отправить наш файл куда надо. Ставим его:
cd /usr/ports/mail/smtp-cli/
make install clean
Мануалов на него не было. Но зато была встроенная справка (smtp-cli --help), по которой легко пишется команда для отправки.
А так же простой скрипт на распаковку, который попросит ту волшебную фразу из файлаpass, а затем создаст новую папку restore и всё туда извлечет. Идеально, когда при копирование старых файлов поверх новой системы всё снова начинает работать как раньше. Сам скрипт:
Cron или "а теперь хочу, чтобы всё работало само" Желательно, чтобы наши конфиги без нашего ведома собирались, шифровались и шли дружным строем в хранилище. Как часто они это будут делать, каждый выбирает сам, я решил для начала поставить два раза в неделю и после перезагрузки. Вносим изменения в наш любимый крон:
Conclusions После допилки нескольких косяков и багов, нехитрая система заработала. Что мне надо на данный момент она делает. Так же не забываем поставить соответствующие разрешения на файлы, чтобы никто кромеroot'a читать/исполнять не мог.
Скрипты для архивирования конфигов и складирования их на почте.