FTP概念及搭建

一、FTP介绍

FTP协议定义:一个位于OSI七层结构中应用层的协议,中文名叫文件传输协议

(ftp是基于tcp/ip网络传输协议的文件传输应用层协议)

FTP协议在两台服务器中传输文件时,需要建立两个通道,分别为:命令传输通道(control_socket)和数据连接通道(data_socket)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了

命令连接:control_socket 就是命令连接,负责传输一些命令到服务器,主要是不涉及数据交互的操作。比如登录、更换目录(本地已经活得得过目录,本地没有活得过需要通过数据连接先获取目录结构的数据)等

数据连接:data_socket则是数据连接,顾名思义就是与数据相关的操作,如上传及下载等

FTP传输文件过程中分为客户机和ftp服务器,在此过程中总是先建立起命令通道后在建立文件传输通道

二、FTP协议主要流程图

img

三、主动模式与被动模式

对与主动、被动模式是针对服务器来说的。模式的选择是根据客户端通过control_socket发送PORT命令及PASV命令来决定的,服务器根据接收到的命令来决定自身的模式

数据连接是有方向的,数据传输是没方向(连接是一个动作,传输是依仗着连接的桥梁)

img

主动模式PORT:

FTP客户端从任意非特殊的端口N(N>1023)连入到FTP服务器的命令端口——21端口。客户端在N+1(N+1>=1024)端口进行监听,并且通过N+1(N+1>=1024)端口发送PROT N+1命令到服务器。服务器会通过本地FTP数据端口(通常为20)去连接客户端指定的端口N+1,来进行数据传输

主动模式的FTP的 主要问题实际上落在客户端。FTP 的客户端并不会主动连接到服务器的数据端口,而是是告诉服务器它正在监听哪个端口,然后服务器发起连接到客户端上指定的端口。但是,这样的连接有时候会被客户端的防火墙阻止

img

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

被动模式pasv:

为了解决服务器主动发起到客户端连接会被阻止的问题,另一种更完善的工作模式出现了,它就是 FTP 的被动模式,缩写作 PASV,它工作的前提是客户端明确告知 FTP 服务器它使用被动模式。

在被动模式的 FTP 中,客户端启动到服务器的两个连接,解决了防火墙阻止从服务器到客户端的传入数据端口连接的问题。FTP 连接建立后,客户端在本地打开两个随机的非系统端口 N 和 N + 1(N > 1023)。第一个端口连接服务器上的 21 端口,但是客户端这次将会发出 PASV 命令,也就是告诉服务器自己处于被动模式。这样服务器接到命令,随后会打开一个随机的非系统端口 P (P > 1023),并将 P 发送给客户端作为 PASV 命令的响应。然后客户端启动从端口 N+1 到端口 P 的连接来传输数据。

(在vsftpd.com中指定被动端口范围为4000-4500)

img

被动方式下,服务器端可以通过设置配置文件参数,达到控制N端口范围,如下:

    #liunx环境下设置 /etc/vsftpd/vsftpd.conf

    pasv_enable=YES|NO
    pasv_min_port=port number 
    pasv_max_port=port number

被动方式的FTP解决了客户端的许多问题,但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是,许多FTP守护程序,包括流行的WU-FTPD允许管理员指定FTP服务器使用的端口范围。

  第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。例如,Solaris提供的FTP命令行工具就不支持被动模式,需要第三方的FTP客户端,比如ncftp。

  随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。

四、主动模式及被动模式的选择

1、主动模式的实现与特点

当客户端发出数据传输的指令之后(如上传数据或者下载文件),客户端会启用另外一个端口监听等待连接,并利用先前建立的命令连接通道告诉FTP服务器其监 听的端口号。然后FTP服务器会利用端口20和刚才的FTP客户端所告知的端口再次进行三方握手。三次握手成功后便建立了一条数据传输通道。注意此时数据 连结通道建立的过程中,是FTP服务器的20号端口主动连接FTP客户端的,为此这种连接方式就叫做主动模式。

