IT pass HikiWiki - [Memo2008][EPA]EPA サーバ交換作業ログ(北野・須賀) Diff

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

{{toc}}

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


= 10/27 (月) (前日作業)

== home 領域を tako から ika へ転送

* 当日にも同様の作業を行うが, その際の時間を短縮するために行う.

=== 公開鍵認証の際のセキュリティ設定の変更 (通信許可)

まず, tako から ika への移行作業では ika 側の tako に対する通信許可の設定を行う.

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

  PermitRootLogin no

という部分を

  PermitRootLogin yes

に変更ししたのち,

  ika# /etc/init.d/ssh restart

として設定を反映すること. これにより, root のログインを許可することとなる.

=== rsync で転送されるファイルの確認
/root/.ssh/ の秘密鍵でログインするため, まず以下の作業を行う.

  tako$ sudo -s -H
  tako# cd /root  

いきなり rsync コマンドを実行すると予期せぬ間違い (転送元と転送先の設
定を間違って, 転送先のファイルを全て消してしまう, など) が起こりうるた
め, まずは rsync コマンドに -n オプションをつけて実行する. -n オプショ
ンをつけて実行すると, 実際のファイルの転送は行わずに, 転送されるはずの
ファイルのリストが出力される.

ここでは一度ファイルリストを /tmp ディレクトリ以下に出力し, 確認してから
実際の転送を行うこととする.

  root@tako:~# rsync -n -av --delete -e ssh --exclude chikuwa* -x --exclude=aquota.user /home/ ika.epa.scitec.kobe-u.ac.jp:/home/ 2>&1 | tee /tmp/rsync_tako2ikachikutaro.log

