EP サーバへの gate のインストール


  1. はじめに
  2. サーバ入れ換え前の作業
  3. サーバ入れ換え時の作業

[1]. はじめに

このドキュメントは Mail サーバへ gate-toroku-system をインストールする際の手順を書いたものである. サーバ再構築の際にサーバ機の入れ換えを行うことを前提にしている. (サーバ機の入れ換えとはネットワークパラメータを付けかえるということを意味している) また, EP サーバ再構築時の gate 登録システムのインストール手引き を参考にしている.

[2]. サーバ入れ換え前の作業

[2-1]. 必要なパッケージのインストール

gate-toroku-system をインストールするために以下のパッケージが必要になるのでインストールしておく.

# apt install perl
# apt install libperl4-corelibs-perl

# apt install libjcode-pm-perl
# apt install libjcode-perl
# apt install inetutils-inetd

htroff_2.0-1 を取得して展開する.

# wget http://www.gfd-dennou.org/arch/cc-env/htroff/htroff_2.0-1_all.deb
# dpkg -i htroff_2.0-1_all.deb

[2-2]. 作業用アカウントの作成

作業用アカウント gate を作成する.ユーザ ID は 1 -- 999 の間(システムユーザ領域)に設定する.

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

この時, フルネームは「Administrator of gate-toroku-system」とした.

gate グループに gate 管理者を加える. http://www.ep.sci.hokudai.ac.jp/~gate/hyousi.html のメンバーを参照のこと. とのことだが,2011 年から更新されていないため, とりあえず netcom の住民を追加した.

# vim /etc/group

今回は以下のようであった.

gate:x:500:keikei,momoko,seiko,kamata,msato

[2-3]. gate ユーザへのメールの転送

mail サーバの /home/gate/.qmail に gate グループのユーザアカウントを記入する.

/home/gate/.qmail を編集する.

# su gate
gate@usuzumi:$ vim ~gate/.qmail

以下を記入する.

&keikei
&momoko
&seiko
&kamata
&msato

gate@usuzumi:$ chmod 600 /home/gate/.qmail

[2-4]. ssh のノンパスワードログインに関する設定

昨年度のドキュメントにはホストベース認証 をすると書いてあるのに, 実際に grey で確認すると, gate@orange と gate@grey で公開鍵認証をしている ようだった. 正確には,ホストベース認証を試みたが失敗し, しかたなく公開鍵認証をする,という流れが auth.log に 出ていた.
これにはいくつか理由がある. まず,sshd_config で ssh-rsa の鍵が許可されて いないこと. そして,orange の逆引きに失敗していること.

root@grey:# vim /etc/ssh/sshd_config

# 以下を追記
HostbasedAcceptedAlgorithms +ssh-rsa
UseDNS yes

このように書けばホストベース認証は実現できる. だが,おそらく現在の ep サーバ群は (ホストベース認証の つもりが) 公開鍵認証で正常に動いており, またセキュリティ面を考えてもホストベース認証より 公開鍵認証が優れていると思われるため, 今後は明確に公開鍵認証を目指していくものとする.

ドキュメントを書き換え,公開鍵認証のための設定を していく. gate@orange と gate@usuzumi のみのやりとりであれば 問題ないはずである.

[2-4-1] sshd_config 書き換え

.shorts 認証のために書き換えていた sshd_config を 戻す.公開鍵認証はデフォルトで有効である.

# vim /etc/ssh/sshd_config

IgnoreRhosts no
HostbasedAuthentication yes

上記の赤字部分を以下のように変更する.

IgnoreRhosts yes
HostbasedAuthentication no

ファイル編集後, ssh を再起動する.

# systemctl restart ssh

[2-4-2]. 公開鍵を新たに作り直す

usuzumi で行う作業

gate@usuzumi の公開鍵を作成する.

gate@usuzumi:~$ mkdir ~/.ssh
gate@usuzumi:~$ chmod 700 ~/.ssh
gate@usuzumi:~$ cd ~/.ssh
gate@usuzumi:~/.ssh$ ssh-keygen -t ed25519 -f ed25519_usuzumi

