吐槽 >> IIS10 搭建FTP 真是费了劲了
IIS服务器端
- 在 Windows 服务管理中开启 FTP 功能,使 IIS 管理器可以对 FTP 相关服务进行管理。验证成功的方式为两点
- servicecs.msc 中
Microsoft FTP Service
被开启 - IIS管理器右键菜单已有
添加FTP站点
- 新建一个FTP站点,与新建网站操作类似
- FTP站点名称指给要建立的ftp起的人性化名称,用于标示其作用,如办公用、共享用等;
- 物理路径指该FTP站点顶级根目录,需要一个物理目录的映射,如 D:ftp;
- IP地址默认无需改动,端口默认21,如有需要自行调整;
- SSL如无证书,选择无SSL;
- 身份验证新建时可将匿名与基本同时勾选;
- 允许访问新建时可选择所有用户(调试便利);
-
调整FTP防火墙支持
选择IIS中的服务器部分,右侧打开FTP防火墙支持功能,修改数据通道端口范围。端口21被用来传输FTP命令,需要额外指定一个数据传输端口,范围推荐1024-65535。 -
为FTP站点增加虚拟目录
虚拟目录管理起来即灵活,又不用暴露物理路径,右键点击FTP站点添加虚拟目录,即可以在不改变本机真实目录位置的情况下,使FTP可访问到目录和其内容。如虚拟目录名称为a,映射本机真实地址是c:projecta。
本机其它环境的配合
在添加FTP服务时,防火墙应该默认已经增加了以下规则
如自定义FTP的默认21端口,或使用中修改了数据传输端口,需重启该FTP站点和servicecs.msc 中 Microsoft FTP Service
服务使其生效。
服务器环境的配合
使用云服务器的话,还需要云服务器的安全相关配置,也就是需要开放与FTP相关的端口,包括命令端口和数据端口。
实际效果与高级调整
刚才按照默认操作,FTP站点应该已经可用了,浏览器或FTP工具中输入地址 ftp://IP:21 即可查看,因为开启了匿名身份验证,因此浏览器可以直接访问资源,部分工具需要勾选匿名登录即可。但通常不会允许匿名访问或限制匿名,通常的做法是用账号+密码的方法允许指定的账号来操作FTP。如果是独立的FTP服务器会稍微“简单”,因为是软件自己控制安全,所以在FTP服务器软件中设定用户、密码等相关设置即可,如Serv-U、Filezilla Server等,但用IIS就会麻烦一些,因为其依托于Windows安全机制。
- 为使用FTP的对象建立系统用户组,以便管理多个相关账号(建立用户组是非必须的,主要是为了多用户或用户更改频繁时操作更方便)。我的电脑-计算机管理-本地用户和组-组中新建组,如ftpUser;
- 建立具体用户,我的电脑-计算机管理-本地用户和组-用户中新建用户,如ftp-a,设定其密码及其它约束,并将其设置隶属于ftpUser组;
- IIS选中该FTP站点(或站点下某目录),打开FTP身份验证,禁用匿名,打开FTP授权规则-添加允许规则-指定的角色或用户组,填写组名ftpUser,选择权限并确定;
可能的坑
遇到了FileZilla访问显示列出目录失败和服务器发回了不可路由的地址,使用服务器地址代替两种错误提示,而Xftp直接就是失败。怀疑与IIS的数据端口未配置或配置后防火墙、云安全等未开通有关,尝试调整FTP客户端软件的工作主被动模式,以FileZilla为例实际可以工作的站点配置如
- 协议选择FTP(非SFTP);
- 主机即服务器IP,端口填写实际端口号;
- 用户名和密码填写上文所建立的FTP账号信息;
- 传输模式选择默认(即被动,实际切换到主动也可以工作);
FileZilla软件设置调整 - 连接-FTP-传输模式选择被动(推荐)并勾选失败后允许退回到其它传输模式;
- 连接-FTP-主动模式-主动模式IP选择向您的操作系统查询外部IP地址;
- 连接-FTP-被动模式-被动模式选择退回到主动模式(切换到使用服务器的外部IP地址来代替依旧成功)