<!-- -*- mode:text coding:euc-jp -*-
   $FML: cgi.sgml,v 1.11 2008/09/28 03:31:00 fukachan Exp $
-->


<chapter id="setupcgi">
	<title>
	CGI の設定
	</title>


<warning>

<para>
CGI の内部構造については
<link linkend="cgi.internal.method">
<xref linkend="cgi.internal.method">
</link>
を参照して下さい。
</para>

<para>
デフォルトの &fml8; では、
<link linkend="setup.apache.suexec">
apache で suexec を使う
</link>
ことを前提としています。
つまり
<screen> 
http://mail.example.org/~fml/cgi-bin/fml/DOMAIN/admin/config.cgi 
http://mail.example.org/~fml/cgi-bin/fml/DOMAIN/ml-admin/ML/config.cgi 
</screen> 
といった URL を使う前提です。
</para>

</warning>


<para>
ＭＬごとの管理用 CGI、
ドメイン全体を管理する CGI
一般ユーザ向けの subscribe/unsubscribe リクエストを申請してもらう CGI (
2008/09/09 以降)
の３種類が用意されています。
</para>

<para>
管理用 CGI インターフェイスでは、ユーザの追加、削除、メンバーリストや
ログの閲覧などが可能ですが、CGI からの設定変更インターフェイス(
設定ファイル config.cf の編集機能)が中途半端です。
</para>

<para>
「CGI から操作可能」なコマンドは、すべて CUI と同じ効果を持ちます。
たとえば、ＭＬの作成や削除もコマンドラインと全く同一ですので、
CGI 用の特別な作業は不要です。
</para>



<sect1 id="setupcgi.install">
	<title>
	makefml newml は、つねに CGI スクリプトを作成
	</title>

<para>
makefml newml ML (fml ML newml)を実行すると、
~fml/public_html/ 以下に CGI スクリプトが作成されます。
</para>


<warning>
<para>
つねに CGI スクリプトは作成されます。
一方、
apache のデフォルト設定では ~fml/ 以下は見えません。
</para>

<para>
この(制限された)意味において
「&fml8; デフォルトでは CGI が無効」と言いっています。
</para>

</warning>


<para>
この CGI は前述のように３種類あります。
管理用の二種類には
「ドメイン全体を管理する CGI」と、
「それぞれのＭＬを管理するＭＬ専用の CGI」があり、
それぞれ、次のパスに作成されます。
<screen>
そのドメイン全体の管理者用 (そのドメインすべてのＭＬを管理可能)
~fml/public_html/cgi-bin/fml/ドメイン/admin/config.cgi

ＭＬごとの管理者用 (そのＭＬのみを管理可能)
~fml/public_html/cgi-bin/fml/ドメイン/ml-admin/ＭＬ名/config.cgi
</screen>
一方、一般ユーザ向けの CGI (ＭＬの入会・退会申請メニュー用)は、
WWW サーバの設定でフィルタが書きやすいように、
わざと異なるパスに作成しています。
<screen>
~fml/public_html/cgi-bin/anonymous/ドメイン/ＭＬ名/submit.cgi
</screen>
必要に応じ、WWW サーバの設定で
「 ~fml/public_html/cgi-bin/fml/ 」
と
「 ~fml/public_html/cgi-bin/anonymous/ 」
で異なるアクセス制御を行なって下さい。
</para>

<para>
たとえば、elena@fml.org ＭＬを作成すると次の３つが作成されます。
<screen>
○ fml.org の全ＭＬを管理する CGI スクリプト

http://lists.fml.org/~fml/cgi-bin/fml/ドメイン/admin/config.cgi
例
http://lists.fml.org/~fml/cgi-bin/fml/fml.org/admin/config.cgi

○ elena@fml.org ML だけを管理する CGI スクリプト

http://lists.fml.org/~fml/cgi-bin/fml/ドメイン/ml-admin/ＭＬ名/config.cgi
例
http://lists.fml.org/~fml/cgi-bin/fml/fml.org/ml-admin/elena/config.cgi

○ elena@fml.org ＭＬへの入会・退会用申請 CGI スクリプト

http://lists.fml.org/~fml/cgi-bin/anonymous/ドメイン/submit.cgi
例
http://lists.fml.org/~fml/cgi-bin/anonymous/fml.org/elena/submit.cgi
</screen>
</para>