鍵のタイプは ed25519,鍵の名前は ed25519_usuzumi に した. パスフレーズは設定していない. これを gate@orange に置く.

gate@usuzumi:~/.ssh$ sftp hoge@orange.ep.sci.hokudai.ac.jp

# hoge はメール管理者のアカウント名.

sftp> put ed25519_usuzumi.pub
sftp> exit

また,公開鍵認証で使う鍵を config ファイルで 設定しておく.

gate@usuzumi:~/.ssh$ vim config

Host orange.ep.sci.hokudai.ac.jp
        IdentityFile /home/gate/.ssh/ed25519_usuzumi
ここから orange での作業.
www サーバ (orange) で行う作業

以下の作業は www 以外の管理者では行うことができない.よって, gate 管理者グループの人 (もしくは www 管理者) に以下の作業を行ってもらう.

root@orange:# cat ~hoge/ed25519_usuzumi.pub >> ~gate/.ssh/authorized_keys

# 新たに authorized_keys を作成する場合は,所有者とパーミッションを gate,600 に変えること

root@orange:# chown gate:gate ed25519_usuzumi.pub
root@orange:# mv ~hoge/ed25519_usuzumi.pub ~gate/.ssh

これで usuzumi -> orange の公開鍵認証が可能になった. 続いて逆方向の公開鍵認証も設定していこう.

gate@usuzumi:$ sftp orange.ep.sci.hokudai.ac.jp

# 正しく設定できていれば,パスワードの入力を求められずにログインできるはず

sftp> get .ssh/id_ed25519.pub
sftp> exit

gate@usuzumi:$ cat id_ed25519.pub >> ~/.ssh/authorized_keys

orange から usuzumi にユーザ gate でログインしてみて, パスワードを求められてしまうときは .ssh/config を usuzumi と同じように orange にも 作って対処すること.

以上で, サーバ入れ換え前の ssh のノンパスワードログインに関する設定は終了である.

予備機と本務機の入れ換え後に www サーバ (orange) の .ssh/known_hosts 内のホスト名を予備機名から本務機名に変更する必要がある. それに関しては[3-1]. 公開鍵作り直しで述べる.

ここから先の作業は gate-toroku-system の修正後に なるであろう ...

[2-5]. shadow ファイルの一部をコピー

この作業はgate を試しに動かすために行う, 途中で password を変えた人がいるかもしれないので入れ替え当日も同じ作業を行う.

旧サーバの /etc/shadow ファイルのユーザ部分 (/etc/passwd の UID 1000 - 29999のユーザ. つまり, gate から下のユーザ) のみを新サーバの /etc/shadow に張り付ける作業を行う.

grey から /etc/shadow を持ってくる(途中でhogeのホーム領域に作った shadowkari は後でしっかり削除しておく).

mondo1@usuzumi:$ ssh -l hoge grey.ep.sci.hokudai.ac.jp
hoge@grey:$ sudo cp /etc/shadow ~/shadowkari
hoge@grey:$ exit
mondo1@usuzumi:$ scp hoge@grey.ep.sci.hokudai.ac.jp:~hoge/shadowkari ~/

shadowkari の中の grey の /etc/passwd での UID 1000 - 29999のユーザ(つまり, gate から下のユーザ)情報を usuzumi の /etc/shadow に追加する.




root@usuzumi:# vipw -s

[2-6]. パッケージの取得と展開

[2-6-1]. パッケージの取得

www.ep.sci.hokudai.ac.jp からインストール中のホストに /home/gate/gate-toroku-system.tar.gz をコピーする. コピー先のディレクトリは /home/gate とする.

mondo1@usuzumi:$ sudo -u gate -s -H
gate@usuzumi:$ cd /home/gate
gate@usuzumi:$ scp hoge@orange.ep.sci.hokudai.ac.jp:/home/gate/gate-arch/gate-toroku-system_2018_05_10.tgz ./

