网站搜索

在 Windows Server 2016/2012 R2 上配置具有用户隔离的 FTP 服务器


FTP 协议是最古老的协议之一(已有 40 多年的历史),但在需要简单文件传输协议的地方仍然广泛使用。可以在任何版本的 Microsoft 操作系统上安装 FTP 服务器。 ftp服务的最后一次深度现代化是在Windows 7/Server 2008 R2中进行的(实际上服务代码几乎是从头开始编写的)。服务的安全性显着提高,并出现了许多新功能。特别是,Windows 上的 FTP 服务器允许您配置FTP 用户隔离。它允许限制许多用户对单个 FTP 服务器上自己的文件夹的访问。

由于隔离,用户只能使用自己的文件夹,而无法进入 FTP 目录树(用户的顶级 ftp 级别目录显示为 FTP 服务器的根目录)。这样就可以防止其他用户访问FTP服务器上的数据。当需要为不同用户提供对单个文件存储的单独访问时,ISP/托管提供商广泛使用 FTP 用户隔离。

与以前的 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服务器角色?

您可以使用服务器管理器控制台安装 FTP 服务,方法是选中网络服务器 (IIS) -> FTP 服务器部分中的FTP 服务和FTP 扩展性选项。

您还可以使用单个 PowerShell 命令安装 FTP 服务器角色:

Install-WindowsFeature Web-FTP-Server

要安装FTP服务器管理控制台,请运行以下命令:

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

创建FTP站点、管理FTP用户权限

启动服务器管理器并打开 IIS 管理控制台(Internet 信息服务管理器)。

创建新的 FTP 站点(站点 -> 添加 FTP 站点)。

FTP 站点的名称:MyTestSite

FTP站点的根目录:C:\inetpub tproot

为了保护通过网络传输的FTP数据,可以为FTP配置FTPS/SSL(在这种情况下,ftp用户在会话期间发送的所有数据和密码/帐户都将被加密),但在我们的演示中这不是必需的。所有其他设置均保留默认值。

您可以使用 PowerShell 模块WebAdministration 管理您的 FTP 站点。例如,要创建一个新的 FTP 站点,只需运行以下命令:

Import-Module WebAdministration
# Set the FTP site name
$FTPSiteName = 'CORP_FTP'
#FTP folder
$FTPRoot = 'D:\www\FTPRoot'
#FTP port
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort

选择一个新的 FTP 站点并在 FTP 身份验证部分中禁用匿名身份验证。基本身份验证必须启用。

Windows Server 2016/2012 R2 上的 FTP 服务可以使用两种帐户类型:域帐户类型和本地帐户类型。根据帐户类型的不同,FTP 目录结构和用户隔离设置存在一些差异。为了更容易描述,我们将使用本地 Windows 帐户。

创建一些 FTP 用户,假设是 ftp_user1、ftp_user2 和 ftp_user3。还要创建一个包含这些用户的组ftp_users。您可以在计算机管理控制台的本地用户和组部分创建本地用户。

您还可以从命令提示符(或使用 PowerShell)创建本地用户和组。创建本地组:

net localgroup ftp_users /add

创建一个新的本地用户:

net user ftp_user1 /add *

将用户添加到组:

net localgroup ftp_users ftp_user1 /add

以同样的方式创建其他两个用户。

为 ftp_users 组分配目录 C:\inetpub tproot 的读写权限。

在文件夹 C:\inetpub tproot 中创建一个名为 LocalUser 的目录(名称必须相同,这很重要!!!)。然后在文件夹 C:\inetpub tproot\LocalUser 下创建三个名为 ftp_user1、ftp_user2、ftp_user3 的目录。

注意。 根据帐户类型,您必须创建以下目录结构(在 %FtpRoot%\ 下,我们指的是 FTP 站点的根目录;在我们的示例中为 C:\inetpub tproot\):

Account TypeSyntax of Home Directory Naming
Anonymous users%FtpRoot%\LocalUser\Public
Local Windows account%FtpRoot%\LocalUser\%UserName%
Domain Windows account%FtpRoot%\%UserDomain%\%UserName%
Special IIS Manager or ASP.NET accounts%FtpRoot%\LocalUser\%UserName%

返回 IIS 控制台并在站点的 FTP 授权规则 部分创建新规则 (添加允许规则)。指定ftp_users组必须具有读写权限。

如何在Windows Server 2016/2012 R2上配置FTP用户隔离?

让我们开始配置 FTP 用户隔离。 FTP 用户的隔离是在 FTP 站点级别配置的,而不是在整个服务器上配置的。 FTP 用户隔离允许您为每个用户组织 ftp-home 文件夹。

在 FTP 站点的设置中打开FTP 用户隔离。

