[PREVIOUS CHAPTER] [NEXT CHAPTER]

4 リモート管理

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

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

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

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

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

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

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

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

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

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

    4.2	より安全を考えると

    より安全を考えるならそもそも SMTP でコントロールしてはいけません。
    例えば Secure Shell で(認証は RSA して)

    	ssh remote-host $FML/makefml add address

    や
    	scp remote-host:$FML/ml/elena/guide newguide
    	newguide を編集
    	scp newguide remote-host:$FML/ml/elena/guide

    のような操作をする方がはるかに優れていると思います。これならコネクショ
    ンがRSA認証されていてなおかつ128bitのIDEAで暗号化されるという優れ物で
    す。

    なおマシンの上で他の人に覗かれた場合は少しだけましで、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;

    $REMOTE_ADMINISTRATION = 1; を設定するとリモート管理を可能にします。
    makefml config ML で操作できます。認証の仕方ですがデフォールトでは

    	$REMOTE_ADMINISTRATION_AUTH_TYPE = "crypt";

    	(config.ph CFVersion 3 以前では
    		$REMOTE_ADMINISTRATION = 1;
    		$REMOTE_ADMINISTRATION_REQUIRE_PASSWORD = 1;
    	に相当)

    と定義されています。これは

    	リモート管理を認め
    	管理者であることを証明するためには
    		メールヘッダの From: 行が管理者メンバーに登録されていて
    	   かつ
    		パスワード認証が必要

    という設定です。crypt, pgp などへの変更も makefml config でできます。

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

    	$REMOTE_ADMINISTRATION_AUTH_TYPE = "address";

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

    		address		From:での認証
    		crypt		From:での認証＋パスワード(cryptして保存)
    		md5		From:での認証＋パスワード(MD5で保存)
    		pgp		PGPベースでの認証(Chapter ../encryption 4.0)

    のいずれかです。

    4.4	admin コマンド

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

    	admin コマンド オプション
    もしくは
    	approve パスワード コマンド オプション

    というシンタックスのコマンドをＭＬサーバに送ることで様々な操作をするこ
    とができます。

    パスワード認証(crypt or md5)を必要とする場合、一般に次のような一連のコ
    マンドをいれることになります。
    注意: パスワードが関係するのは $REMOTE_ADMINISTRATION_AUTH_TYPE が
    crypt と md5 の時だけです。またPGPではコマンド列を書いた後メール本文全
    体にPGPをかけます。

    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

    admin 形式は
       password認証して、その後は全部認証したものとみなす

    approve 形式は
       毎回 password を書く

    どっちもそれなりに面倒くさいですが…ようはapproveは毎回 password を書
    くことだと思えばいいでしょう。このコマンドは Listserv スタイルとの互換
    性のために付け加えられました

    例:	(上と同じコマンド)
    	approve パスワード addadmin fukachan@sapporo.iij.ad.jp
    	approve パスワード add      fukachan@sapporo.iij.ad.jp

    つまり

    	approve password commands

    は ２行分

    	admin pass password
    	admin commands

    と同じになります。つまり『admin コマンド』は『approve password コ
    マンド』と等価です。apporove スタイルはPGPでは意味がありません(パスワー
    ドを使わないし、パスワードを平文で書きたくないから)。

    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";

    です。

    注意: config.ph CFVersion 3 では
    	$REMOTE_ADMINISTRATION_REQUIRE_PASSWORD
    	$REMOTE_AUTH
    は obsolete です($REMOTE_AUTHは昔の変数名です)。

    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

    その場合途中の経路上が暗号化されているとより望ましいです。例えば
    Secure Shell を使えば実現できます。SSL(Secure Socket Layer)化 telnet
    等もあります。

    通信路が暗号化されていないなら、そのマシンがリモートにある場合さらに良
    い方法は、あらかじめそのパスワードを crypt した文字列を（ローカルマシ
    ン上で）用意して、そのマシンへ入って $DIR/etc/passwd (ML の HOME の下
    の etc/passwd) を手で編集するなら少しましです。

    暗号化に関しては初期化プロセスだけ暗号化されていても、メールで admin
    コマンドを送る場合SMTP 上で動いてるのでパスワード隠蔽に関しては、どの
    みちあまり意味はありませんが…

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

    コマンドは

    	admin byeadmin fukachan@sapporo.iij.ad.jp

    です。

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

       admin pass パスワード
       admin password パスワード
       admin passwd 新しいパスワード
       admin initpass アドレス パスワード
       admin help
       admin log
       admin add address
       admin off address
       admin on address
       admin bye address
       admin chaddr old-addr new-addr
       admin change old-addr new-addr
       admin change-address old-addr new-addr
       admin matome address 引数
       admin skip address
       admin addadmin address
       admin addpriv  address
       admin byeadmin address
       admin byepriv  address
       admin dir
       admin ls options
       admin remove filename
       admin get filename
       admin resend filename address
       admin put filename
       admin rename filename1 filename2
       admin newinfo
       admin newguide
       admin unlink-article ID
       admin remove-article ID
       admin pgp options

    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 のパスワードを初期化する。初期化はＭＬサー
    バを 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	ログファイルについて

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

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

    古い設定のままでは動きません(libfml.pl 1.5.2より前)。ごめんなさい

    昔、リモート管理はフックをしかけることで実装していました。
    いまでは、$REMOTE_ADMINISTRATION で ON, OFF できるようになっています。

[PREVIOUS CHAPTER] [NEXT CHAPTER]