次の方法で共有


FTP プロバイダー定義 <providerDefinitions>

概要

<providerDefinitions> 要素は、カスタム FTP プロバイダーのコレクションを指定します。 <providerDefinitions> 要素には、<add> ステートメントのコレクションが含まれており、それぞれがマネージ コードまたはネイティブ コード (COM) プロバイダーを登録します。 <providerDefinitions> 要素には、カスタム プロバイダーが必要とするパラメーターを指定するカスタム キーと値のペアのコレクションを定義する、<activation> 要素も含まれています。

FTP 7.5 以降、FTP サービスではカスタム認証とロール、ログ、ホーム ディレクトリ参照の拡張性がサポートされています。 拡張プロバイダーを作成するときは、まず、マネージド コード プロバイダーの場合は .NET グローバル アセンブリ キャッシュ (GAC) に、ネイティブ コード (COM) プロバイダーの場合はシステムのレジストリに、登録する必要があります。 FTP カスタム プロバイダーの作成方法の詳細については、Microsoft の IIS.net Web サイトの次のセクションを参照してください。

FTP 7.5 向けの開発

互換性

バージョン メモ
IIS 10.0 <providerDefinitions> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <providerDefinitions> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 <providerDefinitions> 要素は IIS 8.0 では変更されませんでした。
IIS 7.5 <system.ftpServer> 要素の <providerDefinitions> 要素は、IIS 7.5 の機能として付属しています。
IIS 7.0 <system.ftpServer> 要素の <providerDefinitions> 要素が、IIS 7.0 用の別個のダウンロードとして FTP 7.0 で導入されました。
IIS 6.0 IIS 6.0 の FTP サービスは、拡張性をサポートしていませんでした。

Note

FTP 7.0 サービスと FTP 7.5 サービスは IIS 7.0 とは別に出荷され、次の URL からモジュールをダウンロードしてインストールする必要がありました。

https://www.iis.net/expand/FTP

Windows 7 と Windows Server 2008 R2 では、FTP 7.5 サービスは IIS 7.5 の機能として付属しているため、FTP サービスのダウンロードは必要なくなりました。

段取り

Web サーバーの FTP 公開をサポートするには、FTP サービスをインストールする必要があります。 そのためには、次のステップに従います。

Windows Server 2012 または Windows Server 2012 R2

  1. タスク バーで [サーバー マネージャー]をクリックします。

  2. [サーバー マネージャー] で、[管理] メニューを選択し、[役割と機能の追加] を選択します。

  3. [役割と機能の追加] ウィザードで、[次へ] をクリックします。 インストールの種類を選択し、[次へ] をクリックします。 対象サーバーを選択し、[次へ] をクリックします。

  4. [サーバーの役割] ページで、[Web サーバー (IIS)] を展開して、[FTP サーバー] を選びます。

    Note

    FTP サービスに対して ASP.NET メンバーシップ認証または IIS マネージャー認証をサポートするには、[FTP Service] に加えて[FTP 拡張] も選択する必要があります。

    [ロール] ダイアログ ボックスのスクリーンショット。ドロップダウン メニューで[機能拡張]が強調表示されています。 .

  5. [次へ] をクリックし、[機能の選択] ページで再度 [次へ] をクリックします。

  6. [インストール オプションの確認] ページで、[インストール] をクリックします。

  7. [結果] ページで、 [閉じる]をクリックします。

Windows 8 または Windows 8.1

  1. [スタート] 画面で、ポインターを左下隅まで移動し、[スタート] ボタンを右クリックし、[コントロール パネル] をクリックします。

  2. [コントロール パネル][プログラムと機能] をクリックし、[Windows の機能の有効化または無効化] をクリックします。

  3. [インターネット インフォメーション サービス] を展開し、[FTP サーバー] を展開します。

    Note

    FTP サービスに対して ASP.NET メンバーシップ認証または IIS マネージャー認証をサポートするには、[FTP 拡張] も選択する必要があります。

    [Windows の機能] ダイアログ ボックスのスクリーンショット。F T P 拡張機能が強調表示されています。

  4. OK をクリックします。

  5. 閉じるをクリックします。

