Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

FTPプロトコルは40年以上の歴史を持つ、最も古いプロトコルのひとつですが、シンプルなファイル転送が必要な場面では今なお広く利用されています。MicrosoftのOSであれば、どのバージョンにもFTPサーバーをインストール可能です。FTPサービスの大規模な近代化が行われたのはWindows 7 / Server 2008 R2の時代で、サービスのコードはほぼゼロから書き直されました。これによりセキュリティが大幅に向上し、多くの新機能が追加されています。その中でも注目すべき機能が「FTPユーザーの分離(User Isolation)」です。この機能を使うと、1台のFTPサーバー上で多数のユーザーそれぞれに専用フォルダへのアクセスを制限できます。

ユーザー分離を有効にすると、各ユーザーは自分のフォルダ内でのみ作業でき、FTPディレクトリツリーの上位階層へ移動することはできません(ユーザーにとっては、自分のホームディレクトリがFTPサーバーのルートとして表示されます)。これにより、FTPサーバー上の他ユーザーのデータへのアクセスを防止できます。FTPユーザー分離は、ISPやホスティング事業者が、単一のファイルストレージに対してユーザーごとの個別アクセスを提供する必要がある場合に広く活用されています。

従来のWindowsバージョンと同様に、Windows Server 2016 / 2012 R2のFTPサービス(sFTPやTFTPとは別物なので注意してください)はIISサービスに深く統合されており、共通の管理インターフェースを持っています。

本記事では、Windows Server 2016 / 2012 R2にIISベースのFTPサーバーをインストールし、FTPユーザー分離を構成する方法を解説します(この手順はWindows 10および8.1にも適用できます)。

Windows Server 2016 / 2012 R2へのFTPサーバーロールのインストール方法

サーバーマネージャーコンソールを使用して、「Webサーバー(IIS)→ FTPサーバー」セクションにある「FTP Service」「FTP Extensibility」のオプションにチェックを入れることで、FTPサービスをインストールできます。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

また、PowerShellコマンド1つでもFTPサーバーの役割をインストールできます。
Install-WindowsFeature Web-FTP-Server
Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

FTPサーバー管理コンソールをインストールするには、次のコマンドを実行します。

Install-WindowsFeature -Name "Web-Mgmt-Console"

FTPサイトの作成とユーザー権限の管理

サーバーマネージャーを起動し、IIS管理コンソール(インターネット インフォメーション サービス マネージャー)を開きます。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

新しいFTPサイトを作成します(「サイト」→「FTPサイトの追加」)。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

FTPサイト名:MyTestSite

FTPサイトのルートディレクトリ:C:\inetpub\ftproot

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

ネットワーク上で転送されるFTPデータを保護するため、FTPにSSLを構成することも可能です(この場合、セッション中にFTPユーザーが送信するすべてのデータとパスワード/アカウント情報が暗号化されます)。ただし、本記事のデモンストレーションでは不要です。その他の設定はデフォルトのままにしておきます。

PowerShellモジュールWebAdministrationを使用してFTPサイトを管理することもできます。例えば、新しいFTPサイトを作成するには、以下のコマンドを実行するだけです。

Import-Module WebAdministration
# FTPサイト名を設定
$FTPSiteName = 'CORP_FTP'
# FTPフォルダ
$FTPRoot = 'D:\www\FTPRoot'
# FTPポート
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort

作成したFTPサイトを選択し、「FTP認証」セクションで匿名認証(Anonymous Authentication)を無効にします。基本認証(Basic Authentication)は有効にしておく必要があります。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

Windows Server 2016 / 2012 R2のFTPサービスでは、ドメインアカウントとローカルアカウントの2種類のアカウントを利用できます。アカウントの種類によって、FTPディレクトリ構造やユーザー分離の設定方法が異なります。説明を簡単にするため、ここではローカルのWindowsアカウントを使用します。

FTPユーザーをいくつか作成しましょう。ここでは、ftp_user1ftp_user2ftp_user3の3人とします。さらに、これらのユーザーを含むグループftp_usersも作成します。ローカルユーザーは、コンピューターの管理コンソールの「ローカル ユーザーとグループ」セクションで作成できます。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

コマンドプロンプト(またはPowerShell)からローカルユーザーとグループを作成することも可能です。まずローカルグループを作成します。
net localgroup ftp_users /add
Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

新しいローカルユーザーを作成します。
net user ftp_user1 /add *
Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

ユーザーをグループに追加します。
net localgroup ftp_users ftp_user1 /add
Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

