	REMOTE_ADMINISTRATION: メールで遠隔からfmlを操作する

------------------------------------------------------------
1	メールでfmlの設定を変更するには？ (REMOTE_ADMINISTRATION)
1.1	リモート管理とは？
1.2	有効にする手順は？
1.3	メールでの設定ファイル(config.ph)の変更は?

2	リモート操作の例: メールで guide ファイルを書き換える 
2.1	CUI での変更手順
2.2	GUI: リモート管理を有効にする
2.3	GUI: 管理者のEmail Addressを登録する
2.4	パスワードを設定する (GUI)
2.5	コマンドを送る

3	Q and A
3.1	管理者コマンドでメンバーのクリア＆登録を行いたい

4	リモート管理
4.1	イントロダクション
4.2	より安全を考えると
4.3	リモート管理モードを有効にする
4.4	admin コマンド
4.5	Approve Password Command Syntax
4.6	リモート管理の設定
4.7	リモートで管理する人を増やす時(PGP以外)
4.8	リモートで管理する人を削除する時
4.9	アドミンのコマンド一覧 (help-admin より)
4.10	リモート管理で使えるコマンドを増やすor減らす
4.11	パスワードファイルの初期化と設定
4.12	リモートでパスワードの変更
4.13	'admin add' した時に「いらっしゃいませ」メールを送る
4.14	登録するアドレスの範囲を制限する
4.15	リモート管理モードでのアドレスの複数マッチ問題について 
4.16	リモートで入れ替えが可能なファイルについて、
4.17	ログファイルについて
4.18	リモート管理の古い設定への注意

5	その他の話題
5.1	pgp の認証の時には address 登録なんていらないのでは？
------------------------------------------------------------


1	メールでfmlの設定を変更するには？ (REMOTE_ADMINISTRATION)

1.1	リモート管理とは？

リモート管理とは「メールでコマンドを elena-ctl へ送り、メッセー
ジファイルやメンバーリストの変更を行なうこと」を指しています。

デフォールトではこの機能は無効です。

1.2	有効にする手順は？
See also: 2 

この機能を使うためにはまずそのホスト上でリモート管理を許す必要
があります。以下のような作業が最低限必要です。

   1. リモート管理機能を有効にする。デフォールトでは無効です

	メニュ → REMOTE_ADNISTARTION → REMOTE_ADNISTARTION → y

   2. リモート管理ができる人(Email アドレス)を登録する。
      こういう権限は少数の人に限るべきでしょう。そのため
      Email アドレスとパスワードでの認証がかかっています(default) 	 

   3. その Email アドレスごとに初期パスワードを設定します。

この後はＭＬの設定(config.ph)変更以外はそのホストに入らずにある程度で
きるようになります。

1.3	メールでの設定ファイル(config.ph)の変更は?

できません。失敗すると何もできなくなるからです。
メール以外の方法での config.ph の変更は

	そのホストに入って行なう
		makefml を使う
		直接ファイルを編集する

	WWWでGUI経由で行なう (CGI経由で makefml を使う)

のいづれかになります。

2	リモート操作の例: メールで guide ファイルを書き換える 

   1. リモート管理機能を有効にする。デフォールトでは無効です

   2. リモート管理ができる人(Email アドレス)を登録する。
      こういう権限は少数の人に限るべきでしょう。そのため
      Email アドレスとパスワードでの認証がかかっています(default) 	 

   3. その Email アドレスごとに初期パスワードを設定します。

   4. guide を上書きするコマンドを送り込む

2.1	CUI での変更手順

CUIの説明は偉く簡単ですね。GUIの場合の説明は次節以降を参照して下さい
See also: 2.3 

1. この機能を有効にする

    % makefml config elena

   トップメニュー -> REMOTE_ADMINISTRATION -> "y" (yes)

2. 管理者のEmail Addressを登録する
    % makefml addadmin elena fukachan@sapporo.iij.ad.jp 

3. パスワードの設定
    % makefml passwd elena fukachan@sapporo.iij.ad.jp 

4. コマンドを送る

宛先: elena-ctl@ドメイン

メールの本文は
------------------------------------------------------
approve パスワード newguide
新しいガイドのファイルをこの後に書く(張る?)
------------------------------------------------------

2.2	GUI: リモート管理を有効にする

    メニューバー (左側)
    
        o ＭＬの新規作成
        o ＭＬのメンバー
          [X]メンバー登録
          [ ]メンバー削除
          []管理者の登録
          [ ]管理者の削除
          [ ]管理者パスワード
          選択: elena GO
        o ＭＬの詳細設定 選択: elenaGO
        o ＭＬの削除

『ＭＬの詳細設定』を選択します。右側の画面が makefml config の画面にな
るので

	リモート管理 -> リモート管理を使うか？ -> YES

を選択します。

2.3	GUI: 管理者のEmail Addressを登録する

以下同じ内容をGUIでやる場合について説明します。
See also: 2.1 

    メニューバー (左側)
    
        o ＭＬの新規作成
        o ＭＬのメンバー
          [ ]メンバー登録
          [ ]メンバー削除
          [X]管理者の登録
          [ ]管理者の削除
          [ ]管理者パスワード
          選択: elena GO
        o ＭＬの詳細設定 選択: elenaGO
        o ＭＬの削除