Windows Server 2008 R2

  1. タスク バーで [スタート] をクリックし、[管理ツール] をポイントして、[サーバー マネージャ] をクリックします。

  2. [サーバー マネージャ] 階層ウィンドウで [役割] を展開し、[Web サーバー (IIS)] をクリックします。

  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールし、[役割サービスの追加] をクリックします。

  4. [役割サービスの追加] ウィザード[役割サービスの選択] ページで [FTP サーバー] を展開します。

  5. [FTP Service] を選択します。

    Note

    FTP サービスに対して ASP.NET メンバーシップ認証または IIS マネージャー認証をサポートするには、[FTP 拡張] も選択する必要があります。

    [ロール サービスの選択] ページのスクリーンショット。F T P サービスが強調表示されています。

  6. 次へ をクリックします。

  7. [インストール オプションの確認] ページで、[インストール] をクリックします。

  8. [結果] ページで、 [閉じる]をクリックします。

Windows 7

  1. タスク バーで、[スタート][コントロール パネル] の順にクリックします。

  2. [コントロール パネル][プログラムと機能] をクリックし、[Windows の機能の有効化または無効化] をクリックします。

  3. [インターネット インフォメーション サービス][FTP サーバー] の順に展開します。

  4. [FTP Service] を選択します。

    Note

    FTP サービスに対して ASP.NET メンバーシップ認証または IIS マネージャー認証をサポートするには、[FTP 拡張] も選択する必要があります。

    [機能] メニューが展開された [Windows の機能] ダイアログ ボックスのスクリーンショット。

  5. OK をクリックします。

Windows Server 2008 または Windows Vista

  1. 次の URL からインストール パッケージをダウンロードします。

  2. 次のチュートリアルの手順に従って、FTP サービスをインストールします。

操作方法

FTP サイトに対してマネージド コード カスタム認証プロバイダーを追加する方法

Note

これらの手順は、カスタム FTP 認証プロバイダーが既にインストールされ、サーバーのグローバル アセンブリ キャッシュ (GAC) に登録されていることを前提としています。マネージド アセンブリを登録する方法の詳細については、Microsoft MSDN Web サイトの「グローバル アセンブリ キャッシュ ツール (Gacutil.exe)」トピックを参照してください。

  1. 次のように、拡張プロバイダーのアセンブリ情報を確認します。

    • Windows エクスプローラーで、"C:\Windows\assembly" パスを開きます。ここで、C: はオペレーティング システム ドライブです。
    • アセンブリを見つけます。 たとえば、FtpAuthenticationDemo です。
    • アセンブリを右クリックし、[プロパティ] をクリックします。
    • カルチャ値をコピーします。 たとえば、Neutral です。
    • バージョン番号をコピーします。 たとえば、1.0.0.0 です。
    • 公開キー トークン値をコピーします。 たとえば、426f62526f636b73 です。
    • [キャンセル] をクリックします。
  2. 次のように、拡張プロバイダーを FTP 認証プロバイダーのグローバル リストに追加します。

    • [インターネット インフォメーション サービス (IIS) マネージャー] を開きます。
    • [接続] ウィンドウのコンピューター名をクリックします。
    • メイン ウィンドウで [FTP Authentication] をダブルクリックします。
      [I I S Manager] ウィンドウのスクリーンショット。[F T P 認証] ページが表示されています。
    • [操作] ウィンドウで [Custom Providers...] (カスタム プロバイダー...) を選択します。
    • [登録] をクリックします。
      [カスタム プロバイダー] ダイアログ ボックスのスクリーンショット。
    • [名前] ボックスに、カスタム認証プロバイダーのフレンドリ名を入力します。 たとえば、FtpAuthenticationDemo です。
    • [マネージド プロバイダー (.NET)] を選択します。
      [カスタム認証プロバイダーの追加] ダイアログ ボックスのスクリーンショット。
    • 前にコピーした情報を使用して、拡張プロバイダーのアセンブリ情報を入力します。 次に例を示します。
      FtpAuthentication.FtpAuthDemo, FtpAuthenticationDemo, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73
    • OK をクリックします。
    • プロバイダーの一覧でカスタム認証プロバイダーのチェック ボックスをオフにします。
    • OK をクリックします。
  3. 次のように、FTP サイトに対してカスタム認証プロバイダーを追加します。

    • インターネット インフォメーション サービス (IIS) マネージャーで FTP サイトを開きます。
    • メイン ウィンドウで [FTP 認証] をダブルクリックします。
    • [操作] ウィンドウで [カスタム プロバイダー] をクリックします。
    • プロバイダーの一覧でカスタム認証プロバイダーをオンにして選択し、有効にします。
    • OK をクリックします。