rsync に関するオプション (-av, --delete, -e 等) については, ((<rsync(1)|URL:http://www.infoscience.co.jp/technical/rsync/rsync.html>))
等を参照のこと. また, "/home" と "/home/" では転送内容が異なるため
注意せよ.

ここでは, ika のみに存在する ika 構築用に作成した ユーザーの公開鍵などが, rsync をしても消えないように, --exclude chikuwa* というオプションを加える.

また, 外部記憶装置にあるファイルが転送されることのないように -x というオプションを加える.

さらに, aquota.user というファイルは転送しようとするとエラーが表示されるが, ika にもすでに存在するので, 除外するために --exclude=aquota.user というオプションも加える.

上記コマンドの動作が終了したら, /tmp/rsync_tako2ikachikutaro.log を見て,
転送される予定のファイルを確認する.
もしも予期しないファイルが削除, 転送されてしまう場合には, --exclude オプ
ションを使用してそのファイルは転送対象から除外すること.

=== rsync でファイルの転送

((<URL:#rsync で転送されるファイルの確認>)) で確認したコマンドから -n
オプションを除いたコマンドを実行する.

実行後, ika 内の /home 以下にファイルが転送されていることを確認すること.

  
===  公開鍵認証の際のセキュリティ設定の変更(通信制限)
ika 側の tako に対する通信制限の設定を行う.
先ほど, tako から ika に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
/etc/ssh/sshd_config の

  PermitRootLogin yes

という部分を

  PermitRootLogin no

に変更したのち,

  ika# /etc/init.d/ssh restart

として設定を反映することにより元に戻る.


= 10/28 (火) (当日作業)

以下では, EPA サーバの tako から ika への移行の作業の詳細を時系列順 (phase 1 -- 4) にまとめる.

== phase 1
tako のサービスを停止する.

* tcpserver(smtp), openbsd-inetd(pop3)

  tcpserver, openbsd-inetd に関して,
  以下のコマンドで, サービスを一時的に停止する.
  ただし, 再起動すると再びこれらのサービスも起動してしまうため,
  作業途中で再起動の必要性が出てしまった場合は注意.
  永続的にサービスを停止する作業は phase 3 にて行う.

    # /etc/init.d/tcpserver stop
    # /etc/init.d/openbsd-inetd stop

== phase 2
tako から ika へ各種データをコピーする.

* 公開鍵認証の際のセキュリティ設定を変更する(通信許可)

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

    PermitRootLogin no

  という部分を

    PermitRootLogin yes

  に変更したのち,

    ika# /etc/init.d/ssh restart

  として設定を反映すること. これにより, root のログインを許可することとなる.

* 次に /root/.ssh/ の秘密鍵でログインするため, 以下の作業を行う.

    tako$ sudo -s -H
    tako# cd /root  

* /home ディレクトリを tako から ika へ rsync

  この時点で, 外部記憶装置が /home/yot/work-usb/ にマウントされている.
  ここでそのまま rsync すると, 外部記憶装置にあるファイルも転送されてしまう.

    root@tako:~# rsync -n -av --delete -e ssh --exclude chikuwa* --exclude=work-usb --exclude=aquota.user /home/ ika.epa.scitec.kobe-u.ac.jp:/home/ 2>&1 | tee /tmp/rsync_tako2ikachikutaro.log

  rsync で -x すれば外部記憶装置にあるファイルが転送されないようにできるが,
  このときは外部記憶装置が 1 つであり, それが /home/yot/work-usb/ に
  マウントされていたので, --exclude=work-usb という方法を用いてもよい.

  気持ちとしては, /home/yot/work-usb/ の空ディレクトリが転送されるのが
  気持ち悪かったので, --exclude=work-usb としたが,
  実は前日作業で -x としていたため空ディレクトリは既に転送されており,
  単に -x でよかったのだけれど….


* tako の /usr/local/qpopper/pop.auth を ika へコピー
      tako$ cd /usr/local/qpopper/
      tako$ sudo cp pop.auth ~/
      tako$ cd
      tako$ sudo chown taro:taro pop.auth
      tako$ sudo scp pop.auth ika:
      tako$ sudo slogin ika
      ika$ cd /usr/local/qpopper
      ika$ sudo mv pop.auth pop.auth~
      ika$ sudo mv ~/pop.auth .
      ika$ sudo chown pop:mail pop.auth
      ika$ ls -l
      ika$ rm pop.auth~
      ika$ exit
      tako$ rm pop.auth

== phase 3
tako の設定変更を行う.
* qmail の設定変更

  外から来たメールを受け取らないように, and
  ログメールを飛ばすのに必要な設定だけにするため,
  /var/qmail/control 以下の locals, rcpthosts を以下のように
  変更する. 移行が終わったら起動する.

  変更前
    localhost
    tako.epa.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    tako.ahs.scitec.kobe-u.ac.jp
    ahs.scitec.kobe-u.ac.jp
    tako.aoe.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
    tako.cps.scitec.kobe-u.ac.jp
    cps.scitec.kobe-u.ac.jp

  変更後
    localhost


ika の設定変更する.

* qmail の設定変更

  /var/qmail/control 以下の locals, rcpthosts が以下のように
  変更されているかチェックする. されていない場合は以下のように編集する.

      localhost
      ika.epa.scitec.kobe-u.ac.jp
      epa.scitec.kobe-u.ac.jp
      ika.ahs.scitec.kobe-u.ac.jp
      ahs.scitec.kobe-u.ac.jp
      ika.aoe.scitec.kobe-u.ac.jp
      aoe.scitec.kobe-u.ac.jp
      ika.cps.scitec.kobe-u.ac.jp
      cps.scitec.kobe-u.ac.jp

* 公開鍵認証の際のセキュリティ設定を変更する (通信制限)

  ika 側の tako に対する通信制限の設定を行う.
  先ほど, tako から ika に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻す.
  /etc/ssh/sshd_config の

    PermitRootLogin yes

  という部分を

    PermitRootLogin no

  に変更したのち,

    ika# /etc/init.d/ssh restart

  として設定を反映することにより元に戻る.



* ((<[EPA2008]サーバと予備サーバでのバックアップの設定>))の作業を行う


  * 概要

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

  * バックアップする領域

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

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

    * ahslab aoelab cps epalab itpass pschool gate

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

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

  * 準備

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

    * 今回の場合, epa=ika, epabk=tako になる

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

      # apt-get install rsync

    * インストールは既に行われているので, 設定と 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 側の鍵と違っていないか確かめておく.


    ただし, このままでは 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
  
    * tako側のauthorized_keys の{上の文字列}[空白]{公開鍵}というふうに書く

  * 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

      * ちなみにこの辺りからは epa=ika で行う作業なので, 間違って epabk=tako で作業を行っている人はスクリプトの設置の頭まで戻るように

    /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)
      のドメイン名 (ホスト名 + ドメイン名) をスペースで区切って
      記述する. 送信元と送信先で順序を変える必要は無い.

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

      * 入手した時点で書かれていると思うが, 確認しておく.
        "ika,epa.scitec.kobe-u.ac.jp tako.epa.scitec.kobe-u.ac.jp"
        とあればOK. 上記のように順番はどちらでもよい.
  
    : BKSUBDIRS

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

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

      * BKSUBDIRS="ahslab aoelab cps epalab itpass pschool gate" と
        なっていればよい

  * 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

    * これも Mail 構築のときに編集済み. 確認したときにアドレスが
      "epaadmin_at_ika.epa.scitec.kobe-u.ac.jp" となっていたので
      "epaadmin_at_epa.scitec.kobe-u.ac.jp" としておいた.

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

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

    で用意した 230_rsync_epabk 内の LOGFILE を書き換えることで変更できる.

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

    * touch は指定したファイルが存在しないときは, 中身が空のファイルを作成する. touch をする前に 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>))



== phase 4
  * 移行の最終チェック
    * ika
      * pop: メールをとってこれるか
      * smtp: メールを出せるか, 受け取れるか
      * mailing list: メールが配送されるか
    * tako
      * pop: 無効になっているか
      * smtp: submit は有効にするが, 受け取らない設定になっているか

* new の smtp や Mailing list の確認は Mailの構築の際と同じような手順で
  チェックする(qmail-inject で外にメールが届くか, 外からメールを送って届くか,
  Mailing list にメールを送って届くか).

* pop の確認の準備
  自分の ika のアカウントで, .qmail の設定と Mairbox の作成
  popauth コマンドを行ってパスワードを作っておく作業をする

  メーラーの設定は pop サーバ, smtp サーバはどちらも epa.scitec.kobe-u.ac.jp にする
  認証形式は APOP で, 暗号化は pop も smtp も無しにする

  受信のときにパスワードを要求されるので, popauth で作成したパスワードを入力する.