[ITPASS2014] gate-toroku-system のインストールと設定
- 概要
- 作業用アカウントの作成
- 必要なソフトウェアのインストール
- gate ユーザ宛のメールを転送する
- gate-toroku-system のソースの取得と展開
- 設定ファイルの編集
- gate-toroku-system CGI を動作させるための apache2 設定
- make とインストール
- 実行ファイルへのパスの設定
- マニュアルへのパスの設定
- Web インターフェースのチェック
- ユーザの作成
- アカウント生成
- bind の所有グループの変更
- /etc/aliases の変更
- デーモンモードでの運用
- gate-toroku-system ソースの移動
- doc ディレクトリのシンボリックリンク作成
- gate-db-to-ezmlm の設定
- 動作確認
[ITPASSサーバ構築・運用ドキュメント へ戻る]
概要
神戸大学 地球惑星科学専攻/学科 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の開発とメンテナンス, [ITPASS2014]日々の開発・メンテナンスのための準備? にも目を通しておくこと.
作業用アカウントの作成
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 のインストールを行ったメンバーとする.
以下は 2014 年度の例
# vigr gate:x:500:murashin,noda,daisuke,nobesaka,mmiyuki,ryohori # vigr -s gate:!::murashin,noda,daisuke,nobesaka,mmiyuki,ryohori
必要なソフトウェアのインストール
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
- htroff が存在しないと表示された場合は, old サーバの /home/murashin 以下に置いてあるものをコピーする.
すべてインストールされていることを確認する.
実行ファイルや 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
同様にして 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
実行ファイルや 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:/ 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 が動作しているかチェックする.
ユーザの作成
root ログインの準備
以下の作業では old から new へ root ログインする必要がある. そのため, root ログイン用の鍵の生成・設置と root ログインの許可を行う.
鍵の生成と設置
root ログイン用の鍵を作成・設置する.
マニュアル通りに進めば root ログイン用の鍵はこの段階で作成・設置するはずであるが, 構築作業の何らかの段階で既に鍵を設置している場合は 以下の手順の確認のみ行う.
- old に残った, 再構築前の new の情報を削除
old の /root/.ssh/known_hosts の中の new に該当する行を削除する
ssh-keygen -F new-itpsass.scitec.kobe-u.ac.jp
で何行目に該当するかが表示される
#Host new-itpass.scitec.kobe-u.ac.jp found: Line 4 type RSA
ここで複数の鍵が残っている場合があるので何度か ssh-keygen -F を実行し, 鍵が残っていないか確認する. 残っている場合は削除する.
- 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 デーモンを再起動する.
# /etc/init.d/ssh restart
ユーザデータベースのコピー
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 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@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='/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 設定ファイル修正ログ を参照されたい.
本稼動時にこれが起こるのを防ぐため, 予め動作確認を行い, 設定ファイルの修正を行う.
確認作業
ITPASS サーバユーザ登録システムのページから登録情報の更新をする.
その後 /var/log/syslog を見て gate が作動したことを確認する. 更新をした時刻に以下のような行があるはずである.
Nov 17 15:04:17 tako-itpass gate-daily[20445]: 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 になれることを確認する.
もし失敗する場合は 設定ファイルの編集 の部分の 設定を見直すこと.
すべての作業が完了したらテストユーザのアカウントを削除しておく.
参考文献
[ITPASSサーバ構築・運用ドキュメント へ戻る]
Keyword(s):
References:[[ITPASS2014] ezmlm のインストールと設定] [[ITPASS2014]2014年度サーバ構築ログ] [[Memo2015][ITPASS] ezmlm のインストールと設定] [[Memo2015][ITPASS]ezmlm のインストールと設定]