<para>
<graphic entityref="image.cgi.newml"></graphic>
</para>

</sect1>


<sect1 id="setupcgi.authentication">
	<title>
	認証: どうすればよいのですか？
	</title>

<para>
WWW サーバの認証システムにおんぶにだっこです。
</para>

<para>
それはいいとしても、もう少し、
&fml8; での WWW サーバ設定支援ツールがあるべきでしょうね。
</para>

</sect1>


<sect1 id="setupcgi.htaccess">
	<title>
	認証: .htaccess を編集する
	</title>

<para>
デフォルトでは、とりあえず潰してあります(認証エラーになる)ので、
適切に変更して下さい。
</para>

<para>
デフォルトでは、CGI のアクセスを拒否するようにドメイン単位で
.htaccess が作られます。
<screen>
http://lists.fml.org/~fml/cgi-bin/fml/ドメイン/.htaccess

例
http://lists.fml.org/~fml/cgi-bin/fml/fml.org/.htaccess
</screen>
</para>

<para>
デフォルトの .htaccess は次のような無意味:)なものになっていて、
アクセスできません(エラーになります)。
<footnote>
<para>
さらに、デフォルトの apache では ~fml/ へのアクセスは出来ないはずなの
で、apache の設定も別途必要です。一応、デフォルトでは、この二段構えの
拒否体制になっています。
</para>
</footnote>
<screen>
AuthName ByPassword
AuthType Basic
require valid-user
</screen>
この .htaccess を適切なものに書き換え、
apache の設定で suexec を有効にして下さい。
<screen>
例

AuthName ByPassword
AuthType Basic
AuthUserConfig "/usr/local/etc/fml/ドメイン/htpasswd"
require valid-user
</screen>
</para>

<warning>
<para>
(当たり前ですが)この .htaccess ファイルを消すと、
誰でもアクセスできるようになります。
デバッグする場合は便利ですが、そういう裏技は使わないようにしましょう;-)
また、そういう「デバッグだけだから、ちょっとだけ…」という時にかぎって、
そのまま再設定し忘れたりするものなので、
そういう流儀に慣れないようにしてください。
きちんと .htaccess を設定しましょう。
</para>
</warning>

</sect1>


<sect1 id="setupcgi.admin.cgi.overview">
	<title>
	管理用 CGI の例: ドメインマスタ CGI の画面
	</title>

<para>
この CGI は、あるドメイン全体を操作できる権限を与えています。
「ＭＬを管理する権限を与えても良いけれど、
でも Unix のコマンドラインを使うのがちょっとつらい」
という人を想定したものです。
よって、ＭＬの作成などができるわけですが、
makefml のすべての機能が使えるわけでもありません。
</para>

<para>
CGI の画面を見るとわかる通り、
CGI で可能な項目は makefml の部分集合となっています。
利用可能なコマンドは最初の画面にヘルプとして表示されているものだけです。
<screen>
例: CGI トップ画面

                     @home.fml.org CGI for configuration

fml admin menu             fml CGI interface for @home.fml.org ML's
mailing list:
[elena]              左のナビゲーションバーから、ＭＬ(mailing list)とコマ
command:             ンド(command)を選択し、 submit ボタンを押して下さい
[subscribe  ]        。
[submit][reset]
                     subscribe   アドレスの追加
                     unsubscribe アドレスの削除
                     addadmin    リモート管理者アドレスの追加
                     byeadmin    リモート管理者アドレスの削除
options Language:    list        アドレスリストを見る
[Japanese] [change]  log         ログを見る
                     newml       ＭＬの作成
                     rmml        ＭＬの削除
</screen>
</para>


<para>
なお、画面の左下もしくは右にヘルプメッセージが表示されるので
操作の際には、それを参考にして下さい。
もちろんコマンドごとにメッセージは異なります:)
</para>

<para>
<graphic entityref="image.cgi.top"></graphic>
</para>


</sect1>


<sect1 id="setupcgi.admin.cgi.newml">
	<title>
	管理用 CGI の使い方: 例: ＭＬの作成
	</title>

<para>
左の画面のコマンドで newml を選択し、
submit ボタンを押して下さい。
ML 名を選択する必要はありません:)
</para>

<para>
中央に、ＭＬ名の入力をうながす画面が現れるので、
作成するＭＬ名を入力し、中央の submit ボタンを押して下さい。
</para>

