0x01 前言

最近有一些关于windows server的配置需求,其中有一项是需要用IIS建立FTP服务,支持用户隔离与虚拟目录。

关于IIS FTP的配置在网上有很多,倒是虚拟目录和用户隔离的部分没找到详细、直观的文章。所以我只好去看微软的文档,测试完成后在这里做个记录。

0x02 用户

因为要隔离用户,那么肯定要有用户存在才行。先通过“服务器管理器”打开“计算机管理”:

定位到“本地用户与组”,右击右侧窗口空白处新建一个用户:

请填写并将用户名记录下来,等下会用到这个用户名,填写合规的密码并按需选择附加项。如果勾选了“用户下次登录时必须更改密码”,请为这个用户启用RDP权限或使用显示器登入,如果用FTP登入会导致无法修改密码。

如果该用户从来没有登入过桌面环境,那么用户的home目录也不会创建。如果需要自动创建home目录,请使用RDP或其他方式现行登入桌面环境。

0x03 IIS

首先通过“服务器管理器”打开“添加角色和功能向导”安装IIS与FTP服务:

然后打开IIS管理器:右击“网站”并选择“添加FTP站点”:

首先会弹出以下对话框:

按照要求填入“FTP 站点名称”与“物理路径”。在这里这个物理路径并不会被访问,因为等下需要配置虚拟目录与用户隔离,这个FTP的根目录对于其他用户来说是没有权限访问的。

不过为了安全起见,建议在一个安全的地方建立一个目录。完成后点击“下一步”:

在“绑定”一栏中如果指定IP地址,那么FTP服务只监听这个IP地址,如果选择“全部未分配”则监听所有IP地址。端口默认为21,如果需要修改为其他端口,请确认端口尚未被使用。

“启用虚拟主机名”这一项非常重要,如果想启用多个FTP服务器并且使用默认的21端口,就必须配置这个虚拟主机名,否则会有端口冲突的告警!在这里我只有一个使用21端口的FTP服务器,所以此项不做设置。

建议勾选“自动启动FTP站点”,在SSL选项中建议选择“需要SSL”。在安装IIS的时候会自动生成一个自签发的证书,如果对安全要求不高,可以选用这个证书。

完成后继续点选“下一步”:

在这里的身份验证配置为该FTP站点的全局设置,建议选择“基本”,也就是通过用户名与密码进行验证,如果需要匿名访问,请在虚拟目录的验证配置中选择“匿名”。

“授权”中的内容也不做配置,在虚拟目录中配置即可。至此已经完成FTP服务器的基础配置,因为还没有配置任何授权信息,所以还不能访问。

0x04 虚拟目录

对于虚拟目录,有一个很重要的要求:用户隔离。这个用户隔离有三种不同的选项,双击FTP站点中“FTP 用户隔离”的图标:

默认情况下是不隔离用户的,因为默认就只有一个用户或多个用户都拥有同样的权限。不过我的使用环境有点特别,需要进行用户隔离,所以要选择“用户名目录(禁用全局虚拟目录)”:

选用了这个选项会将FTP用户的根目录限制在用户名下,这个是全局设置,会影响这个FTP服务器的所有虚拟目录。

对于用户隔离的配置,微软官方有相关的说面:

完成配置后要新建目录,根据微软的文档,这里分为4种情况:

  • 匿名用户:%FtpRoot%\LocalUser\Public
  • 本地 Windows 用户帐户:%FtpRoot%\LocalUser\%UserName%
  • Windows 域帐户:%FtpRoot%\%UserDomain%\%UserName%
  • IIS 管理器或 ASP.NET 自定义身份验证用户帐户: %FtpRoot%\LocalUser\%UserName%

我的环境属于第二种,所以目录结构是FtpRoot\LocalUser\UserName。那么首先要在FTP服务器下新建一个名为LocalUser的虚拟目录:

这个目录不授权给用户,物理路径可以和FTP服务器一致:

然后使用同样的添加方法,在LocalUser目录下添加虚拟目录。这里有个要求,LocalUser目录下的虚拟目录名称要和用户名一样:

完成后进入相关用户名的虚拟目录并双击“FTP授权规则”,右击空白处并选择“添加允许规则”:

然后选择“指定的用户”并填入相应的用户名,再选择相应的权限:

0x05 使用

在这里有两种情况:

  1. FTP服务器使用了域名或域
  2. 未设置域名或域

如果是第一种那么用户名为:

[hostname or AD doname]|user name

#例如
ftp.t.com|iis-443

如果是第二种,直接使用用户名即可。

在filezalla中使用是这样的:

0x06 结语

在centos中配置FTP的虚拟目录也一样麻烦,不过为了使一个FTP服务器服务多个用户,这也是值得的,尤其在服务器资源有限的情况下。