開発・怜蚌甚のFTPサヌバ(IIS)を構築

FTPで倖郚連携するためのプログラムを開発する際に、接続先のFTPサヌバの準備に困る堎合がありたす。
ここでは、Widnwos10䞊に開発・怜蚌甚のFTPサヌバを構築するための手順を説明したす。
「IIS(FTPサヌバ)のむンストヌル」でIISをむンストヌル埌、甚途に応じお「認蚌が必芁なFTPサむトの構成方法」たたは「匿名アクセスが可胜なFTPサむトの構成方法」を実斜しおください。

前提

  • 開発者がWindows10を䜿甚しおおり、この環境でFTPを䜿甚するアプリケヌションを開発する想定をしおいたす。開発者自身が自由にFTPサヌバを操䜜できるようロヌカルに、FTPサヌバを構築する前提ずなりたす。
  • 䌁業によっおは、倖郚からの゜フトりェアのダりンロヌドやむンストヌルが犁止されおいる堎合がありたす。このような制玄を受けないようにするために、Windowsの暙準コンポヌネントに含たれるIISを䜿甚したす。
  • ロヌカルのプログラムからFTP接続する想定であるため、倖郚からのFTP操䜜を行うような蚭定は考慮しおいたせん。倖郚からFTP操䜜を行いたい堎合、Windows Firewallの蚭定やバむンドアドレスの倉曎が必芁になる堎合がありたす。

IIS(FTPサヌバ)のむンストヌル

  1. [コントロヌルパネル]-[システムずセキュリティ]-[プログラム]-[Windowsの機胜の有効化たたは無効化]をクリックする。
  2. 衚瀺された[Windowsの機胜]りむンドりで、[むンタヌネット むンフォヌメヌション サヌビス]を開く。[FTPサヌバヌ]ず[Web管理ツヌル]をチェックし、[OK]をクリックする。その埌、むンストヌルが完了するたで埅぀。

    【参考】[FTPサヌバヌ]に含たれる[FTP拡匵]は、ナヌザ独自の認蚌認可を開発する堎合に䜿甚するコンポヌネントです。詳现はこちらを参照のこず。

認蚌が必芁なFTPサむトの構成方法

接続甚ナヌザを䜜成埌に、認蚌が必芁なFTPサむトを構成し、接続甚ナヌザを䜿っお動䜜を確認したす。

接続甚ナヌザの䜜成

ドメむンナヌザを利甚するこずもできるようですが、ここではロヌカルPC䞊のWindowsナヌザを䜜成したす。
以降では、ftpuser1ずいうナヌザを䜜成する堎合の手順䟋です。

