IT pass HikiWiki - [Memo2008][EPA]ika構築作業ログ2(塩原,島津) Diff

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

*以下は gate-toroku-system の構築作業ログである.

=1017(金)
== gate-toroku-system のソースを取得

gate-toroku-system のソースは EPA サーバ(tako)の以下のパスに置かれている.
ここからソースを入手し, /home/gate 以下に置く.

  /home/gate/gate-toroku-system.tar.gz


== 必要なソフトウェアのインストール

まず, gate に必要なパッケージをインストールする.
以下の 2 行を /etc/apt/sources.list に追加.

  deb http://www.gfd-dennou.org/arch/cc-env/Linux/debian-dennou stable/
  deb-src http://www.gfd-dennou.org/arch/cc-env/Linux/debian-dennou stable/

その後, 以下のコマンドで, 必要なパッケージをインストールする.

  # apt-get update
  # apt-get install perl-suid rsync wget htroff cvs
  # apt-get install libjcode-pm-perl
  # apt-get install libcrypt-passwdmd5-perl
  # apt-get install libdatetime-perl
  # apt-get install libdatetime-format-strptime-perl

以上の 5 つのパッケージは以前行った[((<[EPA2008]導入されている debian パッケージの引き継ぎ>))]の際にインストース済み.

== 作業用アカウントの作成

今回は既に gate-toroku-system ソースの置き場として作成済みだが,
本来はこの段階で, gate-toroku-system 管理アカウント gate を作成する.
ユーザ ID は 1 -- 999 の間(システムユーザ領域)に設定する.

  # adduser --uid 500 --disabled-password gate

この時, フルネームを「Administrator of gate-toroku-system」と入力.

gate グループに gate 開発メンバーを加える.

  # vigr

  gate:x:500:morikawa,murashin,uwabami,noda,tnyorai

  # vigr -s

  gate:!::500:morikawa,murashin,uwabami,noda,tnyorai

== gate ユーザへのメールの転送

/home/gate/.qmail に gate 管理者のメールアドレスを書き込む.

  # vim /home/gate/.qmail

  &morikawa_at_gfd-dennou.org
  &murashin_at_gfd-dennou.org
  &uwabami_at_gfd-dennou.org
  &noda_at_gfd-dennou.org
  &tnyorai_at_gfd-dennou.org

== gate-toroku-system ソースの展開

