[ITPASS2011]サーバ交換作業 1 週間後に行う作業

概要

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

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

バックアップする領域

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

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

  • aoelab cps epalab itpass gate

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

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

準備

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

まず, itpass, itpassbk ともに SSH デーモンが立ち上がっている必要があるため, [ITPASS2011]ssh のインストールと設定 を先に行っておくこと. また, rsync をインストールしていない場合は, 以下でインストールしておく.

# apt-get install rsync

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 -vlogDtpr --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 側の鍵の設置 で指定したコマンドでのみログインを許可することとなる.

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

オリジナルのスクリプト用 cron ディレクトリ作成

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

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

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

概要

オリジナルのバックアップスクリプト rsync_epabk.sh#バックアップスクリプトの書き換え に従い書き換える.

また, 書き換えたものは 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"]

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

なお, "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"

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

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

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

# mkdir /var/log/rsync-log
# touch /var/log/rsync-log/itpassbk.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
}

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