預設 FTP 命令篩選設定 < 命令篩選>

概觀

元素 <commandFiltering> 會指定 FTP 服務將允許或拒絕的 FTP 命令集合。 元素 <commandFiltering> 包含語句的 <add> 集合,可個別指定是否允許或拒絕特定的 FTP 命令。

注意

設定要允許或拒絕的 FTP 命令,以及是否要拒絕未列出的命令時,必須特別注意。 例如,拒絕許多命令,例如 USER、PASS、PASV、PORT 等,會使 FTP 網站無法運作。 同樣地,預設拒絕未列出的命令可能太嚴格,而且許多 FTP 用戶端將無法存取您的 FTP 網站。

元素中的 <commandFiltering> 集合與設定相關 <requestFiltering> ;不過,雖然要求篩選適用于檔案和目錄,而且可以針對每個 URL 進行設定,但元素下的 <commandFiltering> 設定會套用通訊協定層級的處理,而且只能在月臺層級設定。

元素的其他屬性 <commandFiltering>maxCommandLineallowUnlisted 。 分別設定命令列長度上限,以及是否允許未列出的命令。

相容性

版本 備註
IIS 10.0 未在 IIS 10.0 中修改專案 <commandFiltering>
IIS 8.5 未在 IIS 8.5 中修改專案 <commandFiltering>
IIS 8.0 未在 IIS 8.0 中修改專案 <commandFiltering>
IIS 7.5 元素 <commandFiltering><security> 元素隨附為 IIS 7.5 的功能。
IIS 7.0 元素 <commandFiltering><security> 元素是在 FTP 7.0 中引進,這是 IIS 7.0 的個別下載專案。
IIS 6.0 IIS 6.0 中的 FTP 服務不支援命令篩選。

注意

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 伺服器]。

    注意

    支援 ASP。FTP 服務的成員資格驗證或 IIS 管理員驗證,除了FTP 服務之外,您還需要選取[FTP 擴充性]。
    [伺服器角色] 頁面的螢幕擷取畫面,其中已展開 F T P 伺服器節點,並已選取 F T P 擴充性。.

  5. [下一步],然後在 [ 選取功能 ] 頁面上,再次按 [ 下一步 ]。

  6. 在 [確認安裝選項] 頁面上,按一下 [安裝]

  7. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或 Windows 8.1

  1. 在 [開始] 畫面上,將指標一路移至左下角,以滑鼠右鍵按一下 [開始] 按鈕,然後按一下[主控台]。

  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。

  3. 展開 [Internet Information Services],然後選取 [ FTP 伺服器]。

    注意

    支援 ASP。FTP 服務的成員資格驗證或 IIS 管理員驗證,您也必須選取 [FTP 擴充性]。
    已展開 [Internet Information Services] 和 [F T P 伺服器] 窗格的螢幕擷取畫面,並醒目提示 F T P 擴充性。

  4. 按一下 [確定]。

  5. 按一下 [關閉] 。

Windows Server 2008 R2

  1. 在工作列上,按一下 [開始],指向 [系統管理工具],然後按一下[伺服器管理員]。

  2. [伺服器管理員階層] 窗格中,展開 [角色],然後按一下 [Web 服務器] (IIS)

  3. 在 [ Web Server (IIS) ] 窗格中,捲動至 [ 角色服務 ] 區段,然後按一下 [ 新增角色服務]。

  4. 在 [新增角色服務精靈] 的 [選取角色服務] 頁面上,展開[FTP 伺服器]。

  5. 選取 [FTP 服務]。

    注意

    支援 ASP。FTP 服務的成員資格驗證或 IIS 管理員驗證,您也必須選取 [FTP 擴充性]。
    [選取角色服務] 頁面的螢幕擷取畫面,其中已展開 F T P 伺服器節點,並已選取 F T P 服務。

  6. 按一下 [下一步] 。

  7. 在 [確認安裝選項] 頁面上,按一下 [安裝]

  8. 在 [結果] 頁面上,按一下 [關閉]

Windows 7

  1. 在工作列上,按一下 [開始],然後按一下[主控台]。

  2. 主控台中,按一下 [程式和功能],然後按一下[開啟或關閉 Windows 功能]。

  3. 展開 [Internet Information Services],然後展開 [ FTP 伺服器]。

  4. 選取 [FTP 服務]。

    注意

    支援 ASP。FTP 服務的成員資格驗證或 IIS 管理員驗證,您也必須選取 [FTP 擴充性]。
    已展開 [Internet Information Services] 和 [F T P 伺服器] 窗格的螢幕擷取畫面,其中已選取 F T P 擴充性和 F T P 服務。

  5. 按一下 [確定]。

Windows Server 2008 或 Windows Vista

  1. 從下列 URL 下載安裝套件:

  2. 請遵循下列逐步解說中的指示來安裝 FTP 服務:

作法

如何使用命令篩選來拒絕 FTP 網站的 FTP 命令

注意