2、被动模式的实现与特点

   被动操作模式在建立命令连接通道的时候,跟主动操作模式是相同的。两者主要的差异就在于数据传输通道的建立上面。但是如果用户需要进行数据传输的时候, 则FTP客户端会通过命令通道告诉FTP服务器,如会向服务器发出一个PASV指令。这个指令就是告诉服务期,要采用被动模式建立连接。如果采用被动操作 模式,服务期会选择自身的一个端口来进行监听连接(而在主动操作模式下是利用客户端的一个端口来进行监听连接),并再次利用命令连接通道告诉客户端“我为 你开启了哪个端口,你要建立数据连接的话就跟我的哪个端口联系”。客户端在接到这个信息后,就会在自己操作系统上选择一个数据连接的通信端口,与服务器提 供的端口进行三方握手,并最终建立起可以进行数据传输的通道。
  可见,从技术上来说,主动模式与被动操作模式的主要差异就在于谁开启一个端口来进行监听连接,谁等待(提供端口)、谁主动。虽然在技术上的差异比较小,但是其在具体的应用上却有很大的不同。

3、两者该如何选择?

​ 当企业的网络环境不同,两个操作模式的应用效果是不同的。这主要是主动操作模式与被动操作模式在数据的传输通道建立上有一定的差异。从以上的分析中我们 可以看出,在主动操作模式下,FTP服务器的20号端口是主动同客户端联系,建立数据传输通道的。而在被动操作模式下,则FTP服务器是被动的等待,等待 客户段与其的20号端口建立连接。不要小看这个细小的差异,这个差异却决定了两者应用环境的不同。
   一般来说,如果这个FTP服务器只对企业的内部局域网客户提供文件传输的服务,那么基本上两者的应用效果没有很大的差异。但是如果企业网络外部的用户也 需要通过互联网与FTP服务器进行文件传输的话,就会有很大的不同。这主要是因为,在数据通道建立的过程中,客户端会在另一个端口上监听等待连接,并利用 命令连接通道告诉服务器其监听的端口好。然后企业的边界路由器会将FTP的IP地址转换为合法的公网IP地址(假设企业由于公网IP地址有限,在边界路由 器上通过NAT服务向外部用户提供FTP连接)。如果此时采用的是自动操作模式的话,则在连接这个数据通道的过程中FTP服务器会主动跟边界路由器的端口 进行通信(因为FTP服务器认为这台边界路由器,其实就是NAT服务器,就是FTP客户段)。但是实际上不是,而且也有可能没有启用这个端口。为此客户端 与FTP服务器之间的连接最终没有建立起来。所以说,如果采用主动操作模式的话,当FTP服务器部署在NAT等服务器后面的时候,则FTP服务器与客户端 之间只能够建立命令连接通道,而无法建立起数据传输通道。如果FTP服务器与客户端之间还有防火墙的话,在连接的过程中也会出现以上类似的情况。
   而如果是采用被动操作模式的话,是客户端主动跟服务期的20号端口进行连接的。为此在数据传输通道建立的过程中,即使中间有NAT服务器或者防火墙,也 会准确无误的连接到FTP服务器的数据传输接口。所以说,如果在客户端与FTP服务器之间存在防火墙或者NAT服务器等类似设备的话,那么在FTP服务器 部署的时候,最好采用被动操作模式。否则的话,很可能只能够建立命令连接通道,而无法进行数据传输。
在 FTP服务器部署的时候,其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那 么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP 地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动操作模式就不行了。如果企业中通过互联网来访问企业内部 FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动操作模式。相反如果 用户比较少的话,而且用户又具有一定的计算机知识,那么可以不在服务器上进行设置。而是在连接的过程中,通过FTP客户端来设置。如在某些FTP客户端 上,会有一个Passive Transfers等类似的选项。选中这个选项就表示以被动操作方式进行传输。而没有选中这个选项的客户端则仍然采用主动操作模式来进行连接。
  总 之,在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背 后,则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看 目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式, 基本上就可以解决文件传输的问题了。

五、FTP搭建

①window系统搭建
步骤一:添加IIS以及FTP服务角色

在创建FTP站点前,首先需要安装IIS及FTP服务。

  1. 远程连接Windows实例。具体操作,请参见 在本地客户端上连接Windows实例

  2. 在底部任务栏,单击 服务器管理器 图标。

    ftp0

  3. 在顶部导航栏,单击 管理 > 添加角色和功能 。

    ftp1

  4. 在弹出的对话框中,默认单击 下一步 到 选择服务器角色 界面。

  5. 选中 Web 服务器(IIS) ,在弹出的对话框中单击 添加功能 ,然后单击 下一步 。

    ftp2

  6. 在 选择角色服务 界面。选中 IIS管理控制台 以及 FTP 服务器 ,单击 下一步 。

    ftp3

  7. 单击 安装 。

步骤二:创建FTP用户名及密码

