设备:阿里云云服务器 ECS
操作系统: Windows Server 2012 R2 数据中心版 64位中文版
IIS版本:IIS8
1.启动“服务器管理器”;
2.点击“添加角色和功能”;
3.按照以下图示进行安装;
4.打开“IIS管理器”(工具->IIS管理器);
5.创建ssl自签名证书,起一个好记的名字;
6.“网站”上右击,点击“添加FTP站点”;
7.按照以下图示逐步设置;
物理路径即FTP在服务器上的实际路径,设置该路径后,上传到FTP的文件会存在该文件夹中,访问FTP时显示该文件夹内容;
ip地址选择全部未分配,端口号为默认的21;
身份验证,如果禁止不登录就使用FTP的行为,就不勾选匿名;以后想开启\关闭的话,在“FTP身份验证”中可重新设置;
8.添加安全组规则;
此时,FTP的基本配置已经完成,但FTP还是无法访问;这是因为云服务器ECS实例安全组没有允许外网访问以上所需的端口,对照下图添加安全组规则就可以了;
添加规则后的出方向:
添加规则后的入方向:
9.连接ftp;
找一台有网络的电脑(外网),打开cmd连接尝试FTP,发现可以连接成功;
依次输入的命令是:
ftp
open [你服务器的公网ip]
[你服务器的管理员账号用户名]
[你服务器的管理员账号密码](密码不会回显)
dir
10.但是此时用资源管理器打开ftp时,发现在报错;
这是由于ftp有主动模式和被动模式;
(1) PORT(主动模式)
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据;
(2) PASV(被动模式)
FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输;
可以发现,PASV(被动模式)随机开放的数据端口(1024以上)在我们的安全组规则中是没有添加的,但是一次性添加默认的1025-65535端口是非常不安全的行为;所以我们要设置ftp的数据端口范围;
11.设置FTP数据端口范围;
有人表示数据端口号的设置框是灰色的,无法设置,那是因为FTP站点目录下的FTP防火墙支持无法设置数据端口范围,而如下图所示目录下的FTP防火墙支持则可以设置;
这里的数据端口范围需要在1025-65535,一般选择5到10个就可以了;这里我们设置端口范围为1025-1030;
然后在安全组规则中添加规则,出、入方向都要添加;
12.开启防火墙,并在防火墙的高级设置中新建入站规则;
启用允许出、入站规则中的所有FTP相关;
13.重启服务器;
重启服务器(必须)使防火墙设置生效,此时再用资源管理器打开FTP,发现已经没有问题了;
14.添加匿名访问用户;
我们之前设置了允许“匿名身份验证”,但每次连接服务器还是要求我们以管理员身份登录,这是为什么呢?
点击编辑“匿名身份验证”,可以发现匿名用户其实也有用户名IUSR,因此我们要将该匿名访问用户添加进来,并开启IUSR用户的写入权限;
在下方列表中找到IUSR并选择,选择后确定就可实现匿名访问;
此后FTP不会默认显示登录框,如想登录,在FTP单击右键,然后在出现的菜单中选择登录;
15.用户隔离,实现每个用户只能访问自己的文件夹;
在FTP中新建localuser(名字不能错)文件夹;
文件夹中创建对应用户名的文件夹;
public对应匿名用户;
16.开启FTP用户隔离;
此后匿名用户只能看到public文件夹中内容,登录用户只能看到对应用户名文件夹中的内容;
17.添加普通用户;
在“控制面板”中添加系统用户账户,并按以上添加匿名访问用户的方法添加到FTP中;如果开启了用户隔离,记得在localuser文件夹下创建对应用户名的文件夹;
18.设置某些文件夹某些用户只可下载,无法写入;
在对应文件夹目录下的“FTP授权规则”中添加拒绝对应用户写入实现。
值得一提的是,IIS目前无法实现文件夹只可上传,不可下载、修改、删除的功能。