.NET メンバーシップ認証を使用した FTP の構成
作成者 : Robert McMurray
発行日 : 2008 年 3 月 9 日 (作業者 : robmcm(英語))
更新日 : 2009 年 3 月 18 日 (作業者 : robmcm(英語))
はじめに
Microsoft は、Windows Server® 2008 用に完全に書き換えられた、新しい FTP サービスを作成しました。この新しい FTP サービスには多くの新機能が組み込まれており、Web 作成者にはコンテンツの発行がしやすくなる環境を、Web 管理者にはより優れたセキュリティおよび展開オプションを提供します。
このドキュメントでは、既定の Web サイトを構成して、FTP メンバーシップベース認証を使用する方法について説明します。
注 : このドキュメントは、ローカル Web サーバーにインストールされている SQL Server のインスタンスを使用する前提で記述されています。
このチュートリアルの内容
- 既定の Web サイトへの FTP 発行の追加
- メンバーシップ認証を使用するための ASP.NET の構成
- FTP メンバーシップ認証の構成
前提条件
この記事の手順を完了するには、次の項目を満たしている必要があります。
- Windows Server 2008 に IIS 7.0 がインストールされ、以下が構成されている必要があります。
- IIS 7.0 のインストールで作成される既定の Web サイトがまだ存在する。
- インターネット インフォメーション サービス マネージャーがインストールされている。
- 新しい FTP サービスがインストールされている必要があります。この FTP サービスは、https://www.iis.net/(英語) の Web サイトから次のリンクのいずれかを使用してダウンロードし、インストールできます。
- 認証を処理する拡張 COM プロセスがアクセスできるように、コンテンツにアクセス許可を設定します。
- コマンド プロンプトを開きます。
- 次のコマンドを入力します。
CACLS "%SystemDrive%\inetpub\ftproot" /G "Network Service":C /T /E - コマンド プロンプトを閉じます。
既定の Web サイトへの FTP 発行の追加
最初のセクションでは、既定の Web サイトに FTP 発行を追加し、ローカル管理者アカウントでコンテンツを編集できるようにするために必要な設定を追加します。
- IIS 7.0 マネージャーの [接続] ウィンドウで、ツリー内の [サイト] ノードを展開し、[Default Web Site] をクリックします。
- [操作] ウィンドウの [Add FTP Publishing] をクリックします。
- Add FTP Site Publishing ウィザードが表示されたら、次の手順を実行します。
- [IP Address] ボックスで FTP サイトの IP アドレスを選択します。または、既定で選択されている [All Unassigned] をそのまま使用することもできます。このチュートリアルでは、[IP Address] ボックスに、コンピューターのローカル ループバック IP アドレスである「127.0.0.1」を入力してください (注 : IPv6 を使用している場合は、IPv6 の localhost にバインドするための「::1」も追加する必要があります)。
- 通常は、[Port] ボックスに FTP サイトの TCP/IP ポートを入力します。このチュートリアルでは、既定のポート 21 をそのまま使用します。
- このチュートリアルではホスト名は使用しないので、[Virtual Host] ボックスは空白のままにします。
- [SSL Certificates] ボックスで [Not Selected] が選択され、[Allow SSL] オプションがオンになっていることを確認します。
- 上記の手順を完了したら、[次へ] をクリックします。
- ウィザードの次のページでは、認証や承認の設定はしません。これらの設定は後述の手順で構成します。[終了] をクリックして、ウィザードを完了します。
まとめ
このセクションで、既定の Web サイトに FTP 発行を追加するために完了した手順を下記にまとめます。
- ローカル ループバック IP アドレスのポート 21 を使用して FTP バインドを追加しました。
- FTP サイトで SSL (Secure Sockets Layer) を使用しないことを選択しました。
注 : 認証や承認の設定はまだ有効にしていません。
メンバーシップ認証を使用するための ASP.NET の構成
ASP.NET メンバーシップを使用するためのローカル SQL Server の構成
このセクションでは、メンバーシップ認証を使用するために ASP.NET を構成する基本プロセスを説明します。詳細については、MSDN Web サイトの「ASP.NET 2.0 セキュリティ ガイダンス インデックス」の「ASP.NET でメンバーシップの設定を行う」のセクションを参照してください。
既存の SQL Server がない場合は、SQL Server をインストールする必要があります。
ASP.NET データベースをまだ作成していない場合は、SQL Server 上に ASP.NET データベースを構築する必要があります。使用しているフレームワークのバージョンに応じて、次のいずれかのコマンドを使用して構築してください。
- 32 ビット フレームワーク :
- SQL Server Express エディションを使用している場合は、以下のようにインスタンス名を .\SQLExpress に変更します。
"%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe" -S localhost -A all -E
- SQL Server Express エディションを使用している場合は、以下のようにインスタンス名を .\SQLExpress に変更します。
- 64 ビット フレームワーク :
- "%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_regsql.exe" -S localhost -A all -E
注 : 上記の例で示した "localhost" ではなくリモートの SQL Server を使用する場合は、MSDN Web サイトの「ASP.NET 2.0 セキュリティ ガイダンス インデックス」の「配置に関する考慮事項」のセクションを参照してください。
FTP 拡張のための COM プロセスは、"NT AUTHORITY\Network Service" として実行されるため、"NT AUTHORITY\Network Service" アカウントを SQL Server の ASP.NET データベースに追加する必要があります。それには、次の手順を実行します。
- SQL Server Enterprise Manager を開きます。
- NT AUTHORITY\Network Service 用の SQL Server ログインを作成します。
- データベース ユーザーを作成して、Aspnetdb データベースへのログイン アクセス権を付与します。
- 作成したデータベース ユーザーを、aspnet_Membership_FullAccess データベース ロールに追加します。
FTP メンバーシップを使用するための ASP.NET の構成
次の手順では、FTP アクセスでメンバーシップ認証を使用するために ASP.NET を構成するプロセスを説明します。
Windows のメモ帳などのテキスト エディターを使用して、ルートの web.config ファイルを開きます。このファイルは、使用しているフレームワークのバージョンに応じて次のパスにあります。
- 32 ビット フレームワーク :
- %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config
- 64 ビット フレームワーク :
- %SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config
- 32 ビット フレームワーク :
一番下にスクロールし、次のコードを </configuration> 終了タグの前に貼り付けます。
<location path="GlobalFtpSite/ftpsvc"> <connectionStrings> <add connectionString="Server=localhost;Database=aspnetdb;Integrated Security=true" name="FtpLocalSQLServer" /> </connectionStrings> <system.web> <membership defaultProvider="FtpSqlMembershipProvider"> <providers> <add name="FtpSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="FtpLocalSQLServer" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear" /> </providers> </membership> <roleManager defaultProvider="FtpSqlRoleProvider" enabled="true"> <providers> <add name="FtpSqlRoleProvider" type="System.Web.Security.SqlRoleProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="FtpLocalSQLServer" applicationName="/" /> </providers> </roleManager> </system.web> </location>
ルートの web.config ファイルを保存して閉じます。
まとめ
メンバーシップ認証を使用するように ASP.NET を構成しました。このセクションで完了した手順を下記にまとめます。次のようにサーバーを構成しました。
- ASP.NET メンバーシップを使用するようにローカル SQL Server を構成しました。
- FTP メンバーシップを使用するように ASP.NET を構成しました。
FTP メンバーシップ認証の構成
このセクションでは、既定の Web サイトを使用して、メンバーシップ データベースを構成する方法を説明します。このデータベースは、後述の FTP ベースのメンバーシップ認証で使用されるユーザーを作成するために使用します。次の手順を実行します。
準備手順
- インターネット インフォメーション サービス (IIS) マネージャーを開きます。
- [接続] ツリーのトップ ノードでコンピューターを展開します。
- ツリー内の [サイト] ノードを展開します。
.NET メンバーシップ設定の構成
手順 1 : 接続文字列の追加
ツリー内の [Default Web Site] を選択して、[接続文字列] をダブルクリックし、次の手順を実行します。
※ SQL Server Express エディションを使用している場合は、[サーバー] の値を localhost から .\SQLExpress に変更してください。
- [操作] ウィンドウの [追加] をクリックします。
- 次のオプションを構成します。
- 名前 : "FtpLocalSQLServer"
- サーバー : "localhost"
- データベース : "aspnetdb"
- [OK] をクリックします。
手順 2 : 役割プロバイダーの追加
ツリー内の [Default Web Site] を選択して、[プロバイダー] をダブルクリックし、次の手順を実行します。
- ドロップダウンから [.NET の役割] を選択します。
- [操作] ウィンドウの [追加] をクリックします。
- ドロップダウンから [SqlRoleProvider] を選択します。
- 次のオプションを構成します。
- 名前 : "FtpSqlRoleProvider"
- 接続文字列名 : "FtpLocalSQLServer"
- Application name: "/"
- [OK] をクリックします。
手順 3 : メンバーシップ プロバイダーの追加
ツリー内の [Default Web Site] を選択して、[プロバイダー] をダブルクリックし、次の手順を実行します。
- ドロップダウンから [.NET ユーザー] を選択します。
- [操作] ウィンドウの [追加] をクリックします。
- ドロップダウンから [SqlMembershipProvider] を選択します。
- 次のオプションを構成します。
- 名前 : "FtpSqlMembershipProvider"
- 接続文字列名 : "FtpLocalSQLServer"
- Application name: "/"
- [OK] をクリックします。
手順 4 : FTP メンバーシップの役割の追加
ツリー内の [Default Web Site] を選択して、[.NET の役割] をダブルクリックし、次の手順を実行します。
- 接続に関するエラー ダイアログ ボックスが表示される場合があります。その場合は、[OK] をクリックしてエラー ダイアログ ボックスを閉じ、既定のプロバイダーを次の手順で構成します。
- [操作] ウィンドウの [既定のプロバイダーの設定] をクリックします。
- ドロップダウンから [FtpSqlRoleProvider] を選択します。
- [OK] をクリックします。
- [操作] ウィンドウの [追加] をクリックします。
- 次のオプションを構成します。
- 名前 : "ftprole"
- [OK] をクリックします。
手順 5 : FTP メンバーシップのユーザー アカウントの追加
ツリー内の [Default Web Site] を選択して、[.NET ユーザー] をダブルクリックし、次の手順を実行します。
- 接続に関するエラー ダイアログ ボックスが表示される場合があります。その場合は、[OK] をクリックしてエラー ダイアログ ボックスを閉じ、既定のプロバイダーを次の手順で構成します。
- [操作] ウィンドウの [既定のプロバイダーの設定] をクリックします。
- ドロップダウンから [FtpSqlMembershipProvider] を選択します。
- [OK] をクリックします。
- [操作] ウィンドウの [追加] をクリックします。
- 次のオプションを構成します。
- ユーザー名 : "ftpuser"
- 電子メール : "ftpuser@localhost.local"
- パスワード : "P@ssw0rd"
- [次へ] をクリックします。
- [ftprole] にユーザーを追加し、[終了] をクリックします。
FTP のメンバーシップ認証の有効化
メンバーシップ認証を使用するための FTP の構成
ツリー内の [Default Web Site] を選択して、[FTP Authentication] をダブルクリックし、次の手順を実行します。
- [操作] ウィンドウの [Custom Providers] をクリックします。
- [AspNetAuth] チェック ボックスをオンにします。
- [OK] をクリックします。
これで、FTP ユーザーを次のいずれかの方法で承認できます。
方法 1 : メンバーシップの役割に関する FTP 承認規則の構成
ツリー内の [Default Web Site] を選択して、[FTP Authorization Rules] をダブルクリックし、次の手順を実行します。
- [操作] ウィンドウの [許可規則の追加] をクリックします。
- アクセス オプションで [役割またはユーザー グループの指定] を選択します。
- 役割名として「ftprole」と入力します。
- [アクセス許可] オプションの [読み取り] と [書き込み] をオンにします。
- [OK] をクリックします。
方法 2 : メンバーシップ ユーザーに関する FTP 承認規則の構成
ツリー内の [Default Web Site] を選択して、[FTP Authorization Rules] をダブルクリックし、次の手順を実行します。
- [操作] ウィンドウの [Add Allow Rule] をクリックします。
- アクセス オプションで [Specified users] を選択します。
- ユーザー名として「ftpuser」を入力します。
- [Permissions] オプションの [Read] と [Write] をオンにします。
- [OK] をクリックします。
まとめ
このセクションで完了した手順を下記にまとめます。次のようにサーバーを構成しました。
- .NET メンバーシップ設定の構成 :
- 接続文字列を追加
- 役割プロバイダーを追加
- メンバーシップ プロバイダーを追加
- FTP メンバーシップの役割を追加
- FTP メンバーシップのユーザー アカウントを追加
- FTP のメンバーシップ認証の有効化 :
- メンバーシップの FTP 認証を構成
- メンバーシップ ユーザーに関する FTP 承認規則を構成
- メンバーシップの役割に関する FTP 承認規則を構成
トラブルシューティング
メンバーシップの役割を使用する場合、次のマイクロソフト サポート技術情報で説明している修正プログラムのインストールが必要な場合があります。
ログインを試みると、次のメッセージが返されます。
530-User cannot log in.
Win32 error:
Error details: .Net SqlClient Data Provider: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
530 End
Login failed.このエラーは、リモート接続を受け入れるように SQL Server を構成していない場合に発生します。