<para>
<graphic entityref="image.cgi.newml"></graphic>
</para>

</sect1>


<sect1 id="setupcgi.admin.cgi.subscribe">
	<title>
	管理用 CGI の使い方: 例: メンバー登録
	</title>

<para>
左の画面のコマンドで ML 名と subscribe を選択し、
submit ボタンを押して下さい。
</para>

<para>
中央に、アドレスの入力をうながす画面が現れるので、
登録したいアドレスを入力し、
中央の submit ボタンを押して下さい。
</para>

<para>
<graphic entityref="image.cgi.useradd"></graphic>
</para>

</sect1>


<sect1 id="setupcgi.admin.cgi.skin">
	<title>
	管理用 CGI スキンの選択
	</title>	

<para>
config.cgi では TABLE と SELECT が基本です。
もう少し、昔風の画面にしたいなら、menu.cgi のほうを使ってみて下さい。
<screen>
そのドメインのＭＬ全部の管理者用
~fml/public_html/fml/ドメイン/admin/menu.cgi

ＭＬごとの管理者用
~fml/public_html/fml/ドメイン/ml-admin/menu.cgi
</screen>
</para>

<para>
TODO: cookie で設定を覚えておくようにしようと考えています。
</para>

<!--
	XXX-TODO: wizard.cgi があるといいかもね
-->


</sect1>


<sect1 id="setupcgi.anonymous.cgi.overview">
	<title>
	一般ユーザ用 CGI 
	</title>

<para>
&fml8; を使ったＭＬへの入会/退会(subscribe/unsubscribe)は、
もともと
<link linkend="fml.command.bymail">
メールベースのシステム
</link>
です。
</para>

<para>
このコマンドメールによる入会/退会(subscribe/unsubscribe)
の最初のフェイズだけは CGI でも出来るようにしました。
</para>

<para>
CGI だけで入会/退会が出来るとセキュリティ面でもよろしくないので、
<screen>
(1) 最初だけは CGI から申請、
(2) メールで confirmation を送る、
(3) メールで confirmation が返ってきたら OK
</screen>
としています
(もちろん、これ以上 HTTP をつかった高度なものにする予定もありません)。
</para>

<para>
何のことはない、最初のところが「subscribe というメールを出して下さい」
から「この CGI でメールアドレスを入力して下さい」に変わっただけですね？
</para>

<para>
なお、この CGI には、SPAM よけの”おまじない”として、メールアドレスを
魔法の文字列の２つをセットで入力してもらうようにしてあります。
「ゆがんだ文字列を認識できるのは機械ではなく人間に違いない」
(image verification)です。
</para>

<para>
ま、気休めですけどね。
どうせ、このあとメールによる confirmation もあるので、
このおまじないの精度は気にしないでください。
</para>

<para>
しょせん CGI など、
メールによる confirmation システムの wrapper にすぎないという位置付けです。
CGI 単体では動作させません。
そのため、一般ユーザ用の CGI は、
すべてのこの image verification で申請を出してもらうようにして、
パスワード認証などといった面倒なシステムは廃しています。
</para>


<sect2>
	<title>
	議論: 一般ユーザ用パスワード認証は、どうなのか？
	</title>

<para>
ユーザにパスワードを入れさせるＭＬシステムもありますが、
私はパスワードを覚えていたためしがありません。
あんな仕様は危ないだけです。
</para>

<para>
一般ユーザがＭＬ関連の操作をすることは数カ月から数年に一回しかありません。
だから、パスワードを設定しても次回まで覚えていることがないのです。
</para>

<para>
また、そういったシステムでは、パスワードを忘れた場合に再送を依頼すると、
メールで平文パスワードが送られてきたりする始末です。
分かりにくいパスワードといえど、
たいてい個人情報を元にした連想だったりします。
パスワードが平文でやりとりされるのは単体で危険といえるばかりでなく、
それ以外のシステムへの危険性を増します。
</para>

<para>
毎日つかうようなシステム
<footnote>
<para>
もちろんパスワード認証システムは、
定期的に変えるよう強制もされることが望ましい。
</para>
</footnote>
でないかぎり、パスワード認証法はセキュリティホールを作るだけです。
</para>

</sect2>

</sect1>


</chapter>
