将某台计算机中的⽂件通过⽹络传送到可能相距很远的另⼀台计算机中,是⼀项基本的⽹络应⽤,即⽂件传送。
⽂件传送协议FTP (File Transfer Protocol)是因特⽹上使⽤得最⼴泛的⽂件传送协议。
涉及到文件的上传和下载,很多都会使用到文件传输协议。文件传输协议提供了不同主机之间的文件传输能力,允许用户进行文件的上传和下载。 而对于两台主机间的通信,说到底还是两台主机的应用程序在进行通信。
如果你的学习或工作环境是由多台电脑构成的局域网,而且有比较大的文件需要在内部多台电脑之间实现共享,那么将其中一台电脑配置为FTP服务器会使共享变得非常方便。
目录
一、FTP主动与被动模式
1.1 工作原理:两种连接
1.2 控制连接和数据连接分离设计的优势:
1.3 工作模式
1.4 客户机/服务器模式
二、FTP命令简述
2.1 FTP命令
2.2 注意事项:
实验一、Windows FTP匿名访问
实验二、Windows FTP用户登录访问
实验三、Windows FTP用户隔离
一、FTP主动与被动模式
1.1 工作原理:两种连接
控制连接
- 端口:默认使用TCP 21 端口
- 作用:控制连接在整个个FTP会话期间⼀直保持打开,⽤于传送诸如登录、改变⼯作⽬录、列出⽬录内容等FTP命令
- 特点:此连接始终开放,以保证客户端和服务器之间可以随时交换FTP控制信息
数据连接
- 端⼝:在主动模式下,默认使⽤TCP 20端⼝。在被动模式下,端⼝号由服务器动态指定,并通知给客户端。
- 作⽤:数据连接仅在需要传输⽂件(包括上传和下载)或⽬录列表时建⽴。⼀旦⽂件传输任务完成,数据连接就会被关闭。
- 特点:数据连接的⽣命周期较短,只在需要时建⽴,并在⽤完后⽴即关闭
1.2 控制连接和数据连接分离设计的优势:
1. 命令和数据分离
FTP通过单独的控制连接来处理命令和响应,确保了在进⾏⽂件传输的同时还可以接收和执⾏新的命令。这意味着⽤户可以在⼀个⽂件正在传输时发送额外的FTP命令(例如中断传输、开始另⼀个传输等),⽽不会⼲扰到当前的数据传输。
2. 提⾼效率
由于数据连接只在需要传输⽂件时才建⽴,并在传输完成后关闭,这种动态连接的管理⽅式可以更⾼效地使⽤⽹络资源。控制连接保持开放状态,以便随时准备接收新的指令,⽽不必每次传输数据时重新进⾏整个登录和认证过程。
3. 增强兼容性和配置灵活性
使⽤两种连接的⽅法提⾼了FTP的灵活性,允许服务器和客户端更好地管理⽹络配置如防⽕墙和NAT(⽹络地址转换)。例如,在被动模式中,客户端可以主动连接到服务器上的动态端⼝,这在客户端背后有防⽕墙时尤其有⽤。
4. 安全性考虑
将命令和数据传输分离也提⾼了FTP的安全性,因为控制连接可以加密命令传输,避免敏感信息(如⽤户名和密码)在⽹络中明⽂传输。尽管传统FTP本身不包括加密,但其设计允许通过扩展(如FTPS或与SSH隧道结合的SFTP)来提供这种安全性。
5. 错误处理和控制
在两个独⽴的通道中,⼀个⽤于命令和控制,另⼀个⽤于数据传输,使得错误处理更加简洁明了。如果数据传输出现问题,控制连接仍然保持开放,⽤户可以通过发送控制命令来解决问题或调整设置,⽽不会影响到控制流本身。
1.3 工作模式
FTP可以在两种模式下工作:主动模式和被动模式
1. 主动模式(Active Mode): 默认
- 客户端从任意⾮特权端⼝(端⼝号⼤于1023)发送FTP命令到服务器的命令端⼝,即21端⼝
- 当服务器收到命令后,它从端⼝20发起⼀个到客户端命令所来⾃的端⼝的连接。
- FTP客户端⾸先先会随机开启⼀个⼤于1024的端⼝N(1032)进⾏监听,并与服务端的21号端⼝建⽴连接,然后开放N+1端⼝(1033)进⾏监听, 同时时向服务器发出PORT 1033命令通知服务器⾃⼰的在接收数据时所使⽤的端⼝号。
- 服务器在传输数据的时候,服务端通过⾃⼰的20端⼝去连接客户端的1033端⼝。当不需要传输时,此连接会⾃动断开。
2. 被动模式(Passive Mode):
- 客户端从任意⾮特权端⼝连接到服务器的命令端⼝。
- 然后服务器会在客户端命令中指定的端⼝上监听数据连接,⽽不是从服务器的20端⼝发起连接
- FTP客户端随机开启⼀个⼤于1024的端⼝X向服务器的21端⼝发起连接,同时会开启X+1端⼝
- 然后向服务器发送PASV命令,通知服务器⾃⼰处于被动模式。
- 服务器收到命令后,会开放⼀个⼤于1024的端⼝Y进⾏监听,然后⽤PORT Y命令通知客户端,⾃⼰的数据端⼝是Y。
- 客户端收到命令后,会通过X+1号端⼝连接服务器的端⼝Y,然后在两个端⼝之间进⾏数据传输这样就能使防⽕墙知道⽤于数据连接的端⼝号,⽽使数据连接得以建⽴
- 被动模式更适⽤于客户端位于防⽕墙后的情况,因为它允许客户端初始化所有连接,解决了主动模式中服务器⽆法穿越客户端防⽕墙的问题。
1.4 客户机/服务器模式
FTP采⽤客户机/服务器架构,其中:
- FTP服务器:运⾏FTP服务软件,负责响应客户端的请求,管理⽂件的存储和访问。
- FTP客户端:可以是任何⽤来发起连接和⽂件传输请求的软件,如命令⾏⼯具、Web浏览器或专⽤的FTP客户端使用
- 这也证明了之前说的,对于两台主机间的通信,说到底还是两台主机的应用程序在进行通信
连接模式
FTP可以通过多种⽅式进⾏连接:
- 命令⾏⽅式连接:使⽤如 ftp 这样的命令⾏⼯具,在⼤多数操作系统中都内置此类⼯具,允许⽤户执⾏FTP命令来传输⽂件。
- Web⽅式连接:通过Web浏览器直接访问FTP服务器,输⼊FTP的URL(如 ftp://ftp.example.com ),浏览器会展示服务器上的⽂件和⽂件夹。
- 本地安装FTP客户端软件连接:使⽤专⻔的FTP客户端软件,如FileZilla、WinSCP等,这些客户端提供⽤户友好的界⾯和丰富的配置选项,⽀持⽂件的上传、下载和同步。
登陆方式
FTP⽀持两种基本的登录⽅式:
- 匿名登录:⽤户可以通过使⽤ anonymous 作为⽤户名进⾏登录,通常邮箱地址作为密码(尽管不⼀定会被真正验证)。这种⽅式允许⽤户访问公开的⽂件夹和⽂件,⼴泛⽤于公共⽂件的下载。
- 授权帐户登录:⽤户需要提供有效的⽤户名和密码才能登录FTP服务器。这提供了更⾼级别的安全性和访问控制,适⽤于需要限制访问权限的场景。
文件传输
FTP的⽂件传输仅表示下列三件事件之⼀:
- 从服务器把⽂件复制到客户(下载),称为读取⽂件。在RETR命令的监督下完成。
- 从客户把⽂件复制到服务器(上传),称为存储⽂件。在STOR命令的监督下完成。
- 从服务器向客户发送⽬录列表或⽂件名。在LIST命令的监督下完成。应注意,FTP把⽬录或⽂件名列表当作⽂件,在数据连接上发送。
安全性
传统的FTP不加密其传输的数据,包括⽤户的认证信息(⽤户名和密码),因此它对窃听特别敏感。为了提供安全的⽂件传输功能,推出了以下⼏种⽅案:
- FTP over SSL/TLS (FTPS):利⽤SSL或TLS提供加密的通道,以保护数据传输的安全。
- SSH File Transfer Protocol (SFTP):作为FTP的替代,通过SSH提供加密的传输。
FTP协议虽然有其历史局限性,但因其简单和⼴泛⽀持,在很多环境中仍然是⽂件传输的可⾏选择。然⽽,在安全性是关键考量的环境下,建议使⽤FTPS或SFTP替代传统FTP。
二、FTP命令简述
2.1 FTP命令
1.连接到FTP服务器
在命令提示符中,键⼊以下命令以连接到FTP服务器:
ftp [hostname or IP]
其中 [hostname or IP] 是FTP服务器的域名或IP地址。例如:
ftp example.com
或者
ftp 172.16.130.143
2.输入用户名和密码
连接后,系统会提示你输⼊⽤户名和密码。如果你正在使⽤匿名FTP,通常可以⽤ anonymous 作为⽤户名,密码可以是你的电⼦邮件地址。
3,使用FTP命令
⼀旦连接到FTP服务器,你可以使⽤多种FTP命令来管理⽂件和⽬录。常⽤的命令包括:
- ls 或 dir :列出当前⽬录的⽂件和⽂件夹。
- cd [directory] :更改当前⽬录到指定的⽬录。
- get [filename] :下载⽂件到本地计算机。
- put [filename] :上传⽂件到服务器。
- delete [filename] :删除服务器上的⽂件。
- mkdir [directory] :在当前⽬录下创建新⽬录。
- rmdir [directory] :删除⽬录。
- bye 或 quit :断开连接并退出FTP会话。
4.下载和上传文件
例如,要下载⽂件,可以使⽤:
get filename.txt
要上传⽂件,可以使⽤:
put filename.txt
5.退出FTP
完成所有操作后,你可以使⽤ quit 或 bye 命令退出FTP会话:
quit
2.2 注意事项:
- 命令提示符中的FTP客户端不⽀持被动模式(passive mode)。这可能导致在某些服务器配置或⽹络环境中遇到问题。
- 对于需要更⾼安全性的FTP连接(如FTPS或SFTP),命令提示符的FTP客户端可能不⾜够,你可能需要使⽤更⾼级的⼯具如WinSCP或FileZilla。
- 在 Windows 7 上,默认的 FTP 客户端(如命令⾏中的 FTP)通常会使⽤ 被动模式,⽽不是 主动模式。
如何切换到主动模式:
如果需要在 Windows 7 上强制使⽤ 主动模式,可以按照以下步骤操作:
1)在命令⾏ FTP 客户端中设置主动模式:
- 打开命令提示符,输⼊ ftp 命令进⼊ FTP 客户端。
- 连接到 FTP 服务器,例如:
bash
复制代码
open [ftp服务器地址]
3.在登录成功后,输入以下命令切换到主动模式:
bash
复制代码
quote PASV
4.现在,FTP会话将会尝试使用主动模式来传输数据
2)在第三方FTP客户端中设置主动模式:
⼤多数图形化的 FTP 客户端(如 FileZilla、WinSCP 等)都有显式的设置选项来切换 FTP 传输模式:
- FileZilla:打开,进入编辑->设置,在左侧菜单中选择FTP->传输模式,选择主动
- WinSCP:打开,点击新建会话,在会话窗口中点击高级->FTP,将模式切换为主动模式,然后保存
3)控制面板
实验一、Windows FTP匿名访问
1.安装FTP服务器(不同系统有差异)
首先,需要在Windows Server上安装FTP服务器组件:前面的步骤和前面的实验一样,在“服务器角色”页面出现差异,有的系统在此处直接可以看到“FTP服务器”选项,那么这一步就可以直接选择;有的系统在这一步没有,那么就需要先选择“Web服务器(IIS)”,在角色服务页面再选择“FTP服务器”
2.配置FTP站点
安装FTP服务器之后,需要配置FTP站点并启用匿名访问:
打开IIS管理器->在“连接”窗口中,右键“网站”,选择“添加FTP站点”->为FTP站点命名,并指定FTP站点的本地路径(这是匿名用户将访问的目录)
配置IP地址,选择要绑定的IP地址或者保留“全部未分配”->在SSL页面,根据需求选择,在本实验中不需要SSL加密,所以我选择No SSL->点击下一步,在身份验证部分选择“匿名”->在授权部分选择“匿名用户”,权限根据需求选择,我选择了读取(下载文件)和写入(上传文件)
3.配置匿名用户的权限
要让匿名用户能够访问FTP站点,你需要确保匿名用户(通常是IUSR账户)有权访问FTP根文件夹:
- 在你创建ftp文件夹的位置,右键点击你为FTP站点设置的文件夹
- 选择属性->“安全”选项
- 点击编辑->添加
- 输入“IUSR”->检查名称
- 在权限部分,根据需要选择适当的权限,如读取、执行等
4.测试FTP访问
通过浏览器访问FTP站点,测试是否可以成功进行匿名访问
注意:新建站点时无需选择基于主机名的配置。主机名是用来配置有多个域名时,同一个IP地址且同一个端口号是来对应不同的FTP站点
实验二、Windows FTP用户登录访问
1.创建FTP站点
此实验在上个实验的基础上进行,前面的步骤和上个实验相同,你可以一直自主进行到身份验证阶段
2.配置认证和授权信息
- 身份验证设置:在“身份验证”页面,勾选“基本”(基本身份验证要求用户名和密码),如果环境要求更高的安全性,考虑启用SSL
- 授权设置:在授权页面,选择“制定的角色或用户”->输入允许访问的用户或用户组名称->设置权限
4.创建或配置FTP用户
- 如果还没有用户和组,按照我们之前说的方法创建,我这里创建了FTPgroup组
- 设置NTFS权限:确保FTP目录对指定的用户或用户组有适当的NTFS权限,右键FTP文件夹,选择属性->安全->添加用户或用户组,并设置适当的权限。和之前的方法是一样的
5.测试FTP访问
使用资源管理器测试访问
- 输入服务器的IP地址或域名、用户名、密码以及端口(默认21),尝试连接
- 验证是否可以上传和下载文件
实验三、Windows FTP用户隔离
需求:有3个用户,每个用户都可以登录并且用户登录后只能在自己的目录中,不可访问其他的用户目录。每个用户的权限都是可读可写
方法一:本地用户账户隔离
1.准备用户目录
首先,为每个用户创建一个单独的目录,这些目录可以在服务器的任何位置,但最好集中管理
- 在服务器上选择或创建一个父目录,例如 D:\FTP\localuser\localuser
- 在这个父目录下,为每个用户创建一个子目录
2.创建或配置用户账户
确保服务器上存在响应的用户账户,并设置密码:
- 打开计算机管理器,导航到“本地用户和组”->用户
- 创建或确认存在用户,为每个用户设置一个安全的密码
3.设置目录权限
对于每个用户目录设置适当的NTFS权限,确保用户只能访问自己的目录
- 右键选择user1文件夹,属性->安全
- 添加用户user1并设置其权限为“修改”(允许读取和写入)
- 确保删除或修改其他可能的用户或组权限,使得只有user1可以访问此文件夹
- 一样的步骤为2、3设置
4.配置FTP站点
和之前一样的步骤,在身份验证页面,启用“基本身份验证”,在授权页面选择“指定的角色或用户”,添加user1、2、3,权限设置为“读取和写入”
5.启用用户隔离
- 在IIS管理器中选择FTP站点,双击“FTP用户隔离”
- 选择“用户名称目录(隔离用户)”,这会使每个用户登录时自动定向到其用户命名的子目录
6.测试FTP访问
测试每个用户的登录