構成

<providerDefinitions> 要素は、ApplicationHost.config のグローバル レベルで構成されます。

属性

なし。

子要素

要素 説明
add 省略可能な要素です。

マネージド コードまたはネイティブ コード (COM) プロバイダーの登録情報を指定します。
activation 省略可能な要素です。

カスタム プロバイダーに必要なパラメーターを定義するカスタムの名前と値のペアのコレクションを指定します。

注: この要素は FTP 7.5 で追加されました。

構成サンプル

次のサンプルは、サーバーのグローバル <system.ftpServer> 要素のいくつかの構成設定を示しています。 具体的には、この例の設定では、次の方法を示します。

  • FTP 資格情報のキャッシュを有効にし、タイムアウトを 10 分 (600 秒) に指定します。

  • データ チャネル通信用に、下限ポートを 5000 に、上限ポートを 6000 に構成します。

  • ログを有効にし、ログ ファイルがサイトごとに保存され、ログ ファイルが UTC 時間で毎日ローテーションされるように指定します。

  • カスタム FTP プロバイダーを指定し、そのプロバイダーのカスタム パラメーターを指定します。

  • ローカル ホストからの FTP アクセスを許可し、IP アドレス 169.254.0.0 から 169.254.255.255 のブロックへのアクセスを拒否するグローバル IP 制限を指定します。

  • 次のオプションを使って要求のフィルタリングを構成します。

    • FrontPage Server Extensions で使われる _vti_bin 仮想ディレクトリへの FTP アクセスをブロックします。
    • 実行可能ファイルに関連付けられているいくつかのファイルの種類をブロックします。
    • 最大ファイル サイズとして 100 MB を指定します。
  • 管理者グループのアクセスを許可するグローバル認可規則を追加します。

  • FTP 仮想ホスト名にドメイン名構文を使用できるように指定します。

<system.ftpServer>
   <caching>
      <credentialsCache enabled="true" flushInterval="600" />
   </caching>
   <firewallSupport lowDataChannelPort="5000" highDataChannelPort="6000" />
   <log centralLogFileMode="Site">
      <centralLogFile period="Daily" localTimeRollover="false" enabled="true" />
   </log>
   <providerDefinitions>
      <add name="FtpXmlAuthentication"
         type="FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73" />
      <activation>
         <providerData name="FtpXmlAuthentication">
            <add key="xmlFileName" value="C:\Inetpub\XmlSample\Users.xml" />
         </providerData>
      </activation>
   </providerDefinitions>
   <security>
      <ipSecurity enableReverseDns="false" allowUnlisted="true">
         <add ipAddress="169.254.0.0" subnetMask="255.255.0.0" allowed="false" />
         <add ipAddress="127.0.0.1" allowed="true" />
      </ipSecurity>
      <requestFiltering>
         <hiddenSegments>
            <add segment="_vti_bin" />
         </hiddenSegments>
         <fileExtensions allowUnlisted="true">
            <add fileExtension="exe" allowed="false" />
            <add fileExtension="cmd" allowed="false" />
            <add fileExtension="com" allowed="false" />
            <add fileExtension="bat" allowed="false" />
         </fileExtensions>
         <requestLimits maxAllowedContentLength="104857600" />
      </requestFiltering>
      <authorization>
         <add accessType="Allow" roles="administrators" permissions="Read, Write" />
      </authorization>
   </security>
   <serverRuntime>
      <hostNameSupport useDomainNameAsHostName="true" />
   </serverRuntime>
</system.ftpServer>

サンプル コード

次の例では、カスタム FTP プロバイダー定義をサーバーに追加し、そのプロバイダーのデータ パラメーターを追加します。

AppCmd.exe

appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"[name='FtpXmlAuthentication',type='FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73']" /commit:apphost

appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpXmlAuthentication']" /commit:apphost

appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpXmlAuthentication'].[key='xmlFileName',value='C:\Inetpub\wwwroot\App_Data\Users.xml']" /commit:apphost

Note