残りの2人のユーザーも同じ手順で作成します。

C:\inetpub\ftprootディレクトリに対して、ftp_usersグループに読み取り・書き込み(Read&Write)権限を割り当てます。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

C:\inetpub\ftprootフォルダ内にLocalUserという名前のディレクトリを作成します(この名前は正確である必要があります。重要!)。続いて、C:\inetpub\ftproot\LocalUser配下に、ftp_user1、ftp_user2、ftp_user3という名前の3つのディレクトリを作成します。

注意: アカウントの種類に応じて、以下のようなディレクトリ構造を作成する必要があります(%FtpRoot%はFTPサイトのルートを指します。本記事の場合はC:\inetpub\ftproot\です)。

アカウントの種類 ホームディレクトリの命名規則
匿名ユーザー %FtpRoot%\LocalUser\Public
ローカルWindowsアカウント %FtpRoot%\LocalUser\%UserName%
ドメインWindowsアカウント %FtpRoot%\%UserDomain%\%UserName%
IISマネージャーまたはASP.NETアカウント %FtpRoot%\LocalUser\%UserName%

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

IISコンソールに戻り、サイトの「FTP許可規則」セクションで新しい規則を作成します(「許可規則の追加」)。ftp_usersグループに読み取り・書き込み権限を付与するよう指定します。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

Windows Server 2016 / 2012 R2でFTPユーザー分離を構成する方法

それでは、FTPユーザー分離の構成に移りましょう。FTPユーザー分離は、サーバー全体ではなくFTPサイトレベルで設定します。この機能により、ユーザーごとに個別のFTPホームフォルダを用意できます。

FTPサイトの設定で「FTPユーザーの分離」を開きます。

このセクションには複数の設定項目があります。最初の2つはユーザー分離を行わないオプションです。

  1. FTPルートディレクトリ(ユーザーのFTPセッションはFTPサイトのルートディレクトリから開始される);
  2. ユーザー名ディレクトリ(ユーザーはユーザー名と同名の物理/仮想ディレクトリから開始される。ディレクトリが存在しない場合は、サイトのFTPルートディレクトリからセッションが開始される)。

残りの3つのオプションは、それぞれ異なるユーザー分離モードです。

  • ユーザー名ディレクトリ(グローバル仮想ディレクトリを無効化):ユーザーのFTPセッションは、FTPユーザー名と同じ名前の物理/仮想ディレクトリ内に分離されます。ユーザーは自分のディレクトリのみを表示でき(これがユーザーのFTPルートディレクトリになります)、それより上位の階層へは移動できません。グローバル仮想ディレクトリはすべて無視されます;
  • ユーザー名の物理ディレクトリ(グローバル仮想ディレクトリを有効化):ユーザーのFTPセッションは、FTPユーザーアカウント名と同じ名前の物理ディレクトリ内に分離されます。ユーザーは自分のディレクトリより上位へは移動できませんが、作成済みのグローバル仮想ディレクトリにはアクセスできます;
  • Active Directoryで構成されたFTPホームディレクトリ:FTPユーザーは、Active Directoryアカウントの設定で指定されたホームディレクトリ(FTPRootおよびFTPDirプロパティ)内に分離されます。

重要: グローバル仮想ディレクトリが有効な場合、適切なNTFS権限を持っていれば、すべてのユーザーがFTPサイトのルートに設定されたすべての仮想ディレクトリにアクセスできる点に注意してください。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

必要な分離モードを選択します(本記事では2番目のオプションでFTPユーザーを分離しています)。

FTPサイトの設定を変更した後は、Microsoft FTPサービス(FTPSVC)の再起動をおすすめします。

FTPサーバーへのアクセスのためのWindowsファイアウォール規則の構成

FTPサーバーの役割をインストールすると、ユーザーがFTPにアクセスするために必要な規則は、Windowsファイアウォールの設定で自動的に有効化されます。

パッシブFTPモードでFTPを正しく動作させるには、ユーザーがRPCポート範囲(1025〜65535)に接続できる必要があります。外部ファイアウォールでこれらすべてのポートを開放しないために、FTPデータ転送に使用される動的TCPポートの範囲を限定することができます。

  1. FTPサイトの設定で「FTPファイアウォールのサポート」セクションを開き、「データチャネルのポート範囲」フィールドに、FTP接続に使用したいポート範囲を指定します。例:50000〜50100;Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法
  2. 変更を保存し、IISを再起動します(iisreset);
  3. Windowsコントロールパネルを開き、「コントロール パネル\システムとセキュリティ\Windows ファイアウォール\アプリの許可」に移動します;
  4. ファイアウォール経由のアクセスが許可されているアプリの一覧に、FTPサーバーの役割に対する許可が含まれていることを確認します。Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