完成以下操作,创建Windows用户名和密码,用于FTP使用。如果您希望匿名用户可以访问,可省略此步骤。

  1. 在底部任务栏,单击 开始 图标。

  2. 单击 管理工具 ,然后双击 计算机管理 。

  3. 在左侧导航栏单击 本地用户和组 > 用户 。

    ftp4

  4. 在中间空白处单击鼠标右键,并选择 新用户 。

    本示例中用户名使用 ftptest 。

    说明 密码必须包括大写字母、小写字母和数字。否则会显示无法通过密码策略。

    ftp5

步骤三:设置共享文件的权限

您需要为在FTP站点共享给用户的文件夹设置访问和修改等权限。

  1. 在服务器磁盘上创建一个供FTP使用的文件夹。右键单击文件夹,选择 属性 。

    本示例中,在C盘下创建一个名为 ftp 的文件夹。

  2. 单击 安全 页签,然后单击 编辑 。

  3. 单击 添加 。

  4. 在弹出的对话框中,输入对象名称 ftptest,然后单击 确定 。

  5. 在 组或用户名 区域,单击刚刚添加的用户名 ftptest ,然后根据需要,选择 ftptest 的权限,并单击 确定 。

    本示例中允许所有权限。 用户名

步骤四:添加及设置FTP站点

安装FTP,设置好共享文件夹权限后,您需要创建FTP站点。

  1. 在底部任务栏,单击 服务器管理器 图标。

  2. 在顶部导航栏,单击 工具 > Internet Information Services(IIS)管理器 。

    ftp8

  3. 在左侧导航栏右键单击 网站 ,并单击 添加FTP站点... 。

    ftp9

  4. 在弹出的对话框中,填写 FTP站点名称 与共享文件夹的 物理路径 ,然后单击 下一步 。

    本示例中 FTP 站点名称 设置为 ftptest , 物理路径 请选择在 步骤三:设置共享文件的权限 中创建的FTP文件夹路径。 10

  5. IP 地址 默认选择 全部未分配 。端口号可自行设置,FTP默认端口号为 21 。

  6. 选择SSL设置,然后单击 下一步 。

    • 允许 :允许FTP服务器支持与客户端的非SSL和SSL连接。
    • 需要 :需要对FTP服务器和客户端之间的通信进行SSL加密。
    • 无 :不需要SSL加密。

    ftp11

  7. 选择要使用的一种或多种身份验证方法。

    • 匿名 :允许任何仅提供用户名 anonymous 或 ftp 的用户访问内容。
    • 基本 :需要用户提供有效用户名和密码才能访问内容。由于基本身份验证通过网络传输未加密的密码,因此请仅在清楚客户端和FTP服务器之间的连接是安全的情况下(例如,使用安全套接字层SSL时)使用此身份验证方法。
  8. 从 允许访问 列表中,选择以下选项之一:

    • 所有用户 :所有用户(不论是匿名用户还是已标识的用户)均可访问相应内容。
    • 匿名用户 :匿名用户可访问相应内容。
    • 指定角色或用户组 :仅特定角色或用户组的成员才能访问相应内容。请在对应的文本框中输入角色或用户组。
    • 指定用户 :仅指定用户才能访问相应内容。请在对应的文本框中输入用户名。
  9. 选中经过授权的用户的 读取 和 写入 权限。然后单击 完成 。

    12

完成后可以看到搭建的FTP站点。 13

步骤五:设置安全组及防火墙
  1. 搭建好FTP站点后,您需要在实例安全组的入方向添加规则,放行FTP服务器21端口及FTP服务器被动1024/65535端口。

    具体步骤请参见 添加安全组规则 ,具体配置请参见 安全组应用案例 常用端口

  2. 可选:

    服务器防火墙默认为关闭状态。如果您的防火墙为开启状态,则需要放行TCP 21与1024/65535端口用于FTP服务。

    具体操作,请参见 设置 ECS 实例远程连接防火墙

    其他防火墙设置请参见 微软官方文档

步骤六:客户端测试

FTP工具、Windows命令行工具或浏览器均可用来测试FTP服务器。本教程以Google Chrome浏览器为例,介绍FTP服务器的访问步骤。

  1. 打开客户端的Google Chrome浏览器,访问 ftp://实例公网IP地址:21(如果不填端口则默认访问21端口)。

    说明 使用浏览器访问FTP服务器出错时,建议您清除浏览器缓存后再尝试。

  2. 在弹出的对话框中,输入用户名 ftptest 和对应的密码,即可对FTP文件进行相应权限的操作。

    浏览器中只能对文件进行读取操作,因此建议您使用FTP工具进行操作,例如,FileZilla。

    说明 此步骤仅适用于基本身份验证,匿名用户无需输入用户名和密码即可登录FTP服务器。

