ドメインに所属しているメンバサーバ上の IIS で ftp サーバを起動しています。 ドメインのユーザアカウントでアクセスしたいのですが、ログオンが拒否されてしまいます。 ログオンできるようにする方法を教えてください。
ftp でどうやってもログオンできない
意外と気づきにくいのが、ドメインとローカルマシンとに同じ名前のアカウントがある場合です。例えば、ドメインとローカルマシンとに、同じ「local0」というアカウントがある時に、ftpのログオン画面で単に「local0」と入力すると、これはローカルマシンのアカウントを利用する指定になってしまいます。
ドメインのアカウントを指定したい場合は、ここで「DOMAIN\local0」のように入力する必要があります。
もう一つ注意すべき点として、通常 IIS の ftp サーバにログオンするためには、「ローカルログオン」権限が必要なことがあげられます。 ローカルログオン権限は Windows NT Workstation ではデフォルトで Everyone に付与されていますが、 Windows NT Server では管理用のアカウントやグループにしか付与されませんので、そのままではログオンできません。
ドメインユーザマネージャを使って Domain Users グローバルグループをメンバサーバの Users ローカルグループに所属させた上で、 メンバサーバの Users ローカルグループにローカルログオン権限を付与すれば、 Domain Users グローバルグループのメンバが ftp サーバに匿名でないログオンができるようになります。
ドメインのメンバサーバ上でドメインユーザマネージャを起動すると、通常は所属するドメインに接続してしまいますので、メンバサーバのローカルアカウントを操作するときは、 [ユーザ] - [ドメインの選択] のところで「\\サーバ名」と入力する必要がありますので注意してください。
ローカルログオン権限があるとサーバのコンソールから対話的にログオンすることが可能になります。
特に設定をしていないドメインのメンバサーバに一般ユーザがログオンしようとすると 図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」を参照してください。
ここまで説明した 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: スキーマにそういうプロパティがないことを確認するスクリプト