次に、「セキュリティが強化された Windows ファイアウォール」の設定で、以下の規則が有効になっていることを確認します。

  • FTP サーバー(FTP Traffic-In):TCPプロトコル、ポート21;
  • FTP サーバー パッシブ(FTP Passive Traffic-In):ローカルポート1024〜65535(本記事の場合は50000〜50100);
  • FTP サーバー セキュリティで保護(FTP SSL Traffic-In):ポート990(SSL使用時);
  • FTP サーバー(FTP Traffic-Out):ポート20;
  • FTP サーバー セキュリティで保護(FTP SSL Traffic-Out):ポート989(SSL使用時)。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

外部のFTPユーザーがサイトに接続できるようにするには、これらのポートをルーター(ゲートウェイ、ファイアウォール)側でも開放する必要があります。

WindowsからのFTPサーバー接続テスト

Test-NetConnectionコマンドレットを使用して、FTPサーバーのポート疎通を確認できます。

Test-NetConnection -ComputerName yourftpservername -Port 21

または、ftpコマンドを使用します。

ftp yourftpservername

任意のFTPクライアント、またはエクスプローラーから直接(アドレスバーに ftp://yourservername/ を指定して)、FTPサイトへの接続を試みてください。

ユーザー名とパスワードを入力します。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

すると、ユーザーのファイルが格納されたホームディレクトリ(ユーザーにとってはFTPサイトのルート)にアクセスできます。ご覧のとおり、ユーザーセッションは分離されており、ユーザーはFTPサーバー上の自分のファイルしか表示できません。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

ヒント: 匿名アクセス(すべての匿名ユーザー)を許可する場合、ユーザー名にanonymousまたはguest、パスワードにメールアドレスを指定すれば、誰でもFTPサーバーに接続できるようになります。匿名でFTPサイトに接続した場合、セッションはLocalUser\Publicディレクトリに制限されます(当然ながら、Publicディレクトリは事前に作成しておく必要があります)。

FTPログを利用すると、FTPサーバーへのユーザーアクセスに関する情報を確認できます。ログファイルはデフォルトでc:\inetpub\logs\logfilesフォルダに、u_exYYMMDD.logという形式で保存されます。

FTPサーバーへのアクティブなユーザー接続を表示するには、PowerShellからIISパフォーマンスカウンターの値を参照するか、IISコンソールの「現在のFTPセッション」セクションを使用します。このコンソールでは、FTPユーザーの名前とIPアドレスを確認でき、必要に応じてFTPセッションを切断することも可能です。

Windows Server 2016/2012 R2でユーザー分離機能を使ったFTPサーバーを構築する方法

以上、Windows Server 2016 / 2012 R2をベースに、ユーザー分離機能を備えたFTPサイトを構成する方法を解説しました。分離モードでは、ユーザーはローカルまたはドメインの資格情報を使用してFTP認証を受け、ユーザー名に対応する各自のルートディレクトリにアクセスすることになります。

  1. Windows Server Backupを使ってActive Directoryサーバー(2016/2012)をバックアップ・スケジュールする方法

    本記事では、Windows Server Backupアプリケーションを使用して、Active Directoryが稼働するWindows Server 2016またはServer 2012をバックアップする方法をご紹介します。この記事を読み終える頃には、Windows Server 2016/2012上でサーバーの完全バックアップを実行・スケジュール設定できるようになり、万一トラブルが発生した際にもサーバーを復元できるようになります。 ご存じのとおり、Windows Server 2008、2012/2012R2、2016では「システムの復元」機能は利用できません(サポートされていません)。

  2. Windows Server 2016/2012でバックアップを削除する方法|wbadminコマンドの使い方を徹底解説

    Windows Serverバックアップユーティリティを使用して、Active DirectoryやスタンドアロンのWindows Server 2016または2012のバックアップを行っていると、バックアップコピーが複数蓄積されることで、バックアップ先ディスクの容量が不足することがあります。このような問題でお困りの方は、ぜひ本記事をご覧ください。 Windows Serverバックアップツールを使用すると、管理者はオペレーティングシステム、インストール済みアプリケーション、Active Directoryに関するすべての情報(システム状態バックアップ)を含むサーバーデータ全体のフルバックアッ