読者です 読者をやめる 読者になる 読者になる

rsyncでバックアップ

LinuxMac間で相互に必要なファイルのバックアップを取ることにしました。
バックアップツールはrsyncを使います。rsyncは変更のあったファイルだけコピーする、ネットワーク越しのバックアップに適したツールでLinux(CentOS 5.2)、Mac(OS X 10.5.6)とも、標準で入ってます。


作業としてはこんな感じです。

  • 相互にパスワードなしのsshをとおす
  • バックアップ対象のパターンリストを作る
  • cronでrsyncを定期実行


今回はrootユーザでバックアップを実行しますが、rootでのsshログインを許可するのはセキュリティ上好ましくありません。
簡単なアクセス制限をかけます。

  • パスワードでのログインを禁止(公開鍵使用のみ許可)
  • 公開鍵に対してログイン元ホストを限定

アクセス制限の方法についてはPAMを使うforced-commands-onlyで他のコマンドを実行できないようにする、専用の一般ユーザで実行する、など他にもいろいろ考えられます。要求されるセキュリティレベルに応じて判断、設定してください。



それでは実際の手順です。今回の環境ではLinuxのホスト名が「cent」、Macのホスト名が「mini」で相互にホスト名の解決ができるようにしています。

SSH設定

Linux側のほうだけのせます。Macでも同じことをやります。
設定をミスるとログインできなくなる恐れがありますので慎重に、動作確認とりつつ行ってください。


まずは鍵作って通信先のauthorized_keysに登録します。パスワードなしのsshログインができるようになります。
ログイン先に.sshがない場合はログイン先でもssh-keygenを実行するかmkdir、chmod 700で作ってください。

[root@cent ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...
[root@cent ~]# cat .ssh/id_rsa.pub | ssh mini 'cat >> .ssh/authorized_keys'


パスワードでのsshログインを禁止します。

[root@cent ~]# vi /etc/ssh/sshd_config
...
PermitRootLogin without-password
...
[root@cent ~]# /etc/init.d/sshd reload


ログイン先のauthorized_keysにfrom="ログインホスト"を追記してログインホストを限定します。IPアドレスでもかまいません。

[root@cent ~]# ssh mini

mini:~ root# vi .ssh/authorized_keys 
from="cent" ssh-rsa AAA<略>UCQ== root@cent

バックアップ対象のパターンリスト

このへんを参考にバックアップ対象、除外対象をリストしたファイルを作りましょう。

Linux
[root@cent ~]# cat ~/rsync.list
# tmpディレクトリ、tmpファイルは除外
- tmp/
- *.tmp

# /etc,/root,/home,/var/www以下を全てバックアップ
+ /etc/
+ /etc/**

+ /root/
+ /root/**

+ /home/
+ /home/**

+ /var/
+ /var/www
+ /var/www/**

# 上記以外は全て除外
- *
Mac
- tmp/
- *.tmp

+ /private/
+ /private/var/
+ /private/var/root/
+ /private/var/root/**

+ /Users/
+ /Users/**

- *

cronで1日おきに実行する

保存ディレクトリは/var/rsync/<ホスト名>にします。

Linux
[root@cent ~]# crontab -e
30 3 * * * /usr/bin/rsync --archive --delete --ignore-errors --whole-file --exclude-from=~/rsync.list / mini:/var/rsync/cent
Mac
mini:~ root# crontab -e
0 4 * * * /usr/bin/rsync --archive --delete --ignore-errors --whole-file --exclude-from=~/rsync.list / cent:/var/rsync/mini 

ちゃんと動いてるかどうかは明日確認します。おやすみなさい・・・