[PREVIOUS CHAPTER] [NEXT CHAPTER]
4 リモート管理


この章は「MLの管理のためにfmlの走っているマシンには入ることなく、メー
ルでfmlにコマンドを送ってメンバーの登録などを行なう」などの話です。
注意: 管理者がコマンドを送ってメンバーの登録を行なうやり方は手動登録と
呼んでいます。例: "admin subscribe fukachan@fml.org"


リモート管理用のコマンドは help-admin というファイルをみて下さい。


4.1	イントロダクション
../utility_programs 6.17

FMLでの"リモート管理"とはML管理者が guide などのファイルや配送リスト
(e.g. members)などをそのMLサーバのマシンに入って直接いじるのではなく
サーバにコマンドメールを送って ML の設定ファイルなどをメインテナンスす
ることを意図しています。

デフォールトの設定では『リモート管理ができる人』は
	メンバーリストに登録されている($ADMIN_MEMBER_LISTへ登録)
かつ
	パスワードを知っている
人達です。パスワードは複数人いたらそれぞれに別のパスワードを付けること
ができます。パスワード認証が要らない等のカスタマイズもできます。PGP を
使った認証もできます。
4.6

現在では makefml があるので、これを使って登録とパスワードの初期化をす
るとよいでしょう。PGP では各MLごとに独立したPGPPATHを使ってPGP
pubringを独立に保守しています。そのため間違えないように常に makefml
pgp を使うと便利です。

根本的な問題として SMTP (Simple Mail Transfer Protocol) では原理的に認
証はできないということがあります。パスワードによる認証もまたあてにはな
りません。パスワードを含むメールが FAIL してどこかのポストマスタにうっ
かり見えてしまう可能性もあります(普通はヘッダだけですが)。でもその場合
でもヘッダの Approval: password フィールドは見えてしまいます。

そういう意味でリモート管理は決して"推奨していません"が、実用上しかたな
く使うことになるケースも一杯あるらしいので実装しています。そういうもの
だと心に止めておいて下さい。

認証に関してはPGPベースがもっとも安全です。PGPベースでのリモート管理なら
まぁ推奨してもよいです:)

FYI: draft-myers-smtp-auth-11.txt ?

4.2	より安全を考えると


なおマシンの上で他の人に覗かれた場合は少しだけましで、etc/passwd とい
うパスワードを保存するファイルにパスワードをcryptで暗号化して保存して
います。

	$REMOTE_ADMINISTRATION_AUTH_TYPE = "crypt"; (default)


	$REMOTE_ADMINISTRATION_AUTH_TYPE = "md5";
の時は MD5 で保存します(旧 $USE_MD5)。そのためパスワードファイルの編集
には makefml passwd を使って下さい(もちろん自分で crypt してもいいです
けど普通手動ではしないでしょう:)。

4.3	リモート管理モードを有効にする

makefml で設定を変更できます。変更すると config.ph で次の変数がセット
されます。

	$REMOTE_ADMINISTRATION = 1;


という設定です。メールヘッダの From: 行が管理者メンバーに登録されてい
るだけで十分でパスワード認証を必要としない場合は

	$REMOTE_ADMINISTRATION_AUTH_TYPE = "address";

とすればそうなりますが、これはするべきではありません。
$REMOTE_ADMINISTRATION_AUTH_TYPE は

4.4	admin コマンド


Example:
	admin pass password
	admin addadmin fukachan@sapporo.iij.ad.jp
	admin add      fukachan@sapporo.iij.ad.jp

4.5	Approve Password Command Syntax
../utility_programs 3.0


4.6	リモート管理の設定

リモートで管理を許される人のリスト

	$ADMIN_MEMBER_LIST	= "$DIR/members-admin";

このリモート管理サーバのコマンドのヘルプ

	$ADMIN_HELP_FILE	= "$DIR/help-admin";

もしリモートの管理者にパスワードを要求するなら、

	$REMOTE_ADMINISTRATION_AUTH_TYPE = "crypt";
or
	$REMOTE_ADMINISTRATION_AUTH_TYPE = "md5"; (perl 5 only)

このチェックに使うパスワードファイルが

	$PASSWD_FILE = "$DIR/etc/passwd";


4.7	リモートで管理する人を増やす時(PGP以外)

PGPの場合については Chapter ../encryption 4.0 を参照。
fukachan@sapporo.iij.ad.jp を管理者に加える際、次のようなコマンドを送
りこみます。

* パスワード認証をしていない時は

   admin addadmin fukachan@sapporo.iij.ad.jp

* パスワード認証(crypt or md5)もしている時は

   admin addadmin fukachan@sapporo.iij.ad.jp
   admin initpass fukachan@sapporo.iij.ad.jp password

コマンドで初期化するより、より良いのは makefml を使うことです。
# ISP にコネクトする場合はSSHなんて使わせてくれない気がするが…

	% makefml passwd ML fukachan@sapporo.iij.ad.jp
4.11


4.8	リモートで管理する人を削除する時

コマンドは

	admin byeadmin fukachan@sapporo.iij.ad.jp

です。

4.9	アドミンのコマンド一覧 (help-admin より)


4.10	リモート管理で使えるコマンドを増やすor減らす
../command 4.1

