IT pass HikiWiki - [ITPASS2011a]サーバ交換作業 1 週間後に行う作業 Diff

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

{{toc_here}}

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

= 本サーバから予備サーバへのバックアップ設定

== 概要

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

この作業は, 本サーバが正しく動作しているかの確認が取れてから行うため, サーバ交換後すぐには行わず, サーバ交換後しばらくしてから行う.

=== バックアップする領域

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

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

* aoelab cps epalab itpass gate

また以下の領域については, バックアップ日時ごとにディレクトリを作成するローカルバックアップを実行している (例: ~epalab/hiki -> ~epalab/hiki.bk/20121005-172930).
バックアップデータは 230_rsync_itpassbk により予備サーバへ転送される.

* epalab/hiki itpass/hiki itpass/hiki-secret


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

バックアップには rsync を用いる.
様々な権限のファイルに対応できるよう root アカウントでバックアップを行うが,
セキュリティを高めるため, 予備サーバーへの転送の際は認証に SSH + 公開鍵暗号を用いる.

== 準備

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

まず, itpass, itpassbk ともに
SSH デーモンが立ち上がっているか確認し,
もし立ち上がっていない場合は
((<[ITPASS2011a]ssh のインストールと設定>))が
ちゃんと行われているか確認した上で立ち上げること.

== itpass 側での公開鍵作成

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

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

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

== itpassbk 側の鍵の設置

itpass で作成した公開鍵 itpass:/root/.ssh/id_dsa.pub を
itpassbk:/root/.ssh/authorized_keys の最後尾に追記する
(ファイルがない場合は作成する).
ここで itpass から直接追記しようとすると,
itpassbk 側の root パスワードが必要になるので,
一旦 itpassbk の自分のディレクトリに鍵を置いた後,
itpassbk で root となり authorized_key に追記する.

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

  command="rsync --server -vvlogDtpre.iLsf --delete . /home/",no-pty,
  from="ika-itpass.scitec.kobe-u.ac.jp",no-port-forwarding,
  no-X11-forwarding,no-agent-forwarding

  
== itpassbk 側の通信許可

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

  PermitRootLogin no

という部分を

  PermitRootLogin forced-commands-only

に変更したのち,

  itpassbk# /etc/init.d/ssh restart

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

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

=== バックアップスクリプトを置くディレクトリの確認

オリジナルの cron 用スクリプトは /etc/cron.local/daily に置く.
((*もしこのディレクトリがなければ
((<[ITPASS2011a]システムログメールの設定>))
が行われていない可能性があるので
システムログメールの作業担当者に連絡すること*)).

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

==== 概要

