IISサーバにftpでログオンできない

対象プラットフォーム

質問

ドメインに所属しているメンバサーバ上の IIS で ftp サーバを起動しています。 ドメインのユーザアカウントでアクセスしたいのですが、ログオンが拒否されてしまいます。 ログオンできるようにする方法を教えてください。

ftp でどうやってもログオンできない

回答

意外と気づきにくいのが、ドメインとローカルマシンとに同じ名前のアカウントがある場合です。例えば、ドメインとローカルマシンとに、同じ「local0」というアカウントがある時に、ftpのログオン画面で単に「local0」と入力すると、これはローカルマシンのアカウントを利用する指定になってしまいます。
ドメインのアカウントを指定したい場合は、ここで「DOMAIN\local0」のように入力する必要があります。

ユーザの権限にも注意

もう一つ注意すべき点として、通常 IIS の ftp サーバにログオンするためには、「ローカルログオン」権限が必要なことがあげられます。 ローカルログオン権限は Windows NT Workstation ではデフォルトで Everyone に付与されていますが、 Windows NT Server では管理用のアカウントやグループにしか付与されませんので、そのままではログオンできません。

ドメインユーザマネージャを使って Domain Users グローバルグループをメンバサーバの Users ローカルグループに所属させた上で、 メンバサーバの Users ローカルグループにローカルログオン権限を付与すれば、 Domain Users グローバルグループのメンバが ftp サーバに匿名でないログオンができるようになります。

ドメインのメンバサーバ上でドメインユーザマネージャを起動すると、通常は所属するドメインに接続してしまいますので、メンバサーバのローカルアカウントを操作するときは、 [ユーザ] - [ドメインの選択] のところで「\\サーバ名」と入力する必要がありますので注意してください。

LogonMethod の変更で危険なローカルログオン権限付与を避ける

ローカルログオン権限があるとサーバのコンソールから対話的にログオンすることが可能になります。 特に設定をしていないドメインのメンバサーバに一般ユーザがログオンしようとすると 図1のようなメッセージボックスが出てログオンできませんが、これはローカルログオン権限がないためです。
ローカルログオン権限を与えるということは、コンソールからログオンする権利も同時に与えることになりますので、権利を与えたくない場合も多いと思います。

図1: ログオンが拒否された際に表示されるメッセージボックス

実は IIS 2.0 や IIS 3.0 では、レジストリを操作することで ftp ログオン可能な権限を変更することが可能です (IIS 1.0 については, 以下で紹介する技術情報を参照してください) 。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSFTPSVC\Parameters
DWORD: LogonMethod

というキーを作成し、図2の中から値を選択して入力します。 サーバであっても、ネットワーク経由でログオン権限はデフォルトで Everyone に与えられていますので、 2 を選択しておけば無難でしょう。 なお、 WWW や gopher サービスに対してもこの値は有効です。

意味
0 ローカルログオン権限(デフォルト)
1 バッチジョブとしてログオン権限
2 ネットワーク経由でログオン権限

図2: LogonMethod で設定可能な値

詳細は、「Windows NT 4.0 リソースキットアップデート1」の P.10 - P.11 「ログオンモードの割り当て」および「Q153953: Log on Locally Permission Not Required for Client Access」を参照してください。

IIS 4.0 では無効になった LogonMethod の変更

ここまで説明した LogonMethod の変更ですが、残念ながら IIS 4.0 では設定がなくなり、ログオン方法がローカルログオンに固定されてしまいました。 IIS 4.0 の設定は、レジストリではなくメタベースというデータベース中に格納されていますが、 Web サービスには LogonMethod という項目があるのに、 ftp サービスからはなくなっています。 筆者の方で図3a、図3bのような簡単なスクリプトを使って確認してみました。 Windows 2000 RC1 上の IIS 5.0 でも試してみましたが、同様の結果になりました。 どうやらこの仕様変更は既定の路線のようです。

Dim objSVC
    
Set objSVC = GetObject("IIS://localhost/W3SVC")

MsgBox objSVC.LogonMethod <-- Web サービスの現在の LogonMethod を表示
objSVC.LogonMethod = 2 <-- LogonMethod 変更
objSVC.SetInfo <-- 設定の反映
MsgBox objSVC.LogonMethod <-- 再度表示

Set objSVC = GetObject("IIS://localhost/MSFTPSVC")
MsgBox objSVC.LogonMethod <-- FTP サービスの現在の LogonMethod を表示
しようとするが, ここでエラーが発生する。
objSVC.LogonMethod = 2
objSVC.SetInfo
MsgBox objSVC.LogonMethod

図3a: プロパティが存在しないことを確認したスクリプト

Dim objFTPSVC
Dim aClass
    
Set objFTPSVC = GetObject("IIS://localhost/W3SVC")

REM FTP サーバの情報を取得するときは、上記の行を
REM Set objFTPSVC = GetObject("IIS://localhost/MSFTPSVC")
REM にしてください。

Set aClass = GetObject(objSVC.Schema)

On Error Resume Next
strMsg = ""
For Each Item In aClass.MandatoryProperties
    PropertyValue = objFTPSVC.Get(Item)
    strMsg = strMsg & Item & ": " & PropertyValue & vbCrLf
Next
For Each Item In aClass.OptionalProperties
    PropertyValue = objFTPSVC.Get(Item)
    strMsg = strMsg & Item & ": " & PropertyValue & vbCrLf
Next
    
MsgBox strMsg
Wscript.echo strMsg

図3b: スキーマにそういうプロパティがないことを確認するスクリプト

注記・補足

  1. ドメインとローカルマシンとに同じ名前のアカウントがある場合の注意を追加しています。
  2. 本文中にあるように、 IIS 4.0 以降は LogonMethod の変更はできません。
  3. 本文書は、日経 Windows NT 1999 年 11 月号の「トラブル解決 Q&A コーナー」に掲載された「IISサーバにftpでログオンできない」の草稿を筆者の方で HTML 化して掲載しているものです。

Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2002-09-20 12:36:45 JST
webmaster@monyo.com