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

概要

神戸大学 地球惑星科学専攻/学科 ITPASS サーバのユーザ管理には gate-toroku-system (神戸 ITPASS サーバ用) を用いる. このソフトウェアは元々北大理学の EP計算機ネットワーク技術支援グループ で開発されたユーザ管理用ソフトウェアで, ITPASS サーバではこれを ITPASS サーバ用に修正を行って導入している (修正したものを以下では神戸版 gate と呼ぶ).

なお, 現在の gate-toroku-system 最新版は電脳サーバで管理されている. また神戸版 gate は, old の gate_toroku_system を当該年度の初版として cvs で管理している.

ここでは, 神戸版 gate のインストールおよび設定と, cvs 管理のための準備を行う.

なお, サーバ運用中の gate の開発やメンテナンスについて [ITPASS2012]gate-toroku-systemの開発とメンテナンス にも目を通しておくこと.

作業用アカウントの作成

  • gate-toroku-system 管理用アカウント: gate を作成する. ユーザ ID は 500 にする (1 -- 999 の間 (システムユーザ領域) であれば他の番号でもよい).

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

    登録の際, フルネームは「Administrator of gate-toroku-system」とする.

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

    gate 管理者は, [ITPASS2012]gate-toroku-systemの開発とメンテナンス に書かれている開発メンバーと, gate のインストールを行ったメンバーとする.

    以下は 2012 年度の例.

    # vigr
    
    gate:x:500:murashin,noda,daisuke,nobesaka
    
    # vigr -s
    
    gate:!:::murashin,noda,daisuke,nobesaka

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

gate に必要なパッケージをインストールする.

パッケージの確認

dpkg コマンドを用いて, 必要なパッケージがインストールされていることを確認する ([ITPASS2012]debianパッケージの引き継ぎ でインストール済みのはずである). 以下に示す実行例の "hoge" をパッケージ名に読み替えて実行する.

$ dpkg -l | grep hoge
  • 必要なパッケージ: perl-suid, rsync, wget, htroff, cvs, libjcode-pm-perl, libcrypt-passwdmd5-perl, libdatetime-perl, libdatetime-format-strptime-perl

全てインストールされていることを確認する.

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

パッケージが不足している場合

例えば,

# 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 の中の二行を元に戻し, update しておく.

# apt-get update

gate ユーザ宛のメールを転送する

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

# vi /home/gate/.qmail

&itpadmin

gate-toroku-system のソースの取得と展開

old の /home/gate から gate-toroku-system のソース (gate-toroku-system.tar.gz) を new の /home/gate にコピーし, 展開する.

展開は以下のコマンドで行える.

$ tar xvfz gate-toroku-system.tar.gz

設定ファイルの編集

gate.conf

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

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

また, %DB_SHARE_HOSTS が以下のようになっていることを確認する.

%DB_SHARE_HOSTS = (
                'ika-itpass.scitec.kobe-u.ac.jp','wheel:itpadmin'
#               'dennou-k.kugi.kyoto-u.ac.jp','wheel:dcstaff',
#               'dennou-h.ees.hokudai.ac.jp','wheel:dcstaff',
#               'dennou-q.geo.kyushu-u.ac.jp','wheel:dcstaff'
          );

gate-user.conf

$WHEELUSER が 'itpadmin' になっているか確認する.

$WHEELUSER = 'itpadmin';

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

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

マニュアルへのパスの設定

[ITPASS2012]パスの設定#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 が動作しているかチェックする.

ユーザの作成

root ログインの準備

以下の作業では old から new へ root ログインする必要がある. そのため, root ログイン用の鍵の生成・設置と root ログインの許可を行う.

鍵の生成と設置

マニュアル通りに進めば root ログイン用の鍵はこの段階で作成・設置するはずであるが, 構築作業の何らかの段階で既に鍵を設置している場合は 以下の手順の確認のみ行う.

  • old に残った, 再構築前の new の情報を削除

    • old の /root/.ssh/known_hosts の中の new に該当する行を削除する

    (何番目が new に該当するかは old から new へログインを試みたときのエラーメッセージを読めば分かる.)

  • old で 鍵を生成する
    • 鍵の置き場とファイル名は, デフォルトの /root/.ssh/id_dsa とした
    • パスフレーズは空にする

      old-itpass# ssh-keygen -t dsa
  • 公開鍵の設置

    old で作成した公開鍵 old:/root/.ssh/id_dsa.pub を new:/root/.ssh/authorized_keys にコピーする.

root ログインの許可

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

old の /home/gate/userdb を new の /home/gate/userdb にコピーする

  • まず, -n オプションを付けて rsync の動作チェックを行う.

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

    old-itpass# rsync -n -av --delete /home/gate/userdb/ new-itpass:/home/gate/userdb/
  • 実際にコピーを行う.

    old-itpass# rsync -av --delete /home/gate/userdb/ new-itpass:/home/gate/userdb/

