Linux FTP的主动模式与被动模式
一、FTP主被动模式
FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21(也称为控制端口),其实还有一个数据端口20,根据FTP工作方式的不同,数据端口也不都是20,主动模式的被动模式使用的数据端口是不一样的,下面我就一步一步介绍主动ftp模式和被动ftp模式的区别。
1、FTP主动模式
主动模式的FTP工作原理:客户端从一个任意的非特权端口N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
(1)、任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
(2)、FTP服务器的21端口到大于1024的端口。(服务器响应客户端的控制端口)
(3)、FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
(4)、大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
2、FTP被动模式
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
(1)、从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
(2)、服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
(3)、从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
(4)、服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
3、主动模式ftp与被动模式FTP优点和缺点:
主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
二、配置FTP主被动模式
1、安装VSFTPD
yum install vsftpd -y
2、编辑配置文件
vim vsftpd.conf
# 是否允许匿名登录
anonymous_enable=YES
# 是否允许本地用户登录
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限
write_enable=YES
# 本地用户主目录
local_root=/var/ftp
# 匿名用户主目录
anon_root=/var/ftp/pub
# 是否允许匿名用户上传文件,如允许,须将全局的write_enable=YES
anon_upload_enable=YES
# 是否允许匿名用户创建新文件夹
anon_mkdir_write_enable=YES
# 容许匿名用户除了新建和上传外的其他权限
anon_other_write_enable=YES
# 本地用户掩码
local_umask=022
# 设置匿名登入者新增或上传档案时的umask值
anon_umask=022
# 是否激活目录欢迎信息功能
dirmessage_enable=YES
xferlog_enable=YES
# 主动模式数据传输20端口
connect_from_port_20=NO
xferlog_std_format=YES
# 是否监听ipv4
listen=YES
# listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 是否设置被动模式
pasv_enable=YES
# 被动模式传输使用端口
pasv_min_port=20020
pasv_max_port=20020
# 被动模式返回给客户端的ip地址(服务器内网穿透时使用)
pasv_address=0.0.0.0( 服务器外网ip )
# 设置用户访问目录,默认只允许用户自己的ftp目录
# 需要同时设置allow_writeable_chroot,允许受限用户的写权限,不然会报错
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
3、启动vsftpd服务
systemctl start vsftpd
4、设置开机启动vsftpd服务
systemctl enable vsftpd
5、只想让指定的账户不限制在其主目录,其它账户都限制在其主目录
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
6、设置ftp目录的权限
因安全问题,vsftpd不允许匿名用户在ftp主目录上传,可以新建一个子目录,然后设置权限为777。
7、关于local_umask和anon_umask掩码
掩码决定了上传文件的权限, 掩码为022代表上传后的文件权限为666-022=644 -> rw-r--r--
掩码即为要去除的权限位, 默认设为022即可。
8、关闭selinux
vim /etc/selinux/config
将其中SELINUX=enforcing改为SELINUX=disabled,保存退出, 然后重启:
reboot
参考博客:
[1]linux ftp与sftp,ftp的主动模式与被动模式
[2]Linux搭建FTP服务器-被动模式配置
posted on 2020-10-11 03:28 渴望飞翔的xian鱼 阅读(6992) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App