②FileZilla搭建FTP
Ⅰ、搭建过程

安装和启动软件,点击确定后进入界面

wKiom1f47HTQpWWQAADnNRKItq8518.jpg-wh_50

点击下图中的“用户”头像,新增用户

wKioL1f47HWCspoVAAGUVWT_4uQ579.jpg-wh_50

设置用户名为ftp

wKiom1f47HXCSOO8AAEqyP8wg-Y125.jpg-wh_50

设置密码

wKiom1f47HawsXYvAAEmqnPfWl0592.jpg-wh_50

提示设置目录

wKioL1f47HbxvdNnAACzInRsfEM943.jpg-wh_50

把E盘下的ftp文件夹设置为FTP目录,依照下图选中选项,按“确定”按钮

wKioL1f47HfQu560AAF3ijkj1pA916.jpg-wh_50

查看服务器的IP地址,地址为:10.3.20.33

wKiom1f47HeQtdJBAAH0Dxw0REo237.jpg-wh_50

**
**

三、客户端上的操作

**点击菜单栏的“文件”--“站点管理器”

**

wKioL1f47Hvh-MBGAACMjXtuzL8163.jpg-wh_50**
**

填写服务器的IP地址、用户名等信息

wKioL1f47HjDT5zCAANxfNIRVDM918.jpg-wh_50

点击连接后,提示连接成功,从左侧拖到文件到右侧,来上传文件

wKiom1f47HqyCYwgAAOf8RJqfdQ792.jpg-wh_50

上传成功

wKiom1f47HvDS-bFAALmUhMdkPs246.jpg-wh_50

Ⅱ搭建过程遇到的问题
  • 问题: You appear to be behind a NAT router. Please configure the passive mode settings and forward a range of ports in your router.
    解决方法:
    “Edit”-“Setting”或直接点击设置按钮(齿轮);
    选择“Passive mode settings”选项卡,勾选“Use the following IP:”并填写服务器的IP地址,之后点击“OK”保存;

    接下来的提示信息中不再提示上述问题;

  • 问题: 响应: 425 Can't open data connection for transfer of "/"
    配置过程中没有设置“ Use custom port range”,那么在客户端连接服务端读取目录时就会报此错误
    这个问题主要是由于使用Passive Mode模式造成的。
    解决方法:
    在上面的设置窗口中要勾选该项,设置端口范围,并在后面的防火墙设置中,将端口范围加入到入站端口中。

  • 警告: Warning: FTP over TLS is not enabled, users cannot securely log in.
    解决方法:启用TLS传输,具体操作如下:
    “Edit”-“Setting”或直接点击设置按钮(齿轮);
    选择“FTP over TLS settings”选项卡,点击“Generate new certificate...”;
    生成验证时Key size”根据自己的喜好选择即可,其他信息可以根据自己的情况随意填写,然后选择保存地址(最好放到安装路径下) “;
    其中的 Common name(Server address)是连接时使用的域名或IP,如我这里填写 pro.ftp.cool.com,后面用客户端连接时, 主机(H)就填写 pro.ftp.cool.com。同时还需要将该域名解析到FTP服务器的外网IP。 Key size最好选择 4096bit
    生成验证
    名称默认为“certificate.crt”就好,最终选择生成;
    提示“Certificate generated successfully”则说明生成没有问题,点击“确定”关闭弹窗;
    点击“OK”保存设置;
    之后的信息提示不再出现警告。

  • 接下来就是创建“Group”,“Users”并设置“Shared folders”

    不做详细解说,只需注意:

    1. 添加用户时为用户分配组;
    2. 为用户分配文件夹的权限,并指定Home文件夹(即“Set as home dir”,路径前出现“H”即可),如下图;
      设为家目录
  • 端口设置
    默认端口:21,上面修改为14149
    加密端口:990,上面修改为14148 自定义的端口范围:14140-14149(根据自己的情况更改)
    可以自行设置,但是需要注意的是无论使用什么端口,在后面一定要添加到防火墙的入站规则中去。
    默认端口及加密端口可以自行更改。

  • 在本地安装客户端
    通过客户端连接服务器就可以了。
    初次连接时会提示如下,选择信任,确定即可。
    证书信任提示

  • 问题:Could not load certificate file: error:02001002:system library:fopen:No such file or directory (0)

    1.查看存ssl证书的文件名称是否存在中文。存在改为英文

