Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

За 2005-01-13

Автоматическое защищенное резервное копирование с использованием rsync.

Автоматическое защищенное резервное копирование с использованием rsync.

По мотивам материала "Making secure remote backups with Rsync",
размещенного в http://www.linux.com/article.pl?sid=04/11/04/0346256

Само по себе использование rsync удобно не только при обычной передаче
файлов, но и при резервном копировании. А при использовании встроенного
средства туннелирования потока данных через ssh, можно говорить об
защищенном (безопасном) резервном копировании с одной машины на другую.

Еще одним плюсом является то, что реализации rsync и ssh существуют не
только для *nix систем, но и для Windows и Mac OS X.

Для защищенного резервного копирования необходимо, чтобы на обеих
сторонах: на машине источнике и машине получателе, были установлены
rsync и ssh. Тогда простым примером является осуществление резервного
копирования почтового профиля (настройки ящика и сама почтовая база)
Thunderbird:

$ nice -+19 rsync -e ssh -vac --force --delete \
--backup --backup-dir=/home/koal/backup/.m_koal/`date +%Y-%m-%d` \
/home/koal/.thunderbird/ koal@bridge:/home/koal/backup/koal/mail/

Заключительный слэш после каталога говорит от том, что мы хотим
копировать только содержимое каталога, а не каталог целиком.
Другие же опции говорят следующее:

--force - удалять директории даже если они не пустые
--delete - удалять файлы, которые не существуют на отправляемой стороне
--backup - создавать копии файлов перед перезаписыванием их
--backup-dir=DIR - создавать копии файлов в каталоге DIR
-e - определить для использования удаленный shell
-v - выводить дополнительную информацию
-a - режим архивирования (не сжатия) - рекурсивное копирование каталогов
(-r), копировать симлинки как симлинки (-l), копировать девайсы
(-D), сохранять при копировании permisson (-p), время (-t),
владельцев (-g, -o)
-с - перед транспортировкой файлов проверить их checksum, если они не
отличаются на отправляемой и принимаемой сторонах, то эти файлы
пропускаются

Команда "nice" указана для того, чтобы процесс rsync во время своего
исполнения не мешал работе других программ.

После запуска приведенной выше команды перед процессом резервного
копирования у пользователя будет запрошен пароль на доступ к
соответствующей учетной записи на удаленном компьютере. При дальнейших
запусках этот пароль снова и снова будет спрашиваться. При автоматизации
резервного копирования это не желательно - пользователь не всегда будет
иметь возможность его ввести.

Поэтому для ssh-авторизации откажемся от использования парольного входа,
а будем использовать для этого авторизацию по ключам. Для того чтобы
сгенерировать пару ключей: приватный и публичный, выполним следующее:

$ ssh-keygen -t dsa -b 2048 -f ~/rsync-key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [Пароля нет. Нажать Enter]
Enter same passphrase again: [Пароля нет. Нажать Enter]
Your identification has been saved in /home/koal/rsync-key.
Your public key has been saved in /home/koal/rsync-key.pub.
The key fingerprint is:
c2:2e:9f:2d:bb:ee:b4:50:c5:a1:04:7b:7c:07:83:61 koal@a*****.ru

Теперь скопируем rsync-key.pub ну пусть хоть и в домашнюю директорию
пользователя koal на удаленной машине.

Затем зайдем в директорию .ssh на удаленной машине (зайти на удаленную
машины можно также с помощью ssh) и скопируем содержимое rsync-key.pub в
новый (тут же и создадим) файл authorized_keys

$ cd ~/.ssh/
$ touch authorized_keys
$ chmod 600 authorized_keys
$ cat ../rsync-key.pub >> authorized_keys

Теперь можно проверить что мы сделали, выполнив на локальной машине:

$ ssh -i ~/rsync-key koal@bridge

После чего нам должна предоставиться командная строка (shell) удаленной
машины без запроса пароля.

Теперь немного помучаем еще файлик ~/.ssh/authorized_keys для увеличения
безопасности: мы ведь хотим чтобы безпарольный доступ осуществлялся не
всегда, а только при резервном копировании. Итак, файлик
~/.ssh/authorized_keys внутри себя представляет следующее:

begin authorized_keys ssh-dss AAAAB3Nz...........SqXY= koal@a*****.ru
end authorized_keys Сейчас в начало этой строки добавим следующую опцию (подробнее об
дополнительных опциях в authorized_keys можно прочесть в man sshd):

begin authorized_keys command="/home/koal/bin/validate-rsync.sh" ssh-dss
AAAAB3Nz...........SqXY= koal@a*****.ru
end authorized_keys Этим мы сказали, что после авторизации на удаленном компьютере с помощью
данного ключа, нужно выполнить данный скрипт. Текст самого скрипта будет
примерно следующим (он создается на удаленной машине):

$ cat >> ~/bin/validate-rsync.sh
#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
[Нажать Ctrl+D]

Как видно что в скрипте используется переменная окружения
$SSH_ORIGINAL_COMMAND, содержащая команду которую запускают на удаленной
стороне. Экспериментально (подставив команду "set" в начало скрипта)
можно выяснить, что также доступны еще следующие переменные, которые
могут быть полезны:

SSH_CLIENT='192.168.2.100 36011 22'
SSH_CONNECTION='192.168.2.100 36011 192.168.2.254 22'
SSH_TTY=/dev/pts/5

Например, $SSH_CLIENT можно использовать для определение с какого IP
происходит резервное копирование.

Итак, теперь результаты подключения к удаленному компьютеру будут
следующими:

$ ssh -i ~/rsync-key koal@bridge
Rejected
Connection to bridge closed.
$ ssh -i ~/rsync-key koal@bridge "echo AAAAAA"
Rejected
$ ssh -i ~/rsync-key koal@bridge "cat /home/koal/bin/validate-rsync.sh"
Rejected

А операция резервного копирования выполняться будет с помощью:

$ nice -+19 rsync -e "ssh -i ~/rsync-key" -vac --force --delete \
--backup --backup-dir=/home/koal/backup/.m_koal/`date +%Y-%m-%d` \
/home/koal/.thunderbird/ koal@bridge:/home/koal/backup/koal/mail/

Теперь напишем скрипт (на локальной машине) выполняющий резервное
копирование - в нем будет выполняться не только бэкап почтового профиля
Thunderbird, но и производиться зеркалирование информации, находящейся в
разделе unsorting проекта lindocs:

begin ~/bin/backup.sh #!/bin/sh

CUR_DATE=`date +%Y-%m-%d`
NICE_COM="nice -+19"
SSH_COM="ssh -i /home/koal/rsync-key"
RSYNC_OPT="-vac --force --delete --backup"

SRC_DIR="/mnt/hdc7/1/Linux/new/new/"
DST_DIR="/home/public/backup/lindocs"
$NICE_COM rsync -e "$SSH_COM" $RSYNC_OPT \
--backup-dir=$DST_DIR/.m_unsorting/$CUR_DATE \
$SRC_DIR koal@bridge:$DST_DIR/unsorting

SRC_DIR="/home/koal/.thunderbird/"
DST_DIR="/home/koal/backup"
$NICE_COM rsync -e "$SSH_COM" $RSYNC_OPT \
--backup-dir=$DST_DIR/.m_mail/$CUR_DATE \
$SRC_DIR koal@bridge:$DST_DIR/mail/
end ~/bin/backup.sh Окончание автоматизации процесса резервного копирования будет настройка
планировщика задач cron, на исполнение данного скрипта во время моего
обеда.

$ EDITOR=/usr/bin/mcedit crontab -e

30 13 * * * /home/koal/bin/backup.sh> /dev/null 2>&1
Вот, в принципе, и все...

   2005-01-13 16:22:32 (#296365)

Re: Creative Commons License

В сообщении от 11 Январь 2005 18:48 alex написал(a):
>
> АЗВ> Кто знает что-нибудь о Creative Commons License?
>
> АЗВ> Киньте ссылочки, пожалуйста.
> Это про Open Source Пиво что ли?

Ваще-то меня не пиво интересует. :-\

   2005-01-13 00:59:35 (#295898)