ここで hoge のところは自分のユーザアカウントを入れる. hogehoge@ を省略すると gate ユーザのパスワードを聞かれてしまうので注意すること.

[2-6-2]. パッケージの展開

コピーして来た gate-toroku-system_2018_05_10.tgz を展開する.

gate@usuzumi:~$ tar xvfz gate-toroku-system_2018_05_10.tgz 

作成された gate-toroku-system ディレクトリに移動.

gate@usuzumi:$ cd gate-toroku-system_2018_05_10 

[2-6-3]. パッケージの設定

sango から gate.conf をコピーする.

gate@usuzumi:~/gate-toroku-system$ wget http://www.ep.sci.hokudai.ac.jp/~epwww/dvlop/saikochiku/gate.conf
gate@usuzumi:~/gate-toroku-system$ cp gate.conf ~gate/gate-toroku-system_2018_05_10 /include/

[2-6-4]. パッケージのインストール

Config.mk の生成

gate@usuzumi:~/gate-toroku-system_2018_05_10 $ perl ./config.pl

make によるコンパイル

gate@usuzumi:~/gate-toroku-system_2018_05_10 $ make

ほんとうにインストールする

gate@usuzumi:$ exit  (一般ユーザに戻る) 
mondo1@usuzumi:$ sudo -s   (root ユーザになる) 
# cd /home/gate/gate-toroku-system
# cp ./include/gate.conf /etc/gate.conf
# make install

インストール終了後, プログラムファイル (gate-ip-accept 等)が /usr/local/bin, /usr/local/sbin, /usr/local/lib/gate にインストールされていることを確認する. また, /etc/passwd, /etc/shadow, /etc/group, /etc/sudoers が /ETC に存在していることを確認する.

mondo1@usuzumi:$ ls /usr/local/bin/gate-* 
mondo1@usuzumi:$ ls /usr/local/sbin/gate-*
mondo1@usuzumi:$ sudo -s
# lv /ETC/shadow

[2-7]. デーモンの設定

[2-7-1]. デーモンモードで起動するための確認

デーモンモードで起動するため /etc/gate.conf での確認

# less /etc/gate.conf | grep "USE_DAEMON"

以下のように表示されればよい.

$USE_DAEMON = 1 ;

[2-7-2]. gate-toroku-system 用のポートの作成

/etc/inetd.conf を編集する

# vim /etc/inetd.conf

以下の一行を追加

gate stream tcp nowait root /usr/sbin/tcpd /usr/local/lib/gate/gate-daily -N 

gate 用に 8888 番 ポートを割り当てる. /etc/services を編集する.

# vim /etc/services

以下の行を追加する (空行はスペースキーではなく tab キーで).

gate   8888/tcp            # gate-toroku-system

inetd を再起動する.

# service inetutils-inetd restart

[2-7-3]. TCPWrapper によるセキュリティ強化

gate のポートには登録サーバである orange 以外のホストはアクセスできないようにする. /etc/hosts.deny を以下のように編集して全てのホストに対して gate ポートへのアクセスを禁止する.

# vim /etc/hosts.deny
gate-daily: ALL [改行]

/etc/hosts.allow を編集する.

# vim /etc/hosts.allow

orange に対して gate ポートへのアクセスを許可する.

gate-daily: orange.ep.sci.hokudai.ac.jp [改行]

[2-7-4]. アクセスの確認

以下のコマンドで確認する

# tcpdmatch gate-daily grey.ep.sci.hokudai.ac.jp

以下のように表示されればよい.

access: denied

以下も打つ.

# tcpdmatch gate-daily orange.ep.sci.hokudai.ac.jp

以下のように表示されればよい

access: granted

[2-8]. 安全の確保

本格運用を開始するにあたり万一の場合に備え以下の作業を行う.

[2-8-1]. 重要ファイルのバックアップ

/etc/passwd, /etc/shadow, /etc/group, /etc/sudoers ファイルのバックアップをホームディレクトリ以下に作成しておく.
※pr オプションを付けるとファイルの所有者・グループを保ったままコピーできる