AppCmd.exe を使用してこれらの設定を構成するときは、commit パラメーターを必ず apphost に設定する必要があります。 これで、ApplicationHost.config ファイルの適切な場所セクションに構成設定がコミットされます。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection providerDefinitionsSection = config.GetSection("system.ftpServer/providerDefinitions");
         ConfigurationElementCollection providerDefinitionsCollection = providerDefinitionsSection.GetCollection();

         ConfigurationElement addElement = providerDefinitionsCollection.CreateElement("add");
         addElement["name"] = @"FtpXmlAuthentication";
         addElement["type"] = @"FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73";
         providerDefinitionsCollection.Add(addElement);

         ConfigurationElementCollection activationCollection = providerDefinitionsSection.GetCollection("activation");
         ConfigurationElement providerDataElement = activationCollection.CreateElement("providerData");
         providerDataElement["name"] = @"FtpXmlAuthentication";

         ConfigurationElementCollection providerDataCollection = providerDataElement.GetCollection();
         ConfigurationElement addElement1 = providerDataCollection.CreateElement("add");
         addElement1["key"] = @"xmlFileName";
         addElement1["value"] = @"C:\Inetpub\wwwroot\App_Data\Users.xml";
         providerDataCollection.Add(addElement1);
         activationCollection.Add(providerDataElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim providerDefinitionsSection As ConfigurationSection = config.GetSection("system.ftpServer/providerDefinitions")
      Dim providerDefinitionsCollection As ConfigurationElementCollection = providerDefinitionsSection.GetCollection

      Dim addElement As ConfigurationElement = providerDefinitionsCollection.CreateElement("add")
      addElement("name") = "FtpXmlAuthentication"
      addElement("type") = "FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73"
      providerDefinitionsCollection.Add(addElement)

      Dim activationCollection As ConfigurationElementCollection = providerDefinitionsSection.GetCollection("activation")
      Dim providerDataElement As ConfigurationElement = activationCollection.CreateElement("providerData")
      providerDataElement("name") = "FtpXmlAuthentication"

      Dim providerDataCollection As ConfigurationElementCollection = providerDataElement.GetCollection
      Dim addElement1 As ConfigurationElement = providerDataCollection.CreateElement("add")
      addElement1("key") = "xmlFileName"
      addElement1("value") = "C:\Inetpub\wwwroot\App_Data\Users.xml"
      providerDataCollection.Add(addElement1)
      activationCollection.Add(providerDataElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var providerDefinitionsSection = adminManager.GetAdminSection("system.ftpServer/providerDefinitions", "MACHINE/WEBROOT/APPHOST");
var providerDefinitionsCollection = providerDefinitionsSection.Collection;

var addElement = providerDefinitionsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "FtpXmlAuthentication";
addElement.Properties.Item("type").Value = "FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73";
providerDefinitionsCollection.AddElement(addElement);

var activationCollection = providerDefinitionsSection.ChildElements.Item("activation").Collection;
var providerDataElement = activationCollection.CreateNewElement("providerData");
providerDataElement.Properties.Item("name").Value = "FtpXmlAuthentication";
var providerDataCollection = providerDataElement.Collection;

var addElement1 = providerDataCollection.CreateNewElement("add");
addElement1.Properties.Item("key").Value = "xmlFileName";
addElement1.Properties.Item("value").Value = "C:\\Inetpub\\wwwroot\\App_Data\\Users.xml";
providerDataCollection.AddElement(addElement1);
activationCollection.AddElement(providerDataElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set providerDefinitionsSection = adminManager.GetAdminSection("system.ftpServer/providerDefinitions", "MACHINE/WEBROOT/APPHOST")
Set providerDefinitionsCollection = providerDefinitionsSection.Collection

Set addElement = providerDefinitionsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "FtpXmlAuthentication"
addElement.Properties.Item("type").Value = "FtpXmlAuthentication, FtpXmlAuthentication, version=1.0.0.0, Culture=neutral, PublicKeyToken=426f62526f636b73"
providerDefinitionsCollection.AddElement(addElement)

Set activationCollection = providerDefinitionsSection.ChildElements.Item("activation").Collection
Set providerDataElement = activationCollection.CreateNewElement("providerData")
providerDataElement.Properties.Item("name").Value = "FtpXmlAuthentication"
Set providerDataCollection = providerDataElement.Collection

Set addElement1 = providerDataCollection.CreateNewElement("add")
addElement1.Properties.Item("key").Value = "xmlFileName"
addElement1.Properties.Item("value").Value = "C:\Inetpub\wwwroot\App_Data\Users.xml"
providerDataCollection.AddElement(addElement1)
activationCollection.AddElement(providerDataElement)

adminManager.CommitChanges()