[Memo2014][ITPASS] gate-toroku-system のインストールと設定
作業用アカウントの作成
gate-toroku-system 管理用アカウント: gate を作成した. ユーザ ID は 500 とした.
# adduser --uid 500 --disabled-password gate
登録の際, フルネームは「Administrator of gate-toroku-system」とした.
gate グループに gate 管理者を加えた.
gate 管理者は, [ITPASS2012]gate-toroku-systemの開発とメンテナンスに書かれている開発メンバーと, gate のインストールを行ったメンバー(ryohori, mmiyuki)とした.
必要なソフトウェアのインストール
gate に必要なパッケージをインストールした.
パッケージの確認
dpkg コマンドを用いて, 必要なパッケージがインストールされていることを確認した. 以下に示す実行例の "hoge" をパッケージ名に読み替えて実行した.
$ dpkg -l | grep hoge
- 必要なパッケージ: perl-suid, rsync, wget, htroff, cvs, libjcode-pm-perl, libcrypt-passwdmd5-perl, libdatetime-perl, libdatetime-format-strptime-perl
- perl-suid, htroff が存在しないと表示されたが, htroff は ika サーバの /home/murashin 以下に置いてあったものをコピーした.
gate ユーザ宛のメールを転送する
/home/gate/.qmail に管理者のメールアドレスを書き込んだ.
# vi /home/gate/.qmail &itpadmin
gate-toroku-system のソースの取得と展開
ika の /home/gate から gate-toroku-system のソース(gate-toroku-system.tar.gz) を tako の /home/gate にコピーし, 展開した. 展開は以下のコマンドで行える.
$ tar xvfz gate-toroku-system.tar.gz
設定ファイルの編集
gate.conf
ika の /etc/gate/ の下から gate.conf をコピーし /etc/gate/ の下に置いた. gate.conf 内の $DBSERVER を以下のように編集した.
$DBSERVER = “tako-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
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
実行ファイルへのパスの設定
インストールした gate-toroku-system の実行ファイル群へパスを通した.
マニュアルへのパスの設定
/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://tako-itpass.scitec.kobe-u.ac.jp/~gate/ にアクセスし, gate 登録システムのインデックスページが見えるか確認した.
- 上記のページからリンクされている個人申請(https://tako-itpass.scitec.kobe-u.ac.jp/cgi-bin/gate-user-apply.cgi) などに移動し, CGI が動作しているかチェックした.
ユーザの作成
root ログインの準備
以下の作業では ika から tako へ root ログインする必要がある. そのため, root ログイン用の鍵の生成・設置と root ログインの許可を行う.
鍵の生成と設置
root ログイン用の鍵を作成・設置する.
- ika に残った, 再構築前の tako の情報を削除
ika の /root/.ssh/known_hosts の中の tako に該当する行を削除する
ssh-keygen -F tako-itpsass.scitec.kobe-u.ac.jp
で何行目に該当すかが表示される
#Host tako-itpass.scitec.kobe-u.ac.jp found: Line 4 type RSA
と表示されたので4行目を削除した
- ika で 鍵を生成する
- 鍵の置き場とファイル名は, デフォルトの /root/.ssh/id_rsa とした
パスフレーズは空にする
ika-itpass# ssh-keygen -t rsa
公開鍵の設置
ika で作成した公開鍵 ika:/root/.ssh/id_rsa.pub を tako:/root/.ssh/authorized_keys にコピーする. ika:/root/.ssh/id_rsa.pub の内容を cat 表示し, メールで tako に送信する.
/root/.ssh/authorized_keys のパーミッションを変更した
tako-itpass# chmod 600 /root/.ssh/authorized_keys
authorized_keys に改行が残っていたので削除した
root ログインの許可
tako への root ログインの許可を設定する
# vi /etc/ssh/sshd_config PermitRootLogin yes : PasswordAuthentication no : UsePAM no
ssh デーモンを再起動する.
# /etc/init.d/ssh restart
ユーザデータベースのコピー
ika の /home/gate/userdb を tako の /home/gate/userdb にコピーする
まず, -n オプションを付けて rsync の動作チェックを行う.
ika-itpass# rsync -n -av -e ssh --delete /home/gate/userdb/ tako-itpass:/home/gate/userdb/
ここで一度うまくいかなかったのでもう一度 ssh-keygen -F コマンドで確認したところ, まだ構築前の tako の情報が残っており
#Host tako-itpass.scitec.kobe-u.ac.jp found: Line 3 type RSA
と表示されたので /root/.ssh/known_hosts の 3 行目を削除した. このあともう一度動作チェックを行ったところ問題なかった.
実際にコピーを行った.
ika-itpass# rsync -av -e ssh --delete /home/gate/userdb/ tako-itpass:/home/gate/userdb/
root ログインの設定を戻す
tako への root ログインを不許可に設定し直した
# vi /etc/ssh/sshd_config PermitRootLogin no : PasswordAuthentication no : UsePAM no
ssh デーモンを再起動する.
# /etc/init.d/ssh restart
/etc/shadow のコピー
- ika の /etc/shadow のうち UID 1000 ~ 29999 の gate-toroku-system で管理されるユーザーについて, そのアカウント名の行をコピーして tako の/etc/shadow のファイルに追加した. 各ユーザに対する uid は /etc/passwd に書かれているものを確認した.
最初の保証人ユーザ作成
- 個人申請
(https://tako-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内の 'ika-itpass' を 'tako-itpass' と書き換えた(二ヵ所)
その後以下を実行した
# perl /usr/local/gate/lib/gate-daily
- /etc/{passwd, group, shadow} に, 登録したユーザの情報が新たに書き込まれていることを確認した. また /home に /home/gate/userdb 以下に存在するユーザのディレクトリができていることを確認した.
bind の所有グループの変更
[ITPASS2012]bindのインストールと設定#編集したファイルのパーミッション設定 にあるように, bind 関連のファイルの所有グループを itpadmin に変更した.
root@tako:/usr/local/bind/etc# chgrp -R itpadmin .
/etc/aliases の変更
/etc/aliases の root に対応するユーザは, インストール時に作ったユーザになっているはずである. test という名前のユーザを作った場合は, 以下の行が存在するはずである.
vim/etc/alias root: test
これを itpadmin に書き換える.
root: itpadmin
設定を反映するため,
# 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 によるセキュリティ強化
そのため, TCP wrapper を使用してアクセスを登録サーバからのものに限定する.
ITPASS サーバは 1 台での運用なので, 自身からのアクセスのみ許可した.
/etc/hosts.deny の編集
まず, 全てのホストからの gate ポートへのアクセスを拒否するよう /etc/hosts.deny に以下の一行を追加した.
gate-daily: ALL
/etc/hosts.allow の編集
登録サーバ自身 (tako) からのアクセスは許可するよう, /etc/hosts.allow に以下の一行を追加する.
gate-daily: 127.0.0.1
登録サーバ以外のホストからのアクセスが拒否されるか確認する. 以下は google.com で試した場合.
root@tako-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@tako-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_2014-11-13
doc ディレクトリのシンボリックリンク作成
/usr/local/gate/ にある doc ディレクトリのシンボリックリンクを/home/gate/public_html/ に作成した.
# cd /home/gate/public_html/ # ln -s /usr/local/gate/doc # ls -l root@tako-itpass:/home/gate/public_html# ls -l 合計 64 lrwxrwxrwx 1 root root 19 2010-10-15 19:40 doc -> /usr/local/gate/doc
日々の開発・メンテナンスのための準備
必要なパッケージのインストール
以下のコマンドで, 開発やメンテナンスに必要なパッケージをインストールした.
# 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 でディレクトリ内の不要なドットファイルなども削除した.
# su gate $ cd gate-toroku-system $ rm -frv `find -name CVS`
文字コードを 1 種類に統一したいため, kcc で文字コードのチェックを行った.
$ 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
確認したところ問題なかった
CVS リポジトリの作成
# su gate $ umask 002 $ cd $ cvs -d /home/gate/cvsroot init
作成した.
グループ書き込み許可の設定
cvsroot 以下で作成されるファイル, ディレクトリのグループを gate にするため, cvsroot に s ビットを立て, 書き込み権限を与えた. 念のためにグループも gate に設定した.
$ chmod g+s cvsroot $ chmod g+w cvsroot $ chgrp gate cvsroot
CVSROOT, およびそれ以下の特定のファイルに関してグループの変更と書き込み 権限変更をおこなう.
CVSROOT ディレクトリ本体
グループを gate とし, グループに書き込み権限を与えた.
$ cd cvsroot $ chgrp gate CVSROOT $ chmod g+s CVSROOT $ chmod g+w CVSROOT
history, val-tags へグループ書き込み権限を与える
CVSROOT 以下にある history, val-tags にグループ書き込み権限を与えた.
$ 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 のとなっていることを確認した.
CVS リポジトリのカスタマイズ
<URL:http://www.gfd-dennou.org/library/cc-env/cvs/> を参考に, 以下の 作業を行った.
CVSROOT のチェックアウト
chikuwa4 に適当なディレクトリを作成し CVSROOT のチェックアウトを行った
# mkdir ~chikuwa4/cvs # cd ~chikuwa4/cvs # export CVSROOT=/home/gate/cvsroot # cvs checkout CVSROOT # cd CVSROOT
cvs リポジトリのカスタマイズ
commit をメール通知する設定
/CVSROOT/loginfo に以下の一行を追加した
DEFAULT (echo ""; id; echo %{sVv}; date; cat) | mail -s gate-toroku-system-commit gate@itpass.scitec.kobe-u.ac.jp
バイナリファイルを安全に登録するために
/CVSROOT/cvswrappers に以下の記述を加えた
# Treat Image and Archive and Data file as Binary Data *.gif -k 'b' *.GIF -k 'b' *.jpg -k 'b' *.JPG -k 'b' *.jpeg -k 'b' *.JPEG -k 'b' *.png -k 'b' *.PNG -k 'b' *.tif -k 'b' *.TIF -k 'b' *.tiff -k 'b' *.TIFF -k 'b' *.xpm -k 'b' *.XPM -k 'b' *.pbm -k 'b' *.PBM -k 'b' *.ico -k 'b' *.ICO -k 'b' *.eps -k 'b' *.EPS -k 'b' *.o -k 'b' *.O -k 'b' *.a -k 'b' *.A -k 'b' *.mod -k 'b' *.MOD -k 'b' *.nc -k 'b' *.NC -k 'b' *.obj -k 'b' *.OBJ -k 'b' *.ai -k 'b' *.AI -k 'b' *.psd -k 'b' *.PSD -k 'b' *.fla -k 'b' *.FLA -k 'b' *.swf -k 'b' *.SWF -k 'b' *.dvi -k 'b' *.DVI -k 'b' *.pdf -k 'b' *.PDF -k 'b' *.bz2 -k 'b' *.BZ2 -k 'b' *.gz -k 'b' *.GZ -k 'b' *.tar -k 'b' *.TAR -k 'b' *.tgz -k 'b' *.TGZ -k 'b' *.tar.gz -k 'b' *.TAR.GZ -k 'b' *.cab -k 'b' *.CAB -k 'b' *.lzh -k 'b' *.LZH -k 'b' *.zip -k 'b' *.ZIP -k 'b' *.sea -k 'b' *.SEA -k 'b' *.dat -k 'b' *.DAT -k 'b' *.ppt -k 'b' *.PPT -k 'b' *.doc -k 'b' *.DOC -k 'b' *.xls -k 'b' *.XLS -k 'b'
euc のファイルのみ登録するには
dennou サーバから kanjichecker.pl を入手し, 特定の文字コードのファイルのみをコミット可能にした
# wget http://www.gfd-dennou.org/library/cc-env/cvs/customize/euc-tools/kanjichecker.pl # cvs add kanjichecker.pl # cvs commit -m "Kanji code checker." kanjichecker.pl
CVSROOT/checkoutlist に以下の一行を追加する
kanjichecker.pl unable to check out / update kanjichecker.pl in CVSROOT
commit した
# cvs commit -m "Add kanjichecker.pl" checkoutlist
CVSROOT/commitinfo に以下のように追記する
DEFAULT perl $CVSROOT/CVSROOT/kanjichecker.pl euc %r/%p %s
commit メッセージを euc のみに dennou サーバからmsgchecker.pl を入手する
# wget http://www.gfd-dennou.org/library/cc-env/cvs/customize/euc-tools/msgchecker.pl # cvs add msgchecker.pl # cvs commit -m "log message code checker." msgchecker.pl
CVSROOT/checkoutlist に以下の一行を追加する
msgchecker.pl unable to check out / update msgchecker.pl in CVSROOT
commit した
# cvs commit -m "Add msgchecker.pl" checkoutlist
verifymsg に以下のように追記する
gate-toroku-system perl $CVSROOT/CVSROOT/msgchecker.pl euc %l DEFAULT perl $CVSROOT/CVSROOT/msgchecker.pl ASCII %l
なお, メール通知の際の宛先は ITPASS サーバの gate-toroku-system 開発グループ とし, ファイルの文字コードは EUC とした.
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='itpasss.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';
前回作業のミスの修正
/etc/gate/gate.conf にミスがあった
%DB_SHARE_HOSTS = ( 'ika-itpass.scitec.kobe-u.ac.jp','wheel:epaadmin' # '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' );
二行目の 'wheel:epaadm' を 'wheel:itpadmin'に修正した.
/etc/gate/gate-user.conf にミスがあった
$WHEELUSER = 'epaadmin';
の epaadmin を itpadmin に修正した
先日作成した CVSROOT を削除した(念のために昨日のログは残しておいた)
tako: # mv ~chikuwa4/cvs ~chikkuwa4/cvs.OLD # mv ~gate/ mv cvsroot cvsroot.OLD
tako への root ログインを許可に設定した
# vi /etc/ssh/sshd_config PermitRootLogin yes : PasswordAuthentication no : UsePAM no
ssh デーモンを再起動した
# /etc/init.d/ssh restart
rsync する
ika: rsync -n -av -e ssh --delete /home/gate/cvsroot/ tako-itpass:/home/gate/cvsroot/
tako への root ログインを不許可に設定した
# vi /etc/ssh/sshd_config PermitRootLogin no : PasswordAuthentication no : UsePAM no
ssh デーモンを再起動した.
# /etc/init.d/ssh restart
動作確認
予め動作確認を行い, 設定ファイルの修正を行う.
確認作業
ITPASS サーバユーザ登録システムのページから登録情報の更新をする.
htpasswd -d ~hogehoge/.gate hogehoge New password:
その後 /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 になれることを確認した.
$ su mmiyuki $ sudo -s # exit
Keyword(s):
References:[[ITPASS2014]2014年度サーバ構築ログ]