# mkdir ~mondo7/bak
# cp -pr /etc/passwd ~mondo7/bak/
# cp -pr /etc/shadow ~mondo7/bak/
# cp -pr /etc/group ~mondo7/bak/
# cp -pr /etc/sudoers ~mondo7/bak/

コピーしたファイルのパーミッションを設定して外部から見れないようにする.

# chmod 400 ~mondo7/bak/*

[2-9]. 動作確認

確認のために gate.conf を編集する

# vim /etc/gate.conf

$DEBUG_CONFIG = 1 を 0に書き換える

$DEBUG_CONFIG = 0

www サーバ (orange) から usuzumi の gate ポートに接続する.

mondo1@usuzumi:$ ssh -l hoge orange.ep.sci.hokudai.ac.jp
hoge@orange:$ telnet silver.ep.sci.hokudai.ac.jp 8888

正常に接続できたかを確認するには /etc/passwd, /etc/shadow などのファイルのタイムスタンプを確認する.

hoge@orange:$ exit
mondo1@usuzumi:$ date (現在時刻の確認)
mondo1@usuzumi:$ ls -l /etc/passwd /etc/shadow

/etc/passwd と /etc/shadow の更新時間が date の時間になっていればよい.

また, /etc/passwd の中身がユーザ ID の順番に並び変えられていればよい.

安全のためにデバッグモードに直しておく

# vim /etc/gate.conf

$DEBUG_CONFIG = 0 を 1 に書き換える

$DEBUG_CONFIG = 1

[3]. サーバ入れ換え時の作業

[3-1]. 公開鍵作り直し

以下の作業も www 以外の管理者では行うことができない.よって, gate 管理者グループの人 (もしくは www 管理者) に以下の作業を行ってもらう.

サーバを入れ換えたため www サーバ (orange) 内の .ssh/known_hosts 内のホスト名と IP アドレスが実際のサーバ名が合わなくなっている. 従って, 公開鍵を再び取り直す.

公開鍵を新たに取得しなおすために, www サーバ (orange) から ホスト名と IP アドレスを変更後のサーバへ ssh 接続してみる. (アドレスはフルドメインで入力する). 以下の例では, 変更後のサーバのホスト名が grey.ep.sci.hokudai.ac.jp である.

gate@orange:$ ssh grey.ep.sci.hokudai.ac.jp

ここで公開鍵を作りますかと聞かれるので yes を入力する. 設定が正しければ, パスワードを聞かれることなく にログインできる.

以上で, ssh のノンパスワードログインに関する設定は完全に終了である.

[3-2]. gate.conf の確認

orange.ep.sci.hokudai.ac.jp の /etc/gate.conf の %DB_SHARE_HOSTS にこのサーバののホスト名が書き込まれているかを確認する.

[3-3]. データベース転送

登録サーバで gate ポートにアクセスすることによって gate-daily を動かす. これにより, データベースの転送が行われる. 転送には 1,2 分程度かかる.

hoge@orange$ telnet localhost 8888

[3-3-1]. WWW 以外での確認作業

転送完了の確認には ps aux コマンドを実行する. gate-daily が動いていなければ, 転送は完了している.

mondo1@grey:$ ps aux | grep gate

また, /etc/passwd が gate-daily によって更新されているかを確認する. 確認するためには以下を実行する.

mondo1@grey:$ ls -lt /etc/passwd

このとき表示される時間が数分前であればよい.

なお, データベースは /home/gate/userdb や /home/gate/ipdb 以下にあるので, その中にそれなりにデータファイル (3桁くらい) あれば転送が完了していると思って良い.

root@grey:# ls /home/gate/userdb/stable /home/gate/ipdb/stable

ファイルが全く存在しない場合は転送が失敗しているので注意.

[3-4]. 後始末

安全に動作していれば /ETC , /HOME を削除する.

root@grey:# rm -r /ETC /HOME

また, mondo ユーザも削除する.

root@grey:# userdel -r mondo4

最終更新日 : 2025/05/20 (山本 峻大) Copyright © 2000-2025 EPCore