[ITPASS2011]gate-toroku-systemのインストールと設定

作業用アカウントの作成

  • gate-toroku-system 管理アカウント gate を作成する. ユーザ ID は 1 -- 999 の間(システムユーザ領域)に設定する(以下では 500 とする).

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

    登録の際, フルネームには「Administrator of gate-toroku-system」を用いる.

  • gate グループに gate 管理者を加える.

    gate 管理者については, gate-toroku-system の開発とメンテナンスの開発メンバーのユーザおよび, gate のインストールを行ったメンバーとする.

    # vigr
    
    gate:x:500:murashin,noda,akimitan,takahasu
    
    # vigr -s
    
    gate:!:::murashin,noda,akimitan,takahasu

gate-toroku-system のソースを取得

gate-toroku-system のソース (gate-toroku-system.tar.gz) を old の /home/gate/ から入手し, new の /home/gate に置く.

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

  • まず, gate に必要なパッケージをインストールする. /etc/apt/sources.list の以下の 2 行の "squeeze"の部分を、インストールするパッケージに応じて変更する.

    deb http://www.gfd-dennou.org/arch/cc-env/Linux/debian-dennou squeeze/
    
    deb-src http://www.gfd-dennou.org/arch/cc-env/Linux/debian-dennou squeeze/
                                                                      ^^^^^^^^
  • その後, 以下のコマンドで, 必要なパッケージをインストールされていることを確認する.

    # 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

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

  • BY ANY CHANCE!!!!

    # apt-get install htroff

    のパッケージが存在しないと表示されたなら, ソースパッケージを取得するために, ひとまず /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 source htroff

    を実行すると,

    htroff-2.0(ディレクトリ), htroff_2.0.diff.gz, htroff_2.0-3.dsc, htroff_2.0.orig.tar.gz

    を得る. これらを用いてバイナリパッケージを作成する.

    # cd htroff-2.0
    # dpkg-buildpackage -us -uc -b -rfakeroot

    を実行. オプションは以下の通り.

    -us -> ソースに署名しない
    -uc -> changelogに署名しない
    -b -> バイナリのみ作成
    -r -> root権限取得コマンド(fakerootは擬似的にroot権限を使えるコマンド)

    その結果,

    htroff_2.0-3_all.deb, htroff_2.0-3_amd64.changes

    が得られた.何のエラーも出なかったなら, 依存関係は満たしている.

    後はインストールするだけ,

    # dpkg -i htroff_2.0-3_all.deb    

    これで, htroff がインストールできる.

    最後に, /etc/apt/sources.list の中の二行を

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

    に変更し,

    # apt-get update

    を実行する.

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

/home/gate/.qmail に gate 管理者のメールアドレスを書き込む. メンバーは上記の 作業用アカウントの作成 でグループに加えたものと同じにする.

# vi /home/gate/.qmail

&tyubo
&aynszn
&ryukih

gate-toroku-system ソースの展開

gate-toroku-system のソースを取得 で取得したソースを展開する.

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

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

old の /etc/gate/ の下から gate.conf をコピーし /etc/gate/ の下におく. gate.conf の中身を以下のように編集する.

$DBSERVER = "new-itpass.scitec.kobe-u.ac.jp";

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

以下では CGI の動作に関して, apache2 の設定について以下を確認する.

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

    apache がどのユーザ, グループの権限で動作するかは /usr/local/apache2/conf/httpd.conf 内の「 User 」 および「 Group 」で指定される.

    User www-data
    Group www-data

    この「 User 」,「 Group 」に指定されているユーザ, グループが gate.conf における $CGIUSER に指定されているユーザと一致していることを確認する.

    $CGIUSER = "www-data";
  • /usr/local/apache2/cgi-bin/ の CGI が動作するために /usr/local/apache2/conf/httpd.conf で下記の記述があることを確認する.

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

make とインストール

以下のコマンドを実行し, 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 以下にインストールされる.

(IP 管理用の設定ファイルも同様の場所に gate-ip.confとしてインストールされる).

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 の実行ファイル群へパスを通す.

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

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

[ITPASS2011]パスの設定#man 関連のパスの設定 を参照し, /etc/manpath.config に以下の行を追加する.

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 インターフェースのチェック

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

ユーザの作成

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

この作業では old から new へ root ログインする必要があるため root ログイン用の公開鍵の設置と root ログインの許可を事前に行う.

root ログイン用の公開鍵の設置

  • old に残った, インストール前の new の情報を削除

    old の /root/.ssh 以下にある known_hosts のなかの new に該当する行を削除する. (何番目が new に該当するかは old で ssh または rsync のコマンドを実行しようとしたときのエラーからわかる. )

  • new で鍵を作成

    new-itpass$ sudo -s
    new-itpass# cd /root
    new-itpass# ssh-keygen -t dsa
    (鍵はデフォルトの /root/.ssh/id_dsa とする)
    (パスフレーズは空にする)

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

root ログインの許可

old のユーザデータベースを new にコピーする.

  • old の /home/gate/userdb を new 内の /home/gate/userdb にコピーする.
  • まず, -n オプションを付けて rsync の動作チェックを行う.

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

    new-itpass# rsync -n -av --delete /home/gate/userdb/ new-itpass:/home/gate/userdb/
    • 実際にコピーを行う.
    new-itpass# rsync -av --delete /home/gate/userdb/ new-itpass:/home/gate/userdb/
  • old 内の root ログインを不許可に設定し直す.

    PermitRootLogin no