オリジナルのバックアップスクリプト
((<rsync_epabk.sh|URL:../server/2009/system_backup/rsync_epabk.sh>))
を ((<#バックアップスクリプトの書き換え|URL:#バックアップスクリプトの書き換え>)) に従い書き換える.

また, 書き換えたものは
((<rsync_itpassbk.sh|URL:../server/2011/system_backup/rsync_itpassbk.sh>)) にある.

この書き換えたものを, /etc/cron.local/daily/230_rsync_itpassbk に設置する.
(スクリプト先頭の番号は, その他のスクリプトを置いた際,
どれを優先して実行するかを決めるためのものである.
若い番号のものほど先に実行される).

==== 具体的には

  # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2011/system_backup/rsync_itpassbk.sh
  (書き換える場合は
  wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2009/system_backup/rsync_epabk.sh)

  # mv rsync_itpassbk.sh(もしくは, rsync_epabk.sh) /etc/cron.local/daily/230_rsync_itpassbk

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

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


==== バックアップスクリプトの書き換え

rsync_itpassbk.sh をダウンロードした場合には, 以下の書き換えは済んでいるため必要ない.

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

: SHARED_HOST

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

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

: BKSUBDIRS

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

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

書き換え前後の 230_rsync_itpassbk の差分は以下である.

  $ diff -u ~itpass/public_html/server/2010/system_backup/rsync_itpassbk.sh \
    ~itpass/public_html/server/2009/system_backup/rsync_epabk.sh
  --- /home/itpass/public_html/server/2009/system_backup/rsync_epabk.sh   2009-01-15 17:26:18.000000000 +0900
  +++ /home/itpass/public_html/server/2010/system_backup/rsync_itpassbk.sh        2010-09-16 14:27:37.000000000 +0900
  @@ -1,6 +1,6 @@
   #!/bin/sh
   #
  -#= Backup script for EPA servers (tako <=> ika)
  +#= Backup script for ITPASS servers (tako <=> ika)
   #
   MAINTAINERS="Yasuhiro MORIKAWA, Shin-ya Murakami"
   UPDATE='2009-01-15'
  @@ -11,17 +11,17 @@
   ######################################################################
   # Settings

  -SHARED_HOST="ika.epa.scitec.kobe-u.ac.jp tako.epa.scitec.kobe-u.ac.jp"
  +SHARED_HOST="ika-itpass.scitec.kobe-u.ac.jp tako-itpass.scitec.kobe-u.ac.jp"

   BKROOTDIR="/home"
  -BKSUBDIRS="ahslab aoelab cps epalab itpass pschool gate mosir"
  -LOGFILE='/var/log/rsync-log/epabk.log'
  +BKSUBDIRS="aoelab cps epalab itpass gate"
  +LOGFILE='/var/log/rsync-log/itpassbk.log'

   RSYNCCMD='rsync'
   OPTIONS="-av --delete"
   DRYRUNOPT='-n'
   TMPDIR='/tmp'
  -LOGTMP="${TMPDIR}/rsync_epabk.tmp.log-$$"
  +LOGTMP="${TMPDIR}/rsync_itpassbk.tmp.log-$$"

   # End Settings
   ######################################################################
  @@ -155,7 +155,7 @@
   ##############################
   #== Summary message
   #
  -echo "***** EPA servers data backup by $0 *****"
  +echo "***** ITPASS servers data backup by $0 *****"
   echo "  ${srchostdef}:${BKROOTDIR}/\${dir} -> ${DSTHOST}${BKROOTDIR}/\${dir}"
   echo ""
   echo "                      Update          Delete"

== hiki データバックアップスクリプトの設置

=== 概要

((<rsync_itpassbk.sh|URL:../server/2011/system_backup/rsync_localbk_hiki.sh>))
を /etc/cron.local/weekly/210_rsync_localbk_hiki に設置する

==== 具体的には

  # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2011/system_backup/rsync_localbk_hiki.sh

  # mv rsync_localbk_hiki.sh /etc/cron.local/weekly/210_rsync_localbk_hiki

/etc/cron.local/weekly/210_rsync_localbk_hiki に実行権限を設定する.

  # chmod 755 /etc/cron.local/weekly/210_rsync_localbk_hiki

== crontab の編集

/etc/crontab を編集する. 以下の 2 行があることを確認する.

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

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

  25 6    * * *   root    cd / && run-parts --report /etc/cron.local/daily |mail -s "`hostname -f` daily run outputs" xxx@xxx.xxxx
  47 6    * * 7   root    cd / && run-parts --report /etc/cron.local/weekly  |mail -s "`hostname -f` weekly run outputs" itpadmin@itpass.scite
c.kobe-u.ac.jp


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

ログファイルのためのディレクトリとファイルを作成しておく.
なお, このログファイルの場所は
((<#バックアップ用スクリプトの用意|URL:#バックアップ用スクリプトの用意>))

((<#hiki データバックアップスクリプトの設置|URL:#hiki データバックアップスクリプトの設置>))
で設置したスクリプト内の変数 LOGFILE を書き換えることで変更できる.

  # mkdir /var/log/rsync-log
  # touch /var/log/rsync-log/itpassbk.log
  # touch /var/log/rsync-log/localbk_hiki.log


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

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

  # vi /etc/logrotate.d/rsync_itpassbk

以下の内容を書き込む.

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

hiki データのバックアップの際の rsync のログは 1 ヶ月毎に分割する.
/etc/logrotate.d/ 以下に rsync_localbk_hiki という設定ファイルを作成.

  # vi /etc/logrotate.d/rsync_localbk_hiki

以下の内容を書き込む.

  /var/log/rsync-log/localbk_hiki.log {
      monthly
      create 0644 root root
      rotate 12
  }

== itpassbk のローカルバックアップの停止

220_rsync_localbk_root, 225_rsync_localbk_home の実行権限を外す.


  # cd /etc/cron.local/daily
  # chmod a-x 220_rsync_localbk_root 225_rsync_localbk_home


== 参考資料

* ((<[ITPASS2010]サーバ交換作業 1 週間後に行う作業>))
* ((<"佐藤裕介, 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>))


= 不要なファイルの削除

運用開始から 1 週間をめどに, 参考のために old からコピーしたファイル類を削除する. また emacs で編集した際の一時ファイル(ファイル名~ など)もあれば削除する.

= 再構築作業用 chikuwa* ユーザの削除

   userdel -r [アカウント名]

  で, ホームディレクトリも一緒に削除できる.

  * visudo から chikuwa* を削除する.

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