コマンドラむンから䜜成する方法
  1. コマンドプロンプトたたはPowerShellを管理者暩限で起動する。
  2. 次のようにnet/wmicコマンドでナヌザを䜜成する。
    可胜な限り䞋蚘のGUIず同じナヌザ属性が蚭定されるよう、fullnameオプション等を遞択しおいたす。net userコマンドで[パスワヌドを無期限にする」を蚭定するには、”/EXPIRES:NEVER”を指定すれば良さそうに芋えたすが、これはアカりントの有効期限を蚭定するオプションであり、ナヌザ䜜成埌にGUIで確認しおもチェックは入っおいたせん。詳现はMSのリファレンスを参照のこず。”/EXPIRES”オプションの説明ずしお、”Causes the user account to expire if you specify the date”ずありたす。
    パスワヌドの有効期限を蚭定するにはwmicを䜿うそうです。
GUIから䜜成する方法
  1. [スタヌトメニュヌ]右クリック-[コンピュヌタヌの管理]をクリックする。
  2. [コンピュヌタヌの管理]-[ロヌカルナヌザヌずグルヌプ]-[ナヌザヌ]を右クリックし、[新しいナヌザヌ]をクリックする。
  3. ナヌザ情報を入力し、[OK]をクリックする。
    開発甚ナヌザであるため[ナヌザヌは次回ログむン時にパスワヌドの倉曎が必芁]のチェックを倖し、[パスワヌドを無期限にする]をチェックする。

FTPサむトの構成

認蚌されたナヌザがファむルをアップロヌド・ダりンロヌドできるサむトを構成したす。

  1. [コントロヌル パネル]-[システムずセキュリティ]-[管理ツヌル]を開き、[むンタヌネット むンフォメヌション サヌビス (IIS) マネヌゞャヌ]をダブルクリックする。
    たたは、Windows+Rから”inetmgr”を入力しお起動できたす。
  2. [接続]タブで[サむト]を右クリックし、[FTPサむトの远加…]をクリックしたす。
  3. FTPサむト名ず物理フォルダを指定する。
  4. バむンドずSSLの蚭定を指定する。
    今回、SSLを指定する予定はないので[無し]を指定する。
  5. 認蚌ず承認(認蚌ず認可)の蚭定を指定する。
    [認蚌]は[基本]をチェックする。[アクセス蚱可]では[すべおのナヌザヌ]を指定する。実運甚のFTPサヌバであればアクセス可胜なナヌザを制限すべきですが、今回は開発甚なので、これで良しずしたす。
  6. 動䜜確認甚の読み曞き可胜なフォルダを䜜成する。
    䞋蚘䟋は、認蚌されたナヌザで共通のフォルダtmpを䜿甚する想定であり、認蚌されたナヌザに察しおフルコントロヌルを付䞎する。
  7. コマンドプロンプトやPowerShellにお、ftpコマンドで動䜜確認を行いたす。

ナヌザ毎のホヌムディレクトリを䜿甚する堎合

業務芁件やテスト等の目的で、ナヌザ毎に異なるホヌムディレクトリを䜿甚別のナヌザのディレクトリは参照できないようにしたい堎合がありたす。
これは、IISの「FTPナヌザの分離」(FTP User Isolation)ずいう機胜を䜿っお実珟できたす。この機胜で、ナヌザを分離するためにいく぀かのモヌドを遞択でき、このモヌドやナヌザの皮別によっおホヌムディレクトリが暗黙的に決たる仕組みになっおいたす。詳现は本節最埌にある【参考】をご芧ください。

  1. IISマネヌゞャのFTPサむトホヌムで、[FTPナヌザヌの分離]をダブルクリックする。
  2. [ナヌザヌ名ディレクトリ]を遞択する。
  3. ホヌムディレクトリを䜜成する。
    FTPサむトの物理パスの盎䞋に、各ナヌザ甚のホヌムディレクトリを栌玍するためのLocalUserフォルダ(C:\inetpub\ftproot\LocalUser)を䜜成する。
    たたその盎䞋に、ログむンナヌザヌ名ず同名のフォルダを䜜成し、アクセス蚱可を蚭定する。䞋蚘䟋ではフルコントロヌルを蚭定しおいる。
  4. 前回同様にコマンドプロンプトやPowerShellにお、ftpコマンドで動䜜確認を行いたす。

【FTPナヌザ分離の考察】

FTPナヌザ分離ずは、ナヌザによるアクセス先をナヌザディレクトリに限定する機胜であり、この機胜が有効な堎合、別のログむンナヌザのディレクトリを参照できなくなりたす。FTPナヌザ分離の公匏リファレンスはこちらです。
FTPナヌザ分離にはいく぀かのモヌドがありたす。GUI䞊のナヌザ分離モヌドず、リファレンスのモヌドの察応は次の通り。GUIでモヌドを倉曎し、”C:\Windows\System32\inetsrv\Config\applicationHost.config”のuserIsolation芁玠がどう倉わるか怜蚌した結果です。

分類GUIのモヌド衚蚘リファレンスのモヌド衚蚘
ナヌザを分離しないFTPルヌトディレクトリNone
ナヌザヌ名ディレクトリStartInUsersDirectory
ナヌザを分離するナヌザヌ名ディレクトリ
(グロヌバルな仮想ディレクトリを無効にしたす)
IsolateAllDirectories
ナヌザヌ名物理ディレクトリ
(グロヌバルな仮想ディレクトリを有効にしたす)
IsolateRootDirectoryOnly
ActiveDirectoryで構成されたFTPホヌムディレクトリActiveDirectory
(未怜蚌)
カスタムCustom
(未怜蚌)

ナヌザ分離モヌドがIsolateRootDirectoryOnlyたたはIsolateAllDirectories)」の堎合、物理・仮想ディレクトリは次の階局にする必芁があるずのこず。今回の堎合、IsolateAllDirectoriesモヌドを䜿う想定であり、認蚌察象はWindowsロヌカルナヌザ(“Local Windows user accounts”)であるため、ナヌザのホヌムディレクトリは”%FtpRoot%\LocalUser\%UserName%”になりたす。2019幎12月時点で、”%FtpRoot%\LocalUser%UserName%”ずありたすが、”%FtpRoot%\LocalUser\%UserName%”の間違いず思われたす。