③centos8.2搭建FTP服务器
Ⅰ、搭建ftp服务器,用filezille进行连接

1.运行以下命令安装 vsftpd。

yum install -y vsftpd

2.运行以下命令打开及查看etc/vsftpd
cd /etc/vsftpd
ls
说明:
/etc/vsftpd/vsftpd.conf 是核心配置文件。
/etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。
/etc/vsftpd/user_list 是白名单文件,是允许访问 FTP 服务器的用户列表。
/etc/vsftpd/vsftpd_conf_migrate.sh 是vsftpd操作的一些变量和设置

3.运行以下命令设置开机自启动。

systemctl 启用 vsftpd

4.运行以下命令启动 FTP 服务。

systemctl 启动 vsftpd

5.运行以下命令查看 FTP 服务端口。

netstat -antup | ftp文件

img

6.创建连接用户和密码,执行下面的命令

  创建用户:useradd ama 注:ama是用户名

  设计用户密码: passwd ama 注:给用户ama设置密码,设置的密码必须是包含大小写,数字,特殊字符,长度大于等于8

img

7.修改vsftp(/etc/vsftpd/vsftpd.conf)的配置文件

  a.运行vim vsftpd.conf。
  b.按键 “i” 进入编辑模式。
  c.将是否允许匿名登录 FTP 的参数修改为anonymous enable=NO。
  d.将是否允许本地用户登录 FTP 的参数修改为local_enable=YES。
  e.按键 “Esc” 退出编辑模式,然后按键“:wq” 保存并退出文件。

   img

8.重启服务,执行下面的命令:

systemctl 重启 vsftpd

img

9.给服务器添加安全组(使用的是阿里云服务器),如下图显示:

添加端口号21

img

 

10.使用filezille进行登陆

Ⅱ、centos8.2完整搭建FTP
  1. 远程连接Linux实例。

    远程连接的具体操作,请参见连接方式介绍

  2. 运行以下命令安装vsftpd。

    dnf install -y vsftpd
    

    出现如下图所示界面时,表示安装成功。vsftpd 3.0.3

  3. 运行以下命令设置FTP服务开机自启动。

    systemctl enable vsftpd.service
    
  4. 运行以下命令启动FTP服务。

    systemctl start vsftpd.service
    

    说明 执行该命令时如果提示错误信息Job for vsftpd.service failed because the control process exited with error code,请排查是否存在下述问题。如果问题仍未解决,建议提交工单。

    • 网络环境不支持IPv6时,运行命令vim /etc/vsftpd/vsftpd.conf将内容listen_ipv6=YES修改为listen_ipv6=NO
    • MAC地址不匹配时,运行命令ifconfig查看MAC地址,并在/etc/sysconfig/network-scripts/ifcfg-xxx配置文件中新增或修改HWADDR=<MAC地址>
  5. 运行以下命令查看FTP服务监听的端口。

    netstat -antup | grep ftp
    

    出现如下图所示界面,表示FTP服务已启动,监听的端口号为21。ftp port

    此时,vsftpd默认已开启本地用户模式,您还需要继续进行配置才能正常使用FTP服务。

步骤二:配置vsftpd