root ログインの設定を戻す

new への root ログインを不許可に設定し直す

PermitRootLogin no

/etc/shadow のコピー

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

/home 領域を old からコピーする際 (後日に行う) にこの理由によって大量のメールが送信されないよう, 先に 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) にアクセスし, ユーザ登録申請を行う (テスト用なので適当なユーザーでよい)
    • 保証人は先に作ったユーザ "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 の中にあるデータベースファイルをシステムに反映させるために, root 権限で /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 を付加した名前のバックアップファイルが生成される.

  • /etc/{passwd, group, shadow} に, 登録したユーザの情報が新たに書き込まれていることを確認する. また /home に /home/gate/userdb 以下に存在するユーザのディレクトリができていることを確認する.

bind の所有グループの変更

[ITPASS2012]bindのインストールと設定#編集したファイルのパーミッション設定 にあるように, bind 関連のファイルの所有グループを itpadmin に変更する.

/etc/aliases の変更

/etc/aliases の root に対応するユーザは, インストール時に作ったユーザになっているはずである. test という名前のユーザを作った場合は, 以下の行が存在するはずである.

root: test

これを itpadmin に書き換える.

root: itpadmin

設定を反映するため,

# newaliases

を実行する. ここで許可がないというメッセージが出るかもしれない. /usr/bin/newaliases は /usr/sbin/exim4 のシンボリックリンクであり, exim4 に実行権限が付与されていないためである. ここでは MTA に exim4 ではなく qmail を使うため, 実行権限を付与する必要はない. /etc/aliases を書き換えると newaliases コマンドを実行するのは 一般的な操作であるため, ここではあえてマニュアルに残しておく.

デーモンモードでの運用

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

  • 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 ソースの移動

ソースのバックアップを残す.

  • 以下のように名前を変更してコピーしておく
cp -r gate-toroku-system gate-toroku-system_YYYY-MM-DD
                                           ^^^^^^^^^^^ インストールした日付

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

日々の開発・メンテナンスのための準備

必要なパッケージのインストール

以下のコマンドで, 開発やメンテナンスに必要なパッケージをインストールする.

以下の perl 関連のパッケージ名は Debian GNU/Linux 6.0 (コードネーム squeeze) の場合のものであり, Debian のバージョンによって変更される可能性が高いので注意すること.

# apt-get install cvs
# apt-get install kcc
# apt-get install nkf
# apt-get install libjcode-pm-perl
# apt-get install libcrypt-passwdmd5-perl
# apt-get install libdatetime-perl
# apt-get install libdatetime-format-strptime-perl