本节包含多项设置。其中前两个不建议用户隔离:

  1. FTP根目录(用户的FTP会话在FTP站点的根目录中启动);

  2. 用户名目录(用户从带有用户名的物理/虚拟目录开始。如果该目录丢失,会话将在站点的根 FTP 目录中启动)。

接下来的三个选项是不同的用户隔离模式:

  • 用户名目录(禁用全局虚拟目录)建议将用户的ftp会话隔离在与ftp用户同名的物理/虚拟目录中。用户只能看到他们自己的目录(这是他们的 ftp 根目录)并且不能超越它(到 FTP 树的上层目录)。任何全局虚拟目录都会被忽略;

  • 用户名物理目录(启用全局虚拟目录)表示用户的ftp会话被隔离在与ftp用户帐户名称相同的物理目录中。用户不能访问其目录之上。但是,所有创建的全局虚拟目录都可供用户使用;

  • 在 Active Directory 中配置的 FTP 主目录 - FTP 用户被隔离在其 Active Directory 帐户设置(FTPRoot 和 FTPDir 属性)中指定的主目录中。

重要。 如果全局虚拟目录处于活动状态,则所有用户都可以访问 FTP 站点根目录中设置的所有虚拟目录(如果他们具有适当的 NTFS 权限)。

选择需要的隔离模式(我使用第二个选项来隔离ftp用户)。

建议对 FTP 站点设置进行任何更改后重新启动 Microsoft FTP 服务 (FTPSVC)。

配置Windows防火墙访问FTP服务器的规则

安装 FTP 服务器角色时,用户访问 FTP 所需的所有必要规则都会在 Windows 防火墙设置中自动激活。

为了使 FTP 在被动 FTP 模式下正常工作,用户需要连接到 RPC 端口范围 (1025-65535)。为了不在外部防火墙上打开所有这些端口,您可以限制用于 FTP 数据传输的动态 TCP 端口的范围。

  1. 打开 FTP 站点设置中的FTP 防火墙支持部分,并在数据通道端口范围字段中指定要用于 FTP 连接的端口范围。例如 - 50000-50100;

  2. 保存更改并重新启动 IIS (

    iisreset

    );

  3. 打开 Windows 控制面板并转到控制面板\系统和安全\Windows 防火墙\允许的应用程序;

  4. 确保允许通过防火墙访问的应用程序列表包含FTP 服务器角色的权限。

然后检查高级安全 Windows 防火墙的设置中是否启用了以下规则:

  • FTP 服务器 (FTP Traffic-In) - TCP 协议,端口 21;

  • 被动 FTP 服务器(FTP 被动流量输入)- 本地端口地址 1024-65535(在我们的示例中为 50000-50100);

  • FTP 服务器安全(FTP SSL 流量输入)——端口 990(使用带有 SSL 的 FTP 时);

  • FTP 服务器(FTP 流量输出)- 端口 20;

  • FTP 服务器安全(FTP SSL 流量输出)- 端口 989(使用带有 SSL 的 FTP 时)。

因此,需要在您的路由器(网关、防火墙)上打开这些端口,以便外部 FTP 用户可以连接到您的站点。

从 Windows 测试 FTP 服务器连接

您可以使用 Test-NetConnection cmdlet 检查 FTP 服务器上端口的可用性:

Test-NetConnection -ComputerName yourftpservername -Port 21

或者使用ftp命令:

ftp yourftpservername

尝试使用任何 FTP 客户端或直接从文件资源管理器连接到您的 FTP 站点(在地址栏中指定 ftp://yourservername/)。

输入用户名和密码。

现在您可以访问包含用户文件的主目录(这是用户 FTP 站点的根目录)。正如我们所看到的,用户会话是隔离的,用户只能看到自己在 ftp 服务器上的文件。

提示。 如果您想使用匿名访问(所有匿名用户),任何用户都可以使用以下凭据连接到您的 FTP 服务器:anonymous 或 guest 作为用户名,使用电子邮件地址作为密码。如果您匿名连接到FTP站点,会话将被限制在LocalUser\Public目录中(显然,Public目录必须提前创建)。

您可以通过FTP日志查看用户访问FTP服务器的信息。默认情况下,日志文件存储在 c:\inetpub\logs\logfiles 文件夹中的 u_exYYMMDD.log 文件中。

要查看 FTP 服务器的活动用户连接,您可以通过 PowerShell 或 IIS 控制台中的“当前 FTP 会话”部分使用 IIS 性能计数器的值。在此控制台中,您可以查看 FTP 用户的名称和 IP 地址,并在必要时断开 ftp 会话。

因此,我们研究了如何基于 Windows Server 2016/2012 R2 配置具有用户隔离的 FTP 站点。在隔离模式下,用户使用本地或域凭据在 FTP 上进行身份验证,以访问与用户名相对应的根目录。

相关文章