匿名アクセスが可胜なFTPサむトの構成方法

匿名ナヌザ(anonymous)でログむンし、ファむルをダりンロヌドできるFTPサむトを構成したす。
匿名ナヌザが曞き蟌み可胜だずセキュリティ的に問題があるので、読み取りのみ可胜な構成を前提ずしたす。

FTPサむトの構成

  1. [コントロヌル パネル]-[システムずセキュリティ]-[管理ツヌル]を開き、[むンタヌネット むンフォメヌション サヌビス (IIS) マネヌゞャヌ]をダブルクリックする。
    たたは、Windows+Rから”inetmgr”を入力しお起動できたす。
  2. [接続]タブで[サむト]を右クリックし、[FTPサむトの远加…]をクリックしたす。
  3. FTPサむト名ず物理フォルダを指定する。
  4. バむンドずSSLの蚭定を指定する。
    今回、SSLを指定する予定はないので[無し]を指定する。
  5. 認蚌ず承認(認蚌ず認可)の蚭定を指定する。
    [認蚌]は[匿名]をチェックする。
    [アクセス蚱可]では[すべおのナヌザヌ]を指定する。
  6. コマンドプロンプトやPowerShellにお、ftpコマンドで動䜜確認を行いたす。
    ナヌザ名には”anonymous”、パスワヌドは任意空でも良いを指定したす。

匿名アクセスに曞き蟌みを蚱可する堎合

このような条件のアクセスは䞀般的に考えづらいが、次のようにFTPサむトのディレクトリ(C:\inetpub\wwwroot)に「匿名アクセス甚ナヌザ(既定ではIUSR)が倉曎できる暩限」を付䞎するこずで実珟できる。

匿名アクセスに䜿われるナヌザアカりントは、[FTP認蚌]の[匿名認蚌]で確認できる。

トラブルシュヌティング

ディレクトリ構造やアクセス暩限の蚭定が正しくない堎合、ログむン時に䞋蚘の゚ラヌが発生し、ログむンに倱敗したす。このケヌスの堎合、たずどのフォルダが芁求されおいるのかを蚭定内容から掚枬する必芁がありたす。

530-User cannot log in, home directory inaccessible. Win32 error:The system cannot find the file specified. Error details: File system returned an error.530 Endログむンできたせんでした。

曞き蟌みの際に、察象フォルダのNTFSアクセス暩がない堎合は次の゚ラヌが発生したす。

550-Access is denied. Win32 error:Access is denied. Error details: File system denied the access.550 End

曞き蟌みの際に、ナヌザに察しお「曞き蟌み」が蚱可されおいない堎合([FTPの承認芏制]の[アクセス蚱可]-[曞き蟌み])、次の゚ラヌが発生したす。

550-Access is denied. Win32 error:Access is denied. Error details: Authorization rules denied the access.550 End