余分なファイルの削除, 文字コードの修正

  • 新たに cvsroot を作成するために, gate-toroku-system 内の余計なディレクトリやファイルを削除する.
    • ls -aR でディレクトリ内のファイルを眺め, 不要なドットファイルなども削除しておく.

      $ cd gate-toroku-system
      $ rm -frv `find -name CVS`
  • 文字コードを 1 種類に統一したいため, kcc で文字コードのチェックを行う.
    • ここでは EUC に統一することを考えているので, 異なるものがある場合には nkf で変更すること.

      $ kcc -c `find -name '*'`
       :
      ./make-smtppasswd/Makefile:     ASCII
      ./make-smtppasswd/gate-make-smtppasswd.PL:      7-bit JIS [ESC$B, ESC(B]
      ./user-status/gate-user-status.PL:      EUC
      ./user-status/Makefile: ASCII
      
      $ nkf -e -Lu -d ./make-smtppasswd/gate-make-smtppasswd.PL

CVS リポジトリの作成

# su gate
$ umask 002
$ cd
$ cvs -d /home/gate/cvsroot init

作成する.

グループ書き込み許可の設定

上記で umask などの設定をおこなったものの, s ビットを立てるなど, パーミッションの設定が必要となる. また cvs init コマンドで作成した ディレクトリやファイルの中にはグループ書き込み権限が無いものもあるので, 以下で設定する.

["リポジトリ cvsroot パーミッションの設定"]

cvsroot 以下で作成されるファイル, ディレクトリのグループを gate にするため, cvsroot に s ビットを立て, 書き込み権限を与える. 念のためにグループも gate に設定する.

$ chmod g+s cvsroot
$ chmod g+w cvsroot
$ chgrp gate cvsroot
["管理用ディレクトリ CVSROOT 内のパーミッションの設定"]

cvsroot が作成されれば, そのリポジトリに関する CVS の動作を制御する CVSROOT ディレクトリも作成されているはずである.

このディレクトリ, およびそれ以下の特定のファイルに関してグループの変更と書き込み権限変更をおこなう.

  • CVSROOT ディレクトリ本体

    グループを gate とし, グループに書き込み権限を与える. (これは少しアンセキュアな方針かもしれない. よりセキュアな方法として, 代表的な管理者 1 人にのみ書き込み権限を与えるという方針もあり得るだろう).

    $ cd cvsroot
    $ chgrp gate CVSROOT
    $ chmod g+s CVSROOT
    $ chmod g+w CVSROOT
  • history, val-tags へグループ書き込み権限を与える

    CVSROOT 以下にある history, val-tags にグループ書き込み権限を与える. (グループは既に gate であると仮定している).

    なお, history とはこのリポジトリ以下のプロジェクトに対して行なわれた checkout, commit, rtag, update, release を記録しているファイルであり, cvs history コマンドで見ることが出来る. (動作の詳細は cvs history -x コマンドを参照のこと). ここではグループ gate で開発することを念頭に置くため, グループに書き込み権限を与える.

    $ cd CVSROOT
    $ chmod g+w history

val-tags は検索を高速化するために, 有効なタグ名をキャッシュしているファイルである. GATE プロジェクトではタグも使用するので, これにもグループ書き込み権限を与える.

$ chmod g+w val-tags

gate-toroku-system プロジェクト開始

  • gate-toroku-system ディレクトリ内に移動し, cvs import でプロジェクトを開始する.

    # su gate
    $ umask 002
    $ cd gate-toroku-system
    $ export CVSROOT=/home/gate/cvsroot
    
    $ cvs import -m "gate-toroku-system" gate-toroku-system gate Initial

プロジェクトのパーミッションの確認

プロジェクトのディレクトリのパーミッションを確認する.

$ ls -l /home/gate/cvsroot
drwxrwsr-x  3 gate gate 4096 2007-08-15 17:18 CVSROOT
drwxrwsr-x 39 gate gate 4096 2007-08-15 17:44 gate-toroku-system

上記のようにグループが gate で権限が rws の場合は問題ない. もしそうでないのなら, 以下のコマンドでグループとパーミッションを変更すること.

$ chgrp gate gate-toroku-system
$ chmod g+s gate-toroku-system
$ chmod g+w gate-toroku-system

なお, もしも gate-toroku-system が上記のようなパーミッションになっていなかった場合, それよりも下層ディレクトリのパーミッションもそれと同様な 可能性がある. それらに関してもグループとパーミッションを設定すること. 調べるには以下のコマンドが便利であろう.

$ cd /home/gate/cvsroot/gate-toroku-system
$ ls -dl `find -type d`

プロジェクト以下にある「ファイル」に関しては (グループは gate である必要があるが) パーミッションは -r--r--r-- で問題ない. cvs コマンドを介せば, 正しく commit, add, remove などが可能である.

CVS リポジトリのカスタマイズ

<URL:http://www.gfd-dennou.org/library/cc-env/cvs/> を参考に, 以下の作業を行う. 作業手順に関しては以下を参照のこと.

  • cvs リポジトリのカスタマイズ
    • commit をメール通知する設定
    • バイナリファイルを安全に登録するために
    • euc のファイルのみ登録するには
    • commit メッセージを euc のみに

なお, メール通知の際の宛先は ITPASS サーバの gate-toroku-system 開発グループ とし, ファイルの文字コードは EUC とする.

gate-db-to-ezmlm の設定

この作業は, ezmlm がインストールされているのを確認した上で行う.

root になりかわり, /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 サーバユーザ登録システム は, 情報の更新時に 設定ファイルである gate.conf, gate-user.conf などをもとに /etc/sudoers を書き換える. 設定ファイルに間違いがあると itpadmin グループ所属ユーザでさえ root になれなくなる.

問題の詳細については [Memo2010][ITPASS] gate 設定ファイル修正ログ を参照されたい.

本稼動時にこれが起こるのを防ぐため, 予め動作確認を行い, 設定ファイルの修正を行う.

確認作業

設定が間違っている場合スーパーユーザーになれなくなるため, root のパスワードを知っている管理者と共に作業すること.

まず ITPASS サーバユーザ登録システム のページから登録情報の更新をする.

その後 /var/log/syslog を見て gate が作動したことを確認する. 更新をした時刻に以下のような行があるはずである.

Mar 25 17:20:00 ika-itpass gate-daily[15704]: connect from 127.0.0.1 (127.0.0.1)

また, 同時刻に sudoers ファイルが書き換えられているか確認する.

$ ls -la /etc/sudoers
-r--r----- 1 root root 490 2012-03-25 17:20 /etc/sudoers

sudoers ファイルに以下の行があることを確認する.

$ sudo less /etc/sudoers
  (省略)
%itpadmin       ALL=(ALL) ALL
  (省略)

念のため, itpadmin グループのユーザが 実際に root になれることを確認する. もし失敗する場合は 設定ファイルの編集 の部分の 設定を見直すこと.

参考文献

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