[CTX]
[ALL]
AUTHORIZER parameter* == AUTHORIZER=authServList[@realmValue][:connMap]
authServList == [authForw,]authServ[,authServ]* | & | *
authForw == -map{inPat}{localPat}{fwdPat} | -strip | -fwd
authServ == authHost[/portNum][(reprUser)]
authHost == hostName | hostAddr
realmValue == word | {words separated with space}
connMap == ProtoList:dstHostList:srcHostList
-- default: none
-- 制限: Telnet, FTP, NNTP, SMTP, IMAP, Socks, SockMux および、HTTP に、適用可能
認証と権限付与に使うサーバーを指定します ("auth-server")。
指定した場合、アプリケーションプロトコル独自の
ユーザー名/パスワードを送信することによって
auth-server での認証が成功しない限り、
クライアントからのアクセスは許可されません。
"-none" と "-never" の、2つの特別な authServ は、
不要な認証を生成しません。
authServ の後ろに "(reprUser)" がつく場合、
authServ で認証が成功したユーザーは、
代表ユーザー reprUser として表示されます。
注記: auth-server により認証されたクライアントは、そのクライアントホストが、
他のアクセス制御 (RELIABLE と PERMIT)
を通過しない場合、許可されません。
認証された全クライアントを、そのホストを無視して許可したい場合、
RELIABLE="-a/*" のように指定します。
この用途で、RELIABLE="*" も動作しますが、DeleGate と設定変更で使うのは危険です。
connMap に追加するとき、認証サーバーは、
対象プロトコル、サーバーホスト、クライアントホストの組合わせで、条件付で選択できます。
authServList は、認証サーバー名、または、認証サーバーのホスト名リストです。
authServList の後ろに、"@realmValue" が付く場合、
その値は、HTTP-DeleGate における、保護空間の領域指定に使えます。
それは、それぞれの MOUNT ポイントに対して、マウントオプション
"realm=realmValue" で上書き可能です。
現在、リモート認証/権限付与サーバーのプロトコルは、
FTP プロトコルの USER/PASS コマンドです。
このように、DeleGate の認証/権限付与サーバーには、
任意の実在の FTP サーバーを使用できます。
他の方法として、DeleGate 自らが持つ 認証/権限付与のためのリストは、
-Fauth 機能により管理できます。
次のように、組み込み auth-server を authServ として使用します:
- -none
-- 認証の有無を無視して許可。
- -never
-- 認証の有無を無視して不許可。
- -any
-- ユーザー名 + パスワードの任意の組み合わせが許可されます。
- -anonftp
-- ユーザー名が "ftp" または、"anonymous" で、パスワードに "@" が含まれる。
- -dgauth[.realm]
-- パスワードは、ダイジェストとして安全に送信される(HTTP と APOP)
- -pam/service
-- ユーザー名とパスワードは、PAM でチェックされます。
- -list{user:pass,...}
-- リスト中に、ユーザー名とパスワードのペアーを含みます。
- -userpass/user/pass
-- -list{user:pass} と、同等。
- -hostlist/ListName
-- HOSTLIST=ListName:HostList にクライアントのホストを含む。
- -fail.badpass
-- ユーザ名はあるが、パスワードがダメな場合、不許可
- -fail.nopass
-- パスワードが空か与えられない場合、不許可
- -cmd{cmd arg ...}{ENV=val ...}
-- 認証用外部コマンド
- -ntht
-- NTLM over HTTP (Win32 のみ)
- -login
-- ローカルホストへのログイン (Win32 のみ)
- -man
-- オンデマンドマニュアル認証
- DGAuth: -dgauth[.realm][{user:pass,...}]
- 各アプリケーションプロトコル独自のダイジェストパスワードを基本とした認証スキームで、
"AUTHORIZER=-dgauth" を指定することで有効になります。
この種の認証スキームは、少なくとも、APOP プロキシーや、
HTTP Digest/Basic 変換器が行い、元の平文テキストのパスワードが
必要です。
そのようなことを簡単に行うには、次のように、
対のユーザー名とパスワードの一覧を直接指定します。
-dgauth{user1:pass1,user2:pass2,...}
他のパスワードを保存する方法は、次のように DeleGate で指定します
"-Fauth -a username:password -dgauth"。
-dgauth 用パスワードは暗号化された形で格納され、
暗号化のためのキーワードが必要となります。
キーワードは、CRYPT=pass:keyword で指定するか、
後で対話形式で指定します。
他の場合、DGAuth は、リモート DGAuth サーバー に委任できます。
DGAuth サーバー.
DGAuth は、認証によって開始されたセッションの間、
保持された識別と同様のセッション識別子を生成し、
そのあとで、CFI/CGI プログラムに、環境変数 "X_DIGEST_SESSION" で渡され、
さらに、PROTOLOG でログを取ることができます。
例)
//ダイジェスト認証をクライアントと行う HTTP プロキシー、または、サーバー
SERVER=http AUTHORIZER=-dgauth
// クライアントと、APOP 認証を行う、POP プロキシー
SERVER=pop MOUNT="* pop://server/*" AUTHORIZER=-dgauth
- PAM: -pam[/service]
- プラットホーム上で PAM (Pluggable Authentication Modules) が使えるなら、
以下の書式で認証に使うことができます。
AUTHORZIER="-pam/service",
例としては、AUTHORIZER="-pam/passwd", AUTHORIZER="-pam/ftp" 等です。
注記: ほとんどの PAM 認証の実行には、Unix 上のスーパーユーザー特権
(OWNER="root" オプション付加) が必要です。
しかし、DGROOT/subin/ に
外部プログラム "dgpam" をインストールすることで、
スーパーユーザー特権をともなう DeleGate を実行することを避けられます。
PAM 認証は、リモート PAM サーバーに委任することもできます。
- LIST: -list{user[:pass],...}
- 一覧の要素 は、":pass" が無い user だけでもよく、
これは、user 名だけをつき合わせ、パスワードは無視することを意味します。
"-list{user:pass,...}" 内で、
"[date+format]" を
user と pass に置き換えて使用できます。
例) AUTHORIZER="-list{guest:[date+%y%m]}" は、
ユーザー名 "guest" を 2004年5月にパスワード "0405" で受け入れることを意味します。
例)
AUTHORIZER="-list{u1:p1,u2:p2}(local),-pam,-none(anonymous)"
// ユーザーは、"local" または PAM でのユーザー、またはその他の "anonymous"
// として認証されます。
- CMD: -cmd{cmd arg ...}[{ENV=val ...}[{input-pattern}]]
-
認証を外部コマンド cmd で行う。
外部コマンドに渡される認証用の値は、ユーザー名用 %U 及び、
パスワード用 %P のような、書式 "%format"
で指定します。
パラメーターは、コマンドライン引数、環境変数または、コマンドの標準入力に渡せます。
環境変数と、input-pattern が、
AUTHORIZER="-cmd{cmd}
のように省略されるなら、
AUTHORIZER="-cmd{cmd}{DG_USER=%U DG_PASS=%P}{USER %U\nPASS %P\n}"
として暗黙で指定されたかのように、ユーザー名とパスワードの組がデフォルトで渡されます。
コマンドによる認証の結果は、その出力文字列か、終了コードで表されます。
コマンドはその標準出力に結果を FTP プロトコルでのステータス応答形式で表し、
成功時 "230"、失敗時 "530" です。
他の場合、プロセスの終了コードが使われ、0 が成功、0 以外が失敗です。
例) ユーザー名を引数で渡し、パスワードを環境変数で渡す。
AUTHORIZER="-cmd{myauth %U}{MYPASS=%P}"
[myauth コマンドの内容]
#!/bin/sh
if [ "$1" = "user1" -a "$MYPASS" = "pass1" ]; then
echo "230 SUCCESS"
else
echo "530 FAILURE"
fi
-
-
AUTHFORW: -map{inPat}{localPat}{fwdPat} | -strip | -fwd
-
(現時点では FTP と POP のみで有効)
"-map" プリフィックスは、入ってくる USER と PASS の認証情報 (inPat パターンで)
を分離し、一対の認証(1つは authServList (localPat 内の) によりローカルで使われ、
他は (fwdPat 内の) サーバーに転送されます) にします。
一致または生成される各認証情報は、"username:password" として一対の
ユーザー名とパスワード文字列であらわされます。
fwdPat により生成されるユーザー名文字列が "@Host" で終わる場合、
それは取り除かれ、Host は対象サーバーとして使われます。
文字列は共通仕様フォーマットパターン (MOUNT でのマッチングパターンで使われる) に一致した形式で生成されます。
(例) -strip
- 1A) AUTHORIZER="-map{%S@%S:%S@%S}{%(0):%(2)}{%(1):%(3)},-list{u1:p1},-pam"
- 1B) AUTHORIZER="-strip,-list{u1:p1},-pam" ## 上と同じ
- 入ってくる認証 <-- USER user1@user2@host2 + PASS pass1@pass2
u1 または PAM によるローカル認証 <-- USER user1 + PASS pass1
サーバー h2 に送られる <-- USER user2 + PASS pass2
(例) -fwd
- 2A) AUTHORIZER="-map{%S:%S}{%S:%S}{%S:%S},-list{u1:p1},-pam"
- 2B) AUTHORIZER="-fwd,-list{u1:p1},-pam" ## 上と同じ
(例)
- 3A) AUTHORIZER="-map{%S}{%S}{},-list{u1:p1},-pam"
- 3B) AUTHORIZER="-list{u1:p1},-pam" ## 上と同じ
上記例1で見せたのは、"-strip" が、USER "u1@u2@u3@h3@h2@h1" と PASS "p1@p2@p3"
として、ユーザー名とパスワードの多重化に使うということ。
USER と PASS の '@' より前の最初の部分を取り除きローカル認証に使い、
USER 内の '@' 以降の最後の部分は対象サーバーとして、残りの文字列は対象サーバーに転送されます。
"-fwd" 指定は、同じ USER と PASS をローカル認証と、サーバーとの認証の両方に使います。
認証されたユーザーに権限を与えない必要があるときのみ、
authServList として、以下の特別な名前が便利でしょう。
"&" -- クライアントホスト (クライアントホスト上のユーザー名が必要)
"*" -- "user@authHost" としてのクライアントで指定された、
任意の authHost
例)
// local.domain 以外のクライアントは認証が必要
SERVER=telnet AUTHORIZER="&:::!*.local.domain"
// ユーザーが localhost で認証された場合、全てのクライアントを許可
SERVER=telnet AUTHORIZER="localhost" RELIABLE="*"
// "-Fauth" により管理される、
DeleGate 自身の "-socksusers" リストを使用する。
SERVER=socks AUTHORIZER=-socks.users