FTP 是 TCP/IP 协议组中的协议之一,是 File Transfer Protocol (文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet 上的控制文件的双向传输。。基于 FTP 协议有不同的应用程序,Linux:ftp,lftp;windows:cureftp,filezilla,Flashfxpxftp等等。
1.FTP
FTP 是 TCP/IP 协议组中的协议之一,是 File Transfer Protocol (文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet 上的控制文件的双向传输。。基于 FTP 协议有不同的应用程序,Linux:ftp,lftp;windows:cureftp,filezilla,Flashfxpxftp等等。
1.1 FTP服务器和客户端
同大多数Internet服务一样,FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP 服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP 客户程序,另外常用的 FTP 客户程序还有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。
1.2 ASCII传输模式和二进制数据传输模式。
ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
二进制模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。
1.3 FTP的工作模式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。(21为命令端口,20位数据端口)
1.3.1 Port模式:主动模式
FTP默认模式,客户端主动告知服务器20端口,本地客户端是数据传输是随机端口(一般为1024以上的一个随机端口),服务器通过20端口向客户端这个端口建立链接,传输数据。
主动方式的FTP工作流程:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
1.3.2 pasv方式:被动模式
因考虑到网络中存在的NAT路由器(防火墙NAT功能)的时候,主动模式就无法建立数据通道。被动模式可以解决客户端在NAT环境内的情况,数据通道建立。
FTP被动模式的连接方式有效解决了服务器发起到客户的连接问题,这种方式由叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P>1024),并发送PORTP命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
1 | 主动FTP: |
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。
被动式 FTP 数据信道的联机方向是由客户端向服务器端联机,在 NAT 内部的客户端主机就可以顺利的连接上 FTP Server了
2.VSFTPD
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。 [2]
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等
2.1 vsftpd安装
1 | 安装 |
2.2 vsftpd文件说明
主程序配置文件
1 | /etc/vsftpd/vsftpd.conf #主配置文件 |
用户控制列表文件
1 | /etc/vsftpd/ftpusers #禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。(注意:Linux-4中此文件在/etc/目录下) |
其它
1 |
|
2.3 vsftpd配置说明
(1) 基础配置
1 | 是否允许匿名登录FTP服务器,默认设置为YES允许 |
除了上述那些基本设定,我们还可以在vsftpd.conf文件中添加更多的安全选项。其中几个常用的如下:
(2) 常用全局配置
1 | listen_address=192.168.1.1 #设置监听的IP地址 |
(3) 被动模式
1 | pasv_enable =YES #开启被动模式 |
(4) 常用安全配置
1 | accept_timeout = 60 #被动模式,连接超时时间 |
(5) 匿名用户访问
1 | anonmous_enable #容许匿名用户访问 |
注意:
- 默认上传目录 : /var/ftp/pub
- 如果容许上传,需要服务权限和系统目录同时容许
- Vsftpd 服务的伪用户是ftp
(6) 用户访问路径
1 | 修改vsftpd的配置文件/etc/vsftpd/vsftpd.conf,添加下面三行 |
注意文件夹权限:/opt/ftp/data权限设置为755
(7) 限制最大连接数和传输速率
在FTP服务器的管理中,无论对本地用户还是匿名用户,对于FTP服务器资源的使用都需要进行控控制,避免由于负担过大造成FTP服务器运行异常,可以添加以下配置项对FTP客户机使用FTP服务器资源进行控制:
1 | max_client #设置项 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。 |
(8) 指定用户的权限设置
vsftpd.user_list文件需要与vsftpd.conf文件中的配置项结合来实现对于vsftpd.user_list文件中指定用户账号的访问控制:
(8.1)设置禁止登录的用户账号
1 | 当vsftpd.conf配置文件中包括以下设置时,vsftpd.user_list文件中的用户账号被禁止进行FTP登录: |
(8.2)设置只允许登录的用户账号
当vsftpd.conf配置文件中包括以下设置时,只有vsftpd.user_list文件中的用户账号能够进行FTP登录:
1 | userlist_enable=YES |
以下是两个选项的具体表现形式和两种搭配使用方式的效果:
Userlist_enable=YES | Ftpusers中用户允许访问 User_list中用户允许访问 |
---|---|
Userlist_enable=NO | Ftpusers中用户禁止访问 User_list中用户允许访问 |
Userlist_deny=YES | Ftpusers中用户禁止访问(登录时可以看到密码输入提示,但仍无法访问) user_list 中用户禁止访问 |
Userlist_deny=NO | ftpusers中用户禁止访问 user_list中用户允许访问 |
Userlist_enable=YES 并且 Userlist_deny=YES | Ftpusers中用户禁止访问 User_list中用户禁止访问(登录时不会出现密码提示,直接被服务器拒绝) |
Userlist_enable=YES 并且 Userlist_deny=NO | Ftpusers中用户禁止访问 User_list中用户允许访问 |
(9) 修改默认端口
默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf,添加语句(例):
1 | listen_port=4449 |
语句指定了修改后FTP服务器的端口号,应尽量大于4000。修改后访问
1 | [root@localhost] ftp 192.168.57.2 4449 |
注意这里需加上正确的端口号了,否则不能正常连接。
(10) vsftpd日志
常见的vsftpd日志解决方案
在vsftpd.conf中有如下内容定义了日志的记录方式:
1 | 表明FTP服务器记录上传下载的情况 |
vsftpd的两个日志文件分析如下:
1 | /var/log/xferlog |
/var/log/xferlog日志文件中数据的分析和参数说明
记录数据 | 参数名称 | 参数说明 |
---|---|---|
Thu Sep 6 09:07:48 2007 | 当前时间 | 当前服务器本地时间,格式为: DDD MMM dd hh:mm:ss YYY |
7 | 传输时间 | 传送文件所用时间,单位为秒 |
192.168.57.1 | 远程主机名称/IP | 远程主机名称/IP |
4323279 | 文件大小 | 传送文件的大小,单位为byte |
/home/student/phpMyadmin- 2.11.0-all-languages.tar.gz | 文件名 | 传输文件名,包括路径 |
b | 传输类型 | 传输方式的类型,包括两种: a以ASCII传输 b以二进制文件传输 |
– | 特殊处理标志 | 特殊处理的标志位,可能的值包括: _ 不做任何特殊处理 C 文件是压缩格式 U 文件是非压缩格式 T 文件是tar格式 |
i | 传输方向 | 文件传输方向,包括两种: o 从FTP服务器向客户端传输 i 从客户端向FTP服务器传输 |
r | 访问模式 | 用户访问模式,包括: a 匿名用户 g 来宾用户 r 真实用户,即系统中的用户 |
student | 用户名 | 用户名称 |
ftp | 服务名 | 所使用的服务名称,一般为FTP |
0 | 认证方式 | 认证方式,包括: 0 无 1 RFC931认证 |
* | 认证用户id | 认证用户的id,如果使用*,则表示无法获得该id |
c | 完成状态 | 传输的状态: c 表示传输已完成 i 表示传输示完成 |
最后,介绍常见的FTP命令,以及FTP数字代码的意义。
常见FTP命令及其功能
FTP命令 | 功能 | FTP命令 | 功能 |
---|---|---|---|
ls | 显示服务器上的目录 | ls [remote-dir][local-file] | 显示远程目录remote-dir,并存入本地文件local-file |
get remote-file [local-file] | 从服务器下载指定文件到客户端 | mget remote-files | 下载多个远程文件(mget命令允许用通配符下载多个文件) |
put local-file [remote-file] | 从客户端上传指定文件到服务器 | mput local-file | 将多个文件上传至远程主机(mput命令允许用通配符上传多个文件) |
open | 连接FTP服务器 | mdelete [remote-file] | 删除远程主机文件 |
close | 中断与远程服务器的ftp会话(与open对应) | mkdir dir-name | 在远程主机中创建目录 |
open host[port] | 建立指定的ftp服务器连接,可指定连接端口 | newer file-name | 如果远程主机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件 |
cd directory | 改变服务器的工作目录 | rename [from][to] | 更改远程主机的文件名 |
lcd directory | 在客户端上(本地)改变工作目录 | pwd | 显示远程主机的当前工作目录 |
bye | 退出FTP命令状态 | quit | 同bye,退出ftp会话 |
ascii | 设置文件传输方式为ASCII模式 | reget remote-file [local-file] | 类似于get,但若local-file存在,则从上次传输中断处续传 |
binary | 设置文件传输方式为二进制模式 | rhelp [cmd-name] | 请求获得远程主机的帮助 |
![cmd [args]] | 在本地主机中交互shell后退回到ftp环境,如:!ls *.zip | rstatus [file-name] | 若未指定文件名,则显示远程主机的状态,否则显示文件状态 |
accout [password] | 提供登录远程系统成功后访问系统资源所需的密码 | hash | 每传输1024字节,显示一个hash符号(#) |
append local-file [remote-file] | 将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名 | restart marker | 从指定的标志marker处,重新开始get或put,如restart 130 |
bye | 退出ftp会话过程 | rmdir dir-name | 删除远程主机目录 |
case | 在使用mget命令时,将远程主机文件名中的大写转为小写字母 | size file-name | 显示远程主机文件大小,如: size idle 7200 |
cd remote-dir | 进入远程主机目录 | status | 显示当前ftp状态 |
cdup | 进入远程主机目录的父目录 | system | 显示远程主机的操作系统 |
delete remote-file | 删除远程主机文件 | user user-name [password][account] | 向远程主机表明自己的身份,需要密码时,必须输入密码,如:user anonymous my@email |
dir [remote-dir][local-file] | 显示远程主机目录,并将结果存入本地文件 | help [cmd] | 显示ftp内部命令cmd的帮助信息,如help get |
FTP数字代码的意义
1 | 110 重新启动标记应答。 |
参考
1 | https://www.jianshu.com/p/600367e3a5b5 |
- 本文作者: 初心
- 本文链接: http://funzzz.fun/2021/02/04/vsftpd/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!