((<URL:#gate-toroku-system のソースを取得>)) で取得した
ソースを展開する.

  $ cd /home/gate
  $ tar xvfz gate-toroku-system.tar.gz
  $ cd gate-toroku-system

== gate-toroku-system の設定ファイルを編集

  * include/gate.conf

の ((*$DBSERVER*)) が以下のようになっていることを確認.

  # データベースサーバ (CGI が動作するホスト)
  #
  #   個々のマシンが、「自身がデータベースサーバであるか」といったことにも
  #   使用するため、データベースサーバ内で "hostname -f" で得られる
  #   結果と同じになっている必要があります。

          $DBSERVER = "ika.epa.scitec.kobe-u.ac.jp";

== gate-toroku-system CGI を動作させるための apache2 設定

CGI の動作に関して, apache2 の設定について確認. apache2 の設定ファ
イルは /usr/local/apache2/conf/httpd.conf である.

* apache を動作させるユーザ, グループ

    User www-data
    Group www-data

  gate.conf における $CGIUSER に指定されているユーザ

    $CGIUSER = "www-data";


以上 2 つが一致していることを確認.

* gate システム用 CGI 置き場

インストール先は /usr/local/gate/lib/cgi-bin とし,
  そこに置かれたファイルのシンボリックリンクを
  /usr/local/apache2/cgi-bin/ に置く.

    $BASEDIR = '/usr/local/gate';           # Debian 化されたら /usr
    $CGIBINDIR = "$BASEDIR/lib/cgi-bin";

* /usr/local/apache2/cgi-bin/ の CGI が動作するために

  /usr/local/apache2/cgi-bin/ 以下の CGI が動作するために, httpd.conf
  で以下のように記述されていることを確認.

    <Directory "/usr/local/apache2/cgi-bin/">
        AllowOverride AuthConfig Limit
        Options ExecCGI FollowSymLinks IncludesNoExec
    </Directory>

== make とインストール
*以下のコマンドを実行

  # su gate
  $ cd ~gate/gate-toroku-system/
  $ perl ./config.pl
  $ make

  $ exit

  $ sudo -s
  # cd ~gate/gate-toroku-system
  # make install

実行ファイルや man 用ファイル, HTML ファイルは
/usr/local/gate 以下にインストールされる.

== cgi のシンボリックリンク作成

/usr/local/gate/lib/cgi-bin 以下にインストールされた cgi の
シンボリックリンクを /usr/local/apache2/cgi-bin 以下に作成.

  # cd /usr/local/apache2/cgi-bin
  # ln -s ../../gate/lib/cgi-bin/gate-*.cgi .

== インストールした実行ファイルへのパスの設定

インストールした gate-toroku-system の実行ファイル群へパスを通す.

((<[EPA2008]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *))
に ((*/usr/local/gate/bin*)) を,
((* <システム管理用コマンドのパス> *))
に ((*/usr/local/gate/sbin*)) を追加.

== インストールしたマニュアルへのパスの設定

/etc/manpath.config に以下の行を追加する.
詳しくは ((<[EPA2008]パスの設定#man 関連のパスの設定>)) を参照のこと.

  MANDATORY_MANPATH                             /usr/local/gate/man/ja
  MANPATH_MAP        /usr/local/gate/bin        /usr/local/gate/man/ja
  MANPATH_MAP        /usr/local/gate/sbin       /usr/local/gate/man/ja
  MANDB_MAP          /usr/local/gate/man/ja     /usr/local/gate/man/ja

== Web インターフェースのチェック

((<URL:https://ika.epa.scitec.kobe-u.ac.jp/~gate/>)) にアクセスし,
gate 登録システムのインデックスページが見えるかチェックする.
また, そのページからリンクされている
[((<個人申請|URL:https://ika.epa.scitec.kobe-u.ac.jp/cgi-bin/gate-user-apply.cgi>))]
などに移動し, CGI が動作していることをチェック.

== ユーザの作成

登録によってユーザを登録し, 動作をチェックする.

=== ユーザデータベースのコピー

今回は, これまで使用していたホスト (tako) から新たに構築している

















ホスト (ika) へユーザデータベースをコピーする.  

=== 認証の設定

EPA サーバは公開鍵認証によるログインのみ
許可するため, tako で作成した公開鍵を ika に登録する.

/etc/ssh/sshd_config 内の

  PermitRootLogin forced-commands-only



  PermitRootLogin yes

に書き換え, その後

  # /etc/init.d/ssh restart

として設定を反映させる.


=== /home/gate/userdb 以下のコピー

tako 内の /home/gate/userdb を ika 内の /home/gate/userdb に
コピーする. コマンドでコピーが可能である.

  tako# rsync -n -av --delete /home/gate/userdb/ ika:/home/gate/userdb/

で動作チェックの後,

  tako# rsync -av --delete /home/gate/userdb/ ika:/home/gate/userdb/

を行う.

==== 認証を元に戻す

((<URL:#認証の設定>)) にて行った設定を元に戻す.

具体的には以下のとおり.
/etc/ssh/sshd_config 内の

  PermitRootLogin forced-commands-only



  PermitRootLogin no

に書き換え, その後

  # /etc/init.d/ssh restart

として設定を反映させる.


==== /etc/shadow のコピー

移行作業の際に大量のメールが送信されないよう,
先に tako の /etc/shadow の一部を
ika の /etc/shadow にコピーする.

gate-toroku-system で管理されるユーザは UID 1000 〜 29999 までであるため,
tako の /etc/passwd 内でユーザ名と UID とを比較することで
コピーすべきユーザを調べた後, tako 内の /etc/shadow を開き, gate-toroku-system で管理されるユーザのエントリのみ ika 内の /etc/shadow にコピーする.


== (2) 最初の保証人ユーザ作成

[((<個人申請|URL:https://ika.epa.scitec.kobe-u.ac.jp/cgi-bin/gate-user-apply.cgi>))]
を参照し, 'tnyorai1'の登録申請を行なう.
保証人は先につくったユーザ"gate"として登録.

/home/gate/userdb/pending の下に登録者のデータベースファイル (申請ログイン名がついたファイル) が生成されているのを確認.

登録申請の認証を行うために保証人"gate"の登録システム用パスワードを設定する. gate ユーザの権限で以下のコマンドを実行.

  # su gate
  $ cd
  $ htpasswd -c ~gate/.gate gate

ここで設定したパスワードを用いてユーザ "gate" として保証人の
( [((<ユーザ登録承認|URL:https://ika.epa.scitec.kobe-u.ac.jp/cgi-bin/gate-user-accept.cgi>))] を用いる )
承認を行なう. /home/gate/userdb/stable に承認されたユーザのデータベースファ
イルが移動しているのを確認.

gate-sys.conf の $USE_DAEMON が以下のように設定されている場合,

  $USE_DAEMON = 1;                # 1 がデーモンモード, 0 がクロン

承認時に以下のような警告メッセージが表示される. これは下記の
((<URL:#デーモンモードでの運用>)) で解消されるはずなのでほっておく.

  /usr/local/gate/bin/gate-user-accept: To localhost, connect failed:
     Connection refused at /usr/local/gate/lib/gate-common.pl line ....


== アカウント生成

/home/gate/userdb の中にあるデータベースファイルをシステムに反映させるために ルートで /usr/local/gate/lib/gate-daily を起動する.

  # perl /usr/local/gate/lib/gate-daily

/etc 内に存在する passwd, group, shadow,
sudoers ファイルが更新され, それぞれ .bk を付加した名前の バックアップ
ファイルが生成される. これらの変更点を確認し, 登録した
ユーザの情報が新たに書き込まれていることを確認.

また /home には /home/gate/userdb 以下に存在するユーザのディレクトリが
できているのを確認.


== デーモンモードでの運用

ユーザ, ホストのデータベースをシステムに反映させる方法として デーモン
モードとクロンモードがある. ika ではデーモンモードで運用する.

* gate-sys.conf の設定

  /etc/gate/gate-sys.conf 中の $USE_DAEMON 変数が 1 というのを確かめる.

    $USE_DAEMON = 1;

* gate-toroku-system 用のポートの作成

  /etc/inetd.conf に以下の一行を付け足す.

    gate stream tcp nowait root /usr/sbin/tcpd /usr/local/gate/lib/gate-daily -N

* ポート番号の設定

  /etc/services に以下の行を付け足す.

    gate              8888/tcp          # gate-toroku-system

* TCP wrappers によるセキュリティ強化

TCP wrappers を使用して, アクセスを登録サーバからのものに限定する.


  * /etc/hosts.deny の編集
  
    /etc/hosts.deny に以下の一行を追加し, 全てのホストからの
    gate ポートへのアクセスを拒否する.

      gate-daily: ALL

  * /etc/hosts.allow の編集
  
    /etc/hosts.allow に以下の一行を追加し, 登録サーバ自身からの
    アクセスのみは受け付けるようにする.

      gate-daily: 127.0.0.1

  /etc/hosts.deny と /etc/hosts.allow の設定に間違いがないことを確認す
  る.

    # tcpdmatch gate-daily joho01

  結果, access: denied と表示されればアクセスが正常に拒否されている.
  次に, 登録サーバ自身からのアクセスは受け付けられているか確認する.

    # tcpdmatch gate-daily localhost

  結果, access: granted と表示される.

* inetd を再起動

    # /etc/init.d/openbsd-inetd restart

* 確認

  CGI からユーザの申請および認証を行う. 認証して数分後に
  /etc 以下のシステムファイルが更新される.


== gate-toroku-system の動作確認

ika にて以下のコマンドを実行する

  # perl /usr/local/gate/lib/gate-daily

以下のファイルが生成されているか確認

  * /etc/passwd
  * /etc/shadow
  * /etc/group
  * /etc/sudoers


== gate-toroku-system ソースの移動

インストールが完了したら, ソースを移動すること.

  $ cd /home/gate
  $ mv gate-toroku-system gate-toroku-system_2008-10-17
                                             ^^^^^^^^^^
                                             インストールした日付


== ezmlm を使う場合の設定

=== gate-db-to-ezmlm の設定

/usr/local/gate/bin/gate-db-to-ezmlm を以下のように変更する.

* 変更前

    ##############################################
    #
    # 0. 実行ファイル, ドメインの指定
    #
    $domainname='gfd-dennou.org';
  
    $ezmlmlist='/usr/bin/ezmlm-list';
    $ezmlmsub='/usr/bin/ezmlm-sub';
    $ezmlmunsub='/usr/bin/ezmlm-unsub';

    #
    # 0. エラー処理

* 変更後

    ###############################################
    #
    # 0. 実行ファイル, ドメインの指定
    #
    #$domainname='gfd-dennou.org';
    $domainname='epa.scitec.kobe-u.ac.jp';

  
    #$ezmlmlist='/usr/bin/ezmlm-list';
    #$ezmlmsub='/usr/bin/ezmlm-sub';
    #$ezmlmunsub='/usr/bin/ezmlm-unsub';
    $ezmlmlist='/usr/local/ezmlm/bin/ezmlm-list';
    $ezmlmsub='/usr/local/ezmlm/bin/ezmlm-sub';
    $ezmlmunsub='/usr/local/ezmlm/bin/ezmlm-unsub';
  
    #
    # 0. エラー処理