下列步驟使用 FTP 要求篩選使用者介面,這是 FTP 7.5 中引進的;如果您使用 FTP 7.0,這些步驟將無法運作。

  1. 開啟 [Internet Information Services (IIS) 管理員

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager
  2. 在 [ 連線] 窗格中,展開伺服器名稱、展開 [ 台] 節點,然後按一下網站的名稱。

  3. 在網站的 [ 首頁 ] 窗格中,按兩下 [FTP 要求篩選 ] 功能。

  4. 按一下 [ 命令] 索引標籤
    F T P 要求篩選功能的螢幕擷取畫面,其中顯示 [動作] 窗格中的 [拒絕命令] 選項。

  5. 按一下 [動作] 窗格中的[拒絕命令...]。

  6. 輸入要拒絕的 FTP 命令。 例如:

    • 許多 FTP 用戶端不會傳送或需要 SYST 命令,這可能會顯示作業系統的相關資訊。
    • FTP 7.0 和 FTP 7.5 不會實作 ACCT 命令,因此可能會安全地封鎖它。
  7. 按一下 [確定]。
    [拒絕命令] 對話方塊的螢幕擷取畫面,其中已填入 [S Y S T 命令] 方塊。

組態

元素 <commandFiltering> 是在月臺層級設定。

屬性

屬性 描述
maxCommandLine 選擇性 uint 屬性。

指定命令列長度上限。 它包含命令和參數。 不會處理超過設定限制的行。

預設值是 4096
allowUnlisted 選擇性 Boolean 屬性。

指定是否允許未列出的命令。

預設值是 true

子元素

元素 描述
add 選擇性項目。

將專案加入 FTP 命令的集合。
clear 選擇性項目。

清除 FTP 命令的集合。
remove 選擇性項目。

從 FTP 命令的集合中移除專案。

組態範例

下列組態範例會顯示預設停用 SYST 命令之伺服器的範例 < siteDefaults > 元素。 SYST 命令會傳回 FTP 伺服器的主機作業系統。

<siteDefaults>
   <ftpServer>
      <security>
         <commandFiltering>
            <add command="SYST" allowed="false" />
         </commandFiltering>
      </security>
   </ftpServer>
</siteDefaults>

範例程式碼

下列程式碼範例示範如何設定 FTP 服務,以預設拒絕 SYST 命令。 SYST 命令會傳回 FTP 伺服器的主機作業系統。

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /+"siteDefaults.ftpServer.security.commandFiltering.[command='SYST',allowed='False']" /commit:apphost

注意

當您使用 AppCmd.exe 來設定這些設定時,請務必將 認可 參數 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 sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElement siteDefaultsElement = sitesSection.GetChildElement("siteDefaults");
         ConfigurationElement ftpServerElement = siteDefaultsElement.GetChildElement("ftpServer");

         ConfigurationElement securityElement = ftpServerElement.GetChildElement("security");
         ConfigurationElement commandFilteringElement = securityElement.GetChildElement("commandFiltering");
         ConfigurationElementCollection commandFilteringCollection = commandFilteringElement.GetCollection();
         ConfigurationElement addElement = commandFilteringCollection.CreateElement("add");
            addElement["command"] = @"SYST";
            addElement["allowed"] = false;
            commandFilteringCollection.Add(addElement);

         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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim siteDefaultsElement As ConfigurationElement = sitesSection.GetChildElement("siteDefaults")
      Dim ftpServerElement As ConfigurationElement = siteDefaultsElement.GetChildElement("ftpServer")

      Dim securityElement As ConfigurationElement = ftpServerElement.GetChildElement("security")
      Dim commandFilteringElement As ConfigurationElement = securityElement.GetChildElement("commandFiltering")
      Dim commandFilteringCollection As ConfigurationElementCollection = commandFilteringElement.GetCollection
      Dim addElement As ConfigurationElement = commandFilteringCollection.CreateElement("add")
         addElement("command") = "SYST"
         addElement("allowed") = False
         commandFilteringCollection.Add(addElement)
 
      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

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

var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults");
var ftpServerElement = siteDefaultsElement.ChildElements.Item("ftpServer");

var securityElement = ftpServerElement.ChildElements.Item("security");
var commandFilteringElement = securityElement.ChildElements.Item("commandFiltering");
var commandFilteringCollection = commandFilteringElement.Collection;
var addElement = commandFilteringCollection.CreateNewElement("add");
   addElement.Properties.Item("command").Value = "SYST";
   addElement.Properties.Item("allowed").Value = false;
   commandFilteringCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults")
Set ftpServerElement = siteDefaultsElement.ChildElements.Item("ftpServer")

Set securityElement = ftpServerElement.ChildElements.Item("security")
Set commandFilteringElement = securityElement.ChildElements.Item("commandFiltering")
Set commandFilteringCollection = commandFilteringElement.Collection
Set addElement = commandFilteringCollection.CreateNewElement("add")
   addElement.Properties.Item("command").Value = "SYST"
   addElement.Properties.Item("allowed").Value = False
   commandFilteringCollection.AddElement(addElement)

adminManager.CommitChanges()