右側の画面が以下のような感じに変わります。
    		 elena メーリングリストの設定
    
    管理者メンバーの登録 (elena ＭＬ) 
    Email アドレス:______________________________
    現在のメンバーの確認: fukachan@sapporo.iij.ad.jp
    Submit Reset

管理者として登録する人のアドレスを入力して submit を押します。
OKといわれたらそのアドレスが

	/var/spool/ml/elena/members-admin

に付け加えられたことになります。

2.4	パスワードを設定する (GUI)

    メニューバー (左側)
    
        o ＭＬの新規作成
        o ＭＬのメンバー
          [ ]メンバー登録
          [ ]メンバー削除
          [ ]管理者の登録
          [ ]管理者の削除
          [X]管理者パスワード
          選択: elena GO
        o ＭＬの詳細設定 選択: elenaGO
        o ＭＬの削除

右側の画面が以下のような感じに変わります。

    管理者 アカウントもしくはEmail アドレス: ______________________________ 
    選択: fukachan@sapporo.iij.ad.jp 
    パスワード: ..............................  
    確認のため同じパスワード: ..............................  
    
    Submit Reset

  アドレス: 一覧から選択するか明示的に指定します
パスワード: タイプミスの確認をするために同じものを2回入れて下さい。

2.5	コマンドを送る

宛先: elena-ctl@ドメイン

メールの本文は
------------------------------------------------------
approve パスワード newguide
新しいガイドのファイルをこの後に書く(張る?)
------------------------------------------------------

ここの"パスワード"はもちろんさっき定義したパスワードです。
以下の例では書いていますが subject は何でも構いません。

メールの例:

	To: elena-ctl@test.fml.org 
	subject: overwrite guide

	approve パスワード newguide	
	これは elena メーリングリストのガイドです。

	elena メーリングリストは◯◯◯を議論するＭＬです。
	参加したい人は
		かくかくしかじか
		かくかくうまうま
	してください。

			elena ML管理人

$Id: howto.wix,v 1.3 2000/05/09 10:59:11 fukachan Exp $

3	Q and A

3.1	管理者コマンドでメンバーのクリア＆登録を行いたい

admin remove ってのがあります
＃alias で unlink でも同じです。

	admin pass パスワード
	admin remove members
	admin remove actives
	admin add aaa@bbb.co.jp

というコマンドのメールを elena-ctl へおくると

1.
  members ファイルを消す
  actives ファイルを消す
  つまり現在のメンバー全員が消えた状態になる。

2.
  新たに aaa@bbb.co.jp という人だけがメンバーとして登録された

状態になります。

なお、remove コマンドで消せるのは @REMOTE_RECONFIGURABLE_FILES に登録
してあるファイルだけです

4	リモート管理

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

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

4.1	イントロダクション
See also: utility_programs 6.17 

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

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

のいずれかです。

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
See also: utility_programs 3 

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 を参照。
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
See also: 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減らす
See also: command 4.1 

普通のコマンドを増やす要領で同じようにやれば良いです。
config.ph でコントロールできます。
いくつかの変数がありますが、次のように作動します
See also: 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	パスワードファイルの初期化と設定
See also: utility_programs 6.17 
See also: makefml 1 

	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	登録するアドレスの範囲を制限する
See also: 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 できるようになっています。

5	その他の話題

5.1	pgp の認証の時には address 登録なんていらないのでは？

たしかに必要ないです。例外処理をいれるよりは念を入れさせる方がいいとお
もうので残っています。
正確にはコードを共有している都合でアドレス認証の部分も通ってしまうとい
うことになります。


		INDEX

$ADMIN_ADD_SEND_WELCOME_FILE               ...   4.13 
$ADMIN_COMMAND_HOOK                        ...   4.10 
$ADMIN_HELP_FILE                           ...   4.6 
$ADMIN_MEMBER_LIST                         ...   4.6 
admin add                                  ...   4.4 
admin addadmin                             ...   4.4 4.7 
admin addpriv                              ...   4.7 
admin initpass                             ...   4.7 
admin pass                                 ...   4.4 
admin コマンド                             ...   4.4 4.15 
admin コマンド一覧                         ...   4.9 
approve command                            ...   4.5 
approve password commands                  ...   4.5 
approve コマンド                           ...   4.5 
bin/passwd.pl                              ...   4.11 
byeadmin                                   ...   4.8 
byepriv                                    ...   4.8 
&DEFINE_MODE('remote')                     ...   4.3 
$DIR/etc/passwd                            ...   4.6 
etc/passwd                                 ...   4.11 
help-admin                                 ...   4.9 
MD5                                        ...   4.2 
$PASSWD_FILE                               ...   4.6 
$REGISTRATION_ACCEPT_ADDR                  ...   4.14 
$REMOTE_ADMINISTRATION                     ...   4 4.3 
$REMOTE_ADMINISTRATION_AUTH_TYPE           ...   4.3 
$REMOTE_ADMINISTRATION_REQUIRE_PASSWORD    ...   4.3 4.6 
@REMOTE_RECONFIGURABLE_FILES               ...   4.16 
Secure Shell                               ...   4.2 
SSH                                        ...   4.2 
アドレスの複数マッチ                       ...   4.15 
リモート管理コマンドを増やす/減らす        ...   4.10 
リモート管理モード                         ...   4.3 