/etc/shadow のコピー

gate-toroku-system では, /etc/shadow に存在しないユーザがデータベース内に居た場合, 初めてユーザを作成したと認識してメールを送信するようになっている.

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

  • old の /etc/shadow のうち, UID 1000 〜 29999 までの gate-toroku-system で管理されるユーザーについて, そのアカウント名の行をコピーして new の /etc/shadow のファイルに追加する. 各ユーザに対する uid は /etc/passwd に書かれているので参照する.

    # lv /etc/passwd
    
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
          ^ ここが uid

最初の保証人ユーザ作成

個人申請 (https://new-itpass.scitec.kobe-u.ac.jp/cgi-bin/gate-user-apply.cgi) にアクセスし, ユーザ登録申請を行う(適当なユーザーで no prpblem). 保証人は先につくったユーザ "gate" とする. /home/gate/userdb/pending の下に登録者のデータベースファイル (申請ログイン名がついたファイル) が生成されているか確認する. 作業完了後、このユーザーは不要なので削除するのでパスワードを覚えておくこと. 承認を行うために保証人 "gate" の登録システム用パスワードを設定する. gate ユーザの権限で以下のコマンドを実行する.

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

ここで投入したパスワードを用いてユーザ "gate" として保証人のユーザ登録承認 (https://new-itpass.scitec.kobe-u.ac.jp/cgi-bin/gate-user-accept.cgi) を用いる )を行う. その後, /home/gate/userdb/stable に承認されたユーザのデータベースファイルが移動していることを確認する.

アカウント生成

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

  • gate-daily は /etc/gate/gate.conf を参照するので, 起動前に gate.conf 内の 'old-itpass' を 'new-itpass' と書き換え. その後以下を実行する.

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

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

デーモンモードでの運用

ユーザ, ホストのデータベースをシステムに反映させるため, デーモンモードでの運用の設定を行う.

  • 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 wrapper によるセキュリティ強化

    gate ポートは, 登録サーバからのアクセスさえ受け付けられればその役目を果たす. そのため, TCP wrapper を使用してアクセスを登録サーバからのものに限定する.

    特に ITPASS サーバは 1 台での運用なので, 自身からのアクセスのみ許可する.

    • /etc/hosts.deny の編集

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

      gate-daily: ALL
    • /etc/hosts.allow の編集

      登録サーバ自身 (new) からのアクセスは許可するよう, /etc/hosts.allow に以下の一行を追加する.

      gate-daily: 127.0.0.1
  • 登録サーバ以外のホストからのアクセスが拒否されるか確認 以下では google.com で試した場合.

    root@new-itpass:/home/gate# tcpdmatch gate-daily google.com
    client:   hostname nrt04s01-in-f99.1e100.net
    client:   address  66.249.89.99
    server:   process  gate-daily
    matched:  /etc/hosts.deny line 21
    access:   denied
    
    client:   hostname nrt04s01-in-f104.1e100.net
    client:   address  66.249.89.104
    server:   process  gate-daily
    matched:  /etc/hosts.deny line 21
    access:   denied

    denied とあれば拒否されている.

    次に, 登録サーバ自身からのアクセスは許可されているか確認する.

    root@new-itpass:/home/gate# tcpdmatch gate-daily localhost
    client:   hostname localhost
    client:   address  127.0.0.1
    server:   process  gate-daily
    matched:  /etc/hosts.allow line 14
    access:   granted

    granted とあれば許可されている.

  • inetd を再起動

    # /etc/init.d/openbsd-inetd restart
    Restarting internet superserver: inetd.
  • 確認

    CGI から適当なユーザの申請および認証を行う. 認証して数分後に /etc 以下のシステムファイル(passwd ファイルと shadow ファイル)が更新されていることを確認する.

gate-toroku-system ソースの移動

ソースの名前を変更し, バックアップとして残す.

  • /home/gate/gate-toroku-system は必要ないが, バックアップとして以下のように名前を変更して残す
cp -r gate-toroku-system gate-toroku-system_2011-10-24
                                            ^^^^^^^^^^ インストールした日付

doc ディレクトリのシンボリックリンクを作成

/usr/local/gate/ にある doc ディレクトリのシンボリックリンクを/home/gate/public_html/ に作成する.

#cd /home/gate/public_html/
#ln -s /usr/local/gate/doc
# ls -l
root@new-itpass:/home/gate/public_html# ls -l
合計 64
lrwxrwxrwx 1 root root   19 2010-10-15 19:40 doc -> /usr/local/gate/doc

ezmlm を使う場合の設定

この作業は, ezmlm のインストール後に行うこと.

gate-db-to-ezmlm の設定

sudo になって /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';

変更後

$domainname='itpass.scitec.kobe-u.ac.jp';

$ezmlmlist='/usr/local/ezmlm/bin/ezmlm-list';
$ezmlmsub='/usr/local/ezmlm/bin/ezmlm-sub';
$ezmlmunsub='/usr/local/ezmlm/bin/ezmlm-unsub';

[ITPASSサーバ構築ドキュメント へ戻る]