普通のコマンドを増やす要領で同じようにやれば良いです。
config.ph でコントロールできます。
いくつかの変数がありますが、次のように作動します
../command 4.1

   1	@PermitAdminProcedure が定義してあるなら
	@PermitAdminProcedure で許しているコマンドだけを設定します。
	もし、定義されていなければデフォールトのすべてのコマンドが
	利用可能になります。
	これらの設定はグローバル変数の %AdminProcedure に定義されます。

   2	%LocalAdminProcedure が定義されているなら
	1 で定義された %AdminProcedure を %LocalAdminProcedure で上書き
	します。

   3	@DenyAdminProcedure が定義されているなら
	@DenyAdminProcedure のコマンドだけを使えなくする

   4	$ADMIN_COMMAND_HOOK を評価する。

例:
	○ 管理者用の helpとaddadminのみを使用可能、それ以外はすべて使用不可

	@PermitAdminProcedure = ('admin:help', 'admin:addadmin');

	○デフォールトに加え自分で定義した hack コマンドも使える
	もちろんこの場合はどこかで sub ProcAdminHack { ...; } があって
	この関数を用意しておく必要がある。

	%LocalAdminProcedure = ('admin:hack', 'ProcAdminHack');

	○デフォールトの中で addadmin は使えなくする

	@DenyAdminProcedure = ('admin:addadmin');

4.11	パスワードファイルの初期化と設定
../utility_programs 6.17
../makefml 1.0

	makefml passwd ML名 options

fukachan@phys.titech.ac.jp のパスワードを初期化する。初期化はMLサー
バを edit できる人にしかできません。

4.12	リモートでパスワードの変更

コマンドで

	admin pass	パスワード
	admin passwd	新しいパスワード

をサーバへ送り込むことで変更 (etc/passwdの設定変更) をすることができま
す。approve コマンドなら

	approve パスワード passwd 新しいパスワード

ですね。

4.13	'admin add' した時に「いらっしゃいませ」メールを送る

	$ADMIN_ADD_SEND_WELCOME_FILE = 1; (default 0)

#これだけは特殊なので、オプションを一つ作りました。

4.14	登録するアドレスの範囲を制限する
../how_to_subscribe 4.3

この変数は自動登録でもリモートコマンドによる登録でも制限できます。
しかし makefml では無効です。

デフォールトでは $REJECT_ADDR にあてはまらないならどんなアドレスでも登
録します。特定のドメインのみを登録対象にしたいなら 
$REGISTRATION_ACCEPT_ADDR に正規表現を書いて下さい。

Example 1;
	$REGISTRATION_ACCEPT_ADDR = 'domain.co.jp';

Example 2;
	$REGISTRATION_ACCEPT_ADDR = 'domain1.co.jp|domain2.co.jp';

$AUTO_REGISTRATION_ACCEPT_ADDR は自動登録ルーチンにだけ作用する変数で
す。使用可能ですが obsolete です。

4.15	リモート管理モードでのアドレスの複数マッチ問題について 

通常のリモートコマンドの場合、 OFF コマンド等での multiple-matching 
を認めません。例えば一般に

	fukachan@aoi.chan.panic
	fukachan@uja.aoi.chan.panic

のアドレスは間違えてホスト名までついているのかそれとも別のドメインの別
人なのか区別できません。両方ともマッチしてしまう時は『チェックをきびし
くしてひとつのアドレスだけを選ぶ』のがデフォールトのFMLの挙動です。リ
モート管理のコマンドの時だけは multiple です。つまり、上の両方のアドレ
スを一気に消して、新しく add したりできるわけです。

4.16	リモートで入れ替えが可能なファイルについて、

具体的には remove unlink put rename コマンドの場合に、任意のファイルが
操作できるのはまずいです。本来これらのコマンドはリモートで guide ファ
イルを入れ換える等の目的のためにあります。現在では

@REMOTE_RECONFIGURABLE_FILES という配列で定義されたファイルにのみこれ
らのコマンドは作用します。デフォールトは、次の変数で設定されているもの
を操作可能にしてあります。

	$INDEX_FILE		$WHOIS_DB
	$ADMIN_MEMBER_LIST	$ADMIN_HELP_FILE
	$PASSWD_FILE		$LOG_MESSAGE_ID
	$MEMBER_LIST		$ACTIVE_LIST
	$OBJECTIVE_FILE		$GUIDE_FILE
	$HELP_FILE		$DENY_FILE
	$WELCOME_FILE		$CONFIRMATION_FILE
	$LOGFILE		$MGET_LOGFILE
	$SMTPLOG		$SUMMARY_FILE
	$SEQUENCE_FILE		$MSEND_RC
	$LOCK_FILE

	$FILE_TO_REGIST
	$FTP_HELP_FILE		$WHOIS_HELP_FILE

	@ACTIVE_LIST		@MEMBER_LIST

増やす場合は config.ph で

	push(@REMOTE_RECONFIGURABLE_FILES, "$DIR/file-to-add");

のように配列の中身を追加してください。ちなみにこの場合 put 等の引数の
ファイル名は$DIR からの相対パスを全部書いてもらう必要があります。
ファイル名だけでは複数の置く可能性のある directory の中から自動的には
決められないからですね。


4.17	ログファイルについて

ログファイル ってML本体と管理者コマンドって同じファイルを使ってます。
分けられません:)

4.18	リモート管理の古い設定への注意


[PREVIOUS CHAPTER] [NEXT CHAPTER]