为保证数据安全,本文主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

  1. 运行以下命令为FTP服务创建一个Linux用户。本示例中,该用户名为ftptest

    adduser ftptest
    
  2. 运行以下命令修改ftptest用户的密码。

    passwd ftptest
    

    运行命令后,根据命令行提示完成FTP用户的密码修改。

  3. 运行以下命令创建一个供FTP服务使用的文件目录。

    mkdir /var/ftp/test
    
  4. 运行以下命令,创建测试文件。

    该测试文件用于FTP客户端访问FTP服务器时使用。

    touch /var/ftp/test/testfile.txt
    
  5. 运行以下命令更改/var/ftp/test目录的拥有者为ftptest

    chown -R ftptest:ftptest /var/ftp/test
    
  6. 修改vsftpd.conf配置文件。

    1. 运行以下命令,打开vsftpd的配置文件。

      如果您在安装vsftpd时,使用的是apt install vsftpd安装命令,则配置文件路径为/etc/vsftpd.conf。

      vim /etc/vsftpd/vsftpd.conf
      
    2. 按i进入编辑模式。

    3. 配置FTP服务器为被动模式。

      具体的配置参数说明如下:

      注意 修改和添加配置文件内的信息时,请注意格式问题。例如,添加多余的空格会造成无法重启服务的结果。

      #除下面提及的参数,其他参数保持默认值即可。
      
      #修改下列参数的值:
      #禁止匿名登录FTP服务器。
      anonymous_enable=NO
      #允许本地用户登录FTP服务器。
      local_enable=YES
      #监听IPv4 sockets。
      listen=YES
      
      #在行首添加#注释掉以下参数:
      #关闭监听IPv6 sockets。
      #listen_ipv6=YES
      
      #在配置文件的末尾添加下列参数:
      #设置本地用户登录后所在目录。
      local_root=/var/ftp/test
      #全部用户被限制在主目录。
      chroot_local_user=YES
      #启用例外用户名单。
      chroot_list_enable=YES
      #指定例外用户列表文件,列表中用户不被锁定在主目录。
      chroot_list_file=/etc/vsftpd/chroot_list
      #开启被动模式。
      pasv_enable=YES
      allow_writeable_chroot=YES
      #本教程中为Linux实例的公网IP。
      pasv_address=<FTP服务器公网IP地址>
      #设置被动模式下,建立数据传输可使用的端口范围的最小值。
      #建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
      pasv_min_port=<port number>
      #设置被动模式下,建立数据传输可使用的端口范围的最大值。
      pasv_max_port=<port number>
      

      更多参数的详细信息,请参见vsftp配置文件及参数说明

    4. 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。

  7. 创建chroot_list文件,并在文件中写入例外用户名单。

    1. 运行以下命令,创建chroot_list文件。

      vim /etc/vsftpd/chroot_list
      
    2. 按i进入编辑模式。

    3. 输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。

    4. 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。

    注意 没有例外用户时,也必须创建chroot_list文件,内容可为空。

  8. 运行以下命令重启vsftpd服务。

    systemctl restart vsftpd.service
    

步骤三:设置安全组

搭建好FTP站点后,在实例安全组的入方向添加规则并放行下列FTP端口。具体操作,请参见添加安全组规则

说明 大多数客户端位于局域网中,IP地址是经过转换的,因此ipconfigifconfig命令返回的IP不一定是客户端的真实公网IP地址。若后续客户端无法登录FTP服务器,请重新确认其公网IP地址。

被动模式需开放21端口,以及配置文件/etc/vsftpd/vsftpd.conf中参数pasv_min_portpasv_max_port之间的所有端口。配置详情如下表所示。

规则方向 授权策略 协议类型 端口范围 授权对象
入方向 允许 自定义TCP 21/21 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。
入方向 允许 自定义TCP pasv_min_port/pasv_max_port。例如:50000/50010 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。

步骤四:客户端测试

FTP客户端、Windows命令行工具或浏览器均可用来测试FTP服务器。本文以Windows Server 2012 R2 64位系统的本地主机作为FTP客户端,介绍FTP服务器的访问步骤。

  1. 在本地主机,打开这台电脑

  2. 在地址栏中输入ftp://<FTP服务器公网IP地址>:FTP端口,本文中为Linux实例的公网IP地址。例如:ftp://121.43.XX.XX:21

  3. 在弹出的登录身份对话框中,输入已设置的FTP用户名和密码,然后单击登录

    登录后,您可以查看到FTP服务器指定目录下的文件,例如:测试文件testfile.txt。ftp client

vsftp配置文件及参数说明

/etc/vsftpd目录下文件说明如下:

  • /etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。
  • /etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问FTP服务器。
  • /etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问FTP服务器。

配置文件vsftpd.conf参数说明如下:

  • 用户登录控制参数说明如下表所示。

    参数 说明
    anonymous_enable=YES 接受匿名用户
    no_anon_password=YES 匿名用户login时不询问口令
    anon_root=(none) 匿名用户主目录
    local_enable=YES 接受本地用户
    local_root=(none) 本地用户主目录
  • 用户权限控制参数说明如下表所示。

    参数 说明
    write_enable=YES 可以上传文件(全局控制)
    local_umask=022 本地用户上传的文件权限
    file_open_mode=0666 上传文件的权限配合umask使用
    anon_upload_enable=NO 匿名用户可以上传文件
    anon_mkdir_write_enable=NO 匿名用户可以建目录
    anon_other_write_enable=NO 匿名用户修改删除
    chown_username=lightwiter 匿名上传文件所属用户名
Ⅲ遇到问题:

1.问题:Linux服务器上访问无报错, 在win10下访问出现错误:

解决方法:打开

点击


posted @   learner-hyb  阅读(3204)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示