IT pass HikiWiki - [ITPASS2015]gate-toroku-system のインストールと設定 Diff

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

{{toc}}

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

= 概要

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

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

ここでは, 神戸版 gate のインストールおよび設定を行う.
cvs 管理のための準備は((<[ITPASS2014] gate-toroku-system の開発・メンテナンスのための準備>))を参照.

なお, サーバ運用中の 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 管理者は, ((<[ITPASS2014]gate-toroku-systemの開発とメンテナンス>))に書かれている開発メンバーと, gate のインストールを行ったメンバーとした.

  以下は 2015 年度の例
  
    # vigr
    
    gate:x:500:murashin,noda,daisuke,nobesaka,mmiyuki,abandou
    
    # vigr -s
    
    gate:!::murashin,noda,daisuke,nobesaka,mmiyuki,abandou

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

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

== パッケージの確認

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

      # dpkg -l | grep hoge

* 必要なパッケージ: rsync, wget, htroff, cvs, libjcode-pm-perl, libcrypt-passwdmd5-perl, libdatetime-perl, libdatetime-format-strptime-perl
  * インストールされていないパッケージがあったら apt-get install でインストールを行う
    * 2015 年度は libjcode-pm-perl, libcrypt-passwdmd5-perl, libdatetime-perl, libdatetime-format-strptime-perl が該当した

     # apt-get install hoge
    
* htroff は apt-get でインストールできないため, ((<地球流体電脳倶楽部|URL:http://www.gfd-dennou.org/arch/cc-env/htroff/SIGEN.htm>))から以下の4つのファイルを取得してインストールする.(バージョンは異なる場合がある)

   htroff_2.0-1.dsc
   htroff_2.0-1.tar.gz
   htroff_2.0-1_all.deb
   htroff_2.0-1_i386.changes

* インストールを行う
  
   dpkg -i htroff_2.0-1_all.deb


= 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

同様にして 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 で下記の記述があることを確認する

    </IfModule>

    <IfModule cgid_module>
    #
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    #
    Scriptsock cgisock  # <-- この行のコメントアウトを解除し, 有効にする
    </IfModule>

    #
    # "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
    # CGI directory exists, if you have that configured.
    #
    <Directory "/usr/local/apache2/cgi-bin/">
        AllowOverride AuthConfig Limit
        Options +ExecCGI +FollowSymLinks +IncludesNoExec
        Require all granted
    </Directory>

  * さらに, /usr/local/apache2/conf/httpd.conf において, 以下の行を追記する.

     LoadModule cgid_module modules/mod_cgi.so


= make とインストール

make とインストールを行った.

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

  $ exit

  $ sudo -s
  # cd ~gate/gate-toroku-system
  # make install
  
* インストールに失敗する場合は /usr/local/gate/bin が作成されているか確認し, なければ作成してからもう一度 make とインストールを行うとよい


実行ファイルや 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-db-to-sudoers の編集

* /usr/local/gate/sbin/gate-db-to-sudoers に Defaults で始まる 4 行を追加し, 以下のようにする.

# This is /etc/sudoers file, generated by gate-db-to-sudoers.
# If you are to edit this file, do not edit it directly.

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        mailfrom=root

root   ALL=(ALL) ALL

* visudo を実行して上と同様に書き替える.


= 実行ファイルへのパスの設定

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

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

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

((<[ITPASS2014]パスの設定#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 が動作しているかチェックする.
  * 「サーバ 版 gate-toroku-system について」のリンクが切れているが後ほどリンクを作成するので問題ない

= ユーザの作成

== root ログインの準備

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

=== 鍵の生成と設置

root ログイン用の鍵を作成・設置した.

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

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

  * old の /root/.ssh/known_hosts の中の new の情報を削除する

     # ssh-keygen -R new-itpsass.scitec.kobe-u.ac.jp

    で削除する.


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

      old-itpass# ssh-keygen -t rsa

* 公開鍵の設置

  old で作成した公開鍵 old:/root/.ssh/id_rsa.pub を new:/root/.ssh/authorized_keys にコピーする.
  old:/root/.ssh/id_rsa.pub の内容を cat 表示し, メールで new に送信する.
  このとき改行などが入らないように注意すること.

  /root/.ssh/authorized_keys のパーミッションを変更する
  
    new-itpass# chmod 600 /root/.ssh/authorized_keys


=== root ログインの許可

* ((<[ITPASS2014]sshのインストールと設定#パスワード認証の拒否と root ログインの拒否設定>)) を参考に ((*new への*)) root ログインの許可を設定する


    # vi /etc/ssh/sshd_config

    PermitRootLogin yes
            :
    PasswordAuthentication no
            :
    UsePAM no


  ssh デーモンを再起動する.

    # systemstl restart ssh


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

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

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

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


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


* 実際にコピーを行う.

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

== root ログインの設定を戻す

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

  # vi /etc/ssh/sshd_config

  PermitRootLogin no
          :
  PasswordAuthentication no
          :
  UsePAM no


ssh デーモンを再起動する.

  # /etc/init.d/ssh restart

== /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 -cd ~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} に, 登録したユーザの情報が新たに書き込まれていることを確認する.
  また /home に /home/gate/userdb 以下に存在するユーザのディレクトリができていることを確認する.


= bind の所有グループの変更

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

  root@new:/usr/local/bind/etc# chgrp -R 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 kix06s02-in-f14.1e100.net
    client:   address  216.58.197.14
    server:   process  gate-daily
    access:   denied
    
    client:   hostname del01s06-in-x07.1e100.net
    client:   address  2404:6800:4002:802::1007
    server:   process  gate-daily
    access:   denied

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

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

    root@new-itpass:/home/gate# tcpdmatch gate-daily localhost
    client:   hostname localhost
    client:   address  ::1
    server:   process  gate-daily
    access:   denied
    
    client:   hostname localhost
    client:   address  127.0.0.1
    server:   process  gate-daily
    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@ner-itpass:/home/gate/public_html# ls -l
合計 64
lrwxrwxrwx 1 root root   19 2010-10-15 19:40 doc -> /usr/local/gate/doc


= gate-db-to-ezmlm の設定

root になりかわり, /usr/local/gate/bin/gate-db-to-ezmlm の「0. 実行ファイル, ドメインの指定」の項目を以下のように変更する.

変更前

$domainname='gfd-dennou.org';

$ezmlmlist='$EZMLMDIR/ezmlm-list';
$ezmlmsub='$EZMLMDIR/ezmlm-sub';
$ezmlmunsub='$EZMLMDIR/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 サーバユーザ登録システム|URL:https://itpass.scitec.kobe-u.ac.jp/~gate/>))
は, 情報の更新時に
設定ファイルである gate.conf, gate-user.conf などをもとに
/etc/sudoers を書き換える.
設定ファイルに間違いがあると
itpadmin グループ所属ユーザでさえ root になれなくなる.

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

本稼動時にこれが起こるのを防ぐため,
予め動作確認を行い, 設定ファイルの修正を行う.
* 仕様なのかインストール前に設定ファイルを正しく設定しても, インストール後に設定ファイルが書き換わってしまうようである
  * ((<[Memo2010][ITPASS] gate 設定ファイル修正ログ>))にそって設定をし直す
== 確認作業

((<ITPASS サーバユーザ登録システム|URL:https://new-itpass.scitec.kobe-
u.ac.jp/~gate/>))のページから登録情報の更新する.

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

ov  4 20:55:25 tako-itpass gate-daily[22234]: connect from 127.0.0.1 (127.0.0.1)

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

  $ ls -la /etc/sudoers
  -r--r----- 1 root root 710 11月 17 15:04 /etc/sudoers

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

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

念のため, itpadmin グループのユーザが実際に root になれることを確認する.

もし失敗する場合は ((<URL:#設定ファイルの編集>)) の部分の
設定を見直すこと.

すべての作業が完了したらテストユーザのアカウントを削除すること.

== 参考文献

* ((<[ITPASS2012]gate-toroku-systemのインストールと設定>))
* ((<man gate-conf(5)|URL:https://itpass.scitec.kobe-u.ac.jp/~gate/doc/gate-conf.htm>))



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