IT pass HikiWiki - [EPA2008]サーバと予備サーバでのバックアップの設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<EPAサーバ構築ドキュメント>)) へ戻る]

= 概要

EPA サーバにはバックアップとサーバ本体のトラブル時に代替するための
予備サーバを立ててある. /home 以下のいくつかの領域に関して,
EPA サーバ本体から予備サーバへ定期的にバックアップを取る.

= バックアップする領域

バックアップを取る領域は, 原則的にグループで管理する資源や,
システムにとって必要な資源である.

2008/08/01 現在, 以下の領域をバックアップの対象とする.

* ahslab aoelab cps epalab itpass pschool gate

= バックアップの際の認証方式

バックアップには rsync を用いる.
root アカウントでバックアップを行うが,
セキュリティを高めるため, その認証には SSH + 公開鍵暗号を用いる.

= 準備

以降では, 運用中の EPA サーバのホスト名を ((*epa*)),
予備サーバを ((*epabk*)) と称する. 実際には, 使用するホストの名称に
置き換えて作業を行うこと.

まず, epa, epabk ともに SSH デーモンが立ち上がっている必要があるため,
((<[EPA2008]sshのインストールと設定>)) を先に行っておくこと.
また, rsync を用いてバックアップを行うため, 以下のように rsync
パッケージをインストールせよ.

  # apt-get install rsync

= epa 側での公開鍵作成

バックアップのための公開鍵を作成する.

  epa$ sudo -s -H
  epa# cd /root
  epa# ssh-keygen -t dsa

  (鍵はデフォルトの /root/.ssh/id_dsa とする)
  (パスフレーズは空にする)


= epabk 側の鍵の設置

epa で作成した公開鍵 epa:/root/.ssh/id_dsa.pub を
epabk:/root/.ssh/authorized_keys にコピーする.
既に authorized_keys が作成されている場合には, id_dsa.pub の内容を
authorized_keys の最後尾に追記すること.

ただし, このままでは epa で root を取られると epabk もそのまま
乗っ取られることが考えられるため, 公開鍵認証の際にはバックアップ以外
の動作をできないよう, また EPA ドメイン以外からのアクセスを受け付けないよう
制限をかける. そのために, 上記で設置した authorized_keys 内の
epa の公開鍵の行の冒頭に以下を加える. なお, 見易さのため改行してあるが,
一行で書くこと, またカンマの前後に空白は開けないこと.
そして, 最後の "no-agent-forwarding" と公開鍵の冒頭に書いてある
"ssh-dss" または "ssh-rsa" の間には空白を一文字入れること.

  command="rsync --server -vlogDtpr --delete . /home/",no-pty,
  from="*.epa.scitec.kobe-u.ac.jp",no-port-forwarding,
  no-X11-forwarding,no-agent-forwarding
  
= epabk 側の通信許可

最近の OpenSSH では, デフォルトでは root のログインを許可しないため,
設定を変更する. /etc/ssh/sshd_config の

  PermitRootLogin no

という部分を

  PermitRootLogin forced-commands-only

に変更したのち,

  epabk# /etc/init.d/ssh restart

として設定を反映すること. これにより, ((<URL:#epabk 側の鍵の設置>))
で指定したコマンドでのみログインを許可することとなる.

= epa 側でのデータ転送用スクリプトの設置

== 自作スクリプト用 cron ディレクトリ作成

自作の cron 用スクリプト置き場として, /etc/cron.local を作成する.

  # mkdir /etc/cron.local
  # mkdir /etc/cron.local/daily

== バックアップ用スクリプトの用意

((<rsync_epabk.sh|URL:../epa/system_backup_2008/rsync_epabk.sh>))
を, /etc/cron.local/daily/230_rsync_epabk に設置する.
(スクリプト先頭の番号は, その他のスクリプトを置いた際, どれを
優先して実行するかを決めるためのものである. 若い番号のものほど
先に実行される).

  # wget http://epa.scitec.kobe-u.ac.jp/~itpass/epa/system_backup_2008/rsync_epabk.sh
  # mv rsync_epabk.sh /etc/cron.local/daily/230_rsync_epabk

/etc/cron.local/daily/230_rsync_epabk に実行権限を設定する.

  # chmod 755 /etc/cron.local/daily/230_rsync_epabk

== バックアップ用スクリプトの編集

epa および epabk のホスト名やバックアップする領域に応じて,
230_rsync_epabk を編集する. 主に編集するのは以下の項目である.

: SHARED_HOST

  バックアップを行う 2 つのホスト (本文書での epa および epabk)
  のドメイン名 (ホスト名 + ドメイン名) をスペースで区切って
  記述する. 送信元と送信先で順序を変える必要は無い.

  このスクリプトではスクリプトを起動するホストが必ず
  転送元で, もう一方が転送先になるようになっている.

: BKSUBDIRS

  転送する領域を記述する. これは ((<URL:#バックアップする領域>))
  に応じて書き換えること.

  なお, "hoge/" 等と最後にスラッシュをいれると転送がうまく
  行かなくなるので注意すること.


= crontab の編集

/etc/crontab を編集する. 以下の一行を追加する.

  25 6    * * *   root    cd / && run-parts --report /etc/cron.local/daily

出力結果に関してメールを送信したい場合には以下のようにすると良い.

  25 6    * * *   root    cd / && run-parts --report /etc/cron.local/daily |mail -s "`hostname -f` daily run outputs" xxx@xxx.xxxx


= バックアップログファイルの作成

ログファイルのためのディレクトリとファイルを作成しておく.
なお, このログファイルの場所は ((<URL:#バックアップ用スクリプトの用意>))
で用意した 230_rsync_epabk 内の LOGFILE を書き換えることで変更できる.

  # mkdir /var/log/rsync-log
  # touch /var/log/rsync-log/epabk.log


= バックアップログファイルの logrotate の設定

rsync のログを 1 週間毎に分割する.
/etc/logrotate.d/ 以下に rsync_epabk という設定ファイルを作成.

  # vi /etc/logrotate.d/rsync_epabk

以下の内容を書き込む.

  /var/log/rsync-log/epabk.log {
      weekly
      create 0644 root root
      rotate 12
  }


= 参考資料

* ((<"佐藤裕介, 2005: rsync + cron + ssh (rsyncd を立てない編)"|URL:http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html>))
* ((<"梅原大祐, 2006: rsync + cron + ssh でセキュアな自動リモートバックアップ"|URL:http://www.imc.cce.i.kyoto-u.ac.jp/~umehara/misc/comp/20061121.html>))

[((<EPAサーバ構築ドキュメント>)) へ戻る]