从端口 20/21 到黑白名单:一篇彻底搞懂 FTP 原理与实战的终极指南

目录

前言:

一、FTP 是什么?

Standard模式:

Passive模式:

二、FTP作用与工作原理

#2.1 FTP的作用和模式以及通信方式

##2.2 FTP工作原理与流程

#2.2.1 主动模式的工作原理:

#2.2.2 被动模式的工作原理:

三、搭建和配置FTP服务

##3.1 安装前准备工作

3.2 匿名用户案例

3.3 设置用户模式登录

添加黑


前言:

在数字化洪流奔涌的今天,文件依旧需要在不同的服务器、不同的系统、甚至不同的网络环境之间安全而高效地流转。诞生于上世纪 70 年代的 FTP(File Transfer Protocol),历经半个世纪的风雨,仍以其简洁、稳定、跨平台的特性,成为每一位开发者和系统管理员工具箱中不可或缺的“老兵”。

本篇文章将带你从零开始认识 FTP——不仅解释它“如何传文件”,更拆解“主动模式”与“被动模式”背后的网络哲学;不仅手把手教你 10 分钟搭建一个可用的 vsftpd 服务,更示范如何通过黑白名单、权限掩码、根目录禁锢等技巧,把简单的文件共享升级为可审计、可管控的企业级文件中心。

无论你是第一次触碰 Linux 的新手,还是想重温经典协议的老兵,都希望这篇博客能成为你随查随用的实战手册。接下来,就让我们打开终端,输入那条熟悉的 ftp 命令,一起走进 FTP 的世界。

一、FTP 是什么?

FTP(File Transfer Protocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。tcp协议:20,21
21端口: 用于传输指令
20端口:用于传输数据
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server

Standard模式:

FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

Passive模式:

在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

二、FTP作用与工作原理

#2.1 FTP的作用和模式以及通信方式

作用:Internet 上用来传送文件的协议。
VSFTP全称 (very secure FTP)  
VSFTP模式: C/S模式
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信
20端口用于建立数据连接,并传输文件数据
21端口用于建立控制连接,并传输FTP控制命令


##2.2 FTP工作原理与流程

FTP数据连接分为两种模式:
主动模式和被动模式
  FTP  会话包含了两个通道,控制通道和数据传输通道,FTP 的工作有两种模式,一种是主动模式,一种是被动模式,以 FTP Server 为参照,主动模式,服务器主动连接客户端传输;被动模式,等待客户的连接。

#2.2.1 主动模式的工作原理:

FTP 客户端连接到 FTP 服务器的 21 号端口,发送用户名和密码,客户端随机开放一个端口(1024 以上),发送PORT 命令到FTP 服务器,告知服务器客户端采用主动模式并开放端口,FTP 服务器收到PORT主动模式命令和端口后,通过服务器的 20 号端口和客户端开放的端口连接,发送数据,原理画图所示,(无论是主动还是被动模式,首先的控制通道都是先建立起来,只是在数据传输模式上的区别)

#2.2.2 被动模式的工作原理:

PASV 是 Passive 的缩写,中文成为被动模式,工作原理:FTP 客户端连接到 FTP 服务器所监听的21 号端口,发送用户名和密码,发送 PASV 命令到 FTP 服务器,服务器在本地随机开放一个端口(1024 以上),然后把开放的端口告知客户端,而后客户端再连接到服务器开放的端口进行数据传输,原理画图所示。
注:以上的说明主动和被动,是相对于的 FTP server 端而判断,如果 server 去连接client开放的端口,说明是主动的,相反,如果 client去连接server开放的端口,则是被动。

三、搭建和配置FTP服务

##3.1 安装前准备工作

#3.1.1 关闭防火墙和增强型安全功能

[root@localhost vsftpd]# systemctl stop firewalld
[root@localhost vsftpd]# systemctl disable firewalld
[root@localhost vsftpd]# setenforce 0
[root@localhost vsftpd]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@localhost vsftpd]# 

#使用yum 安装,开启FTP服务,文件备份

[root@localhost vsftpd]# yum install -y vsftpd

[root@localhost vsftpd]# systemctl start vsftpd
[root@localhost vsftpd]# systemctl enable vsftpd

[root@localhost vsftpd]# cd /etc/vsftpd/
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.bak

3.2 匿名用户案例

设置匿名用户访问的FTP服务(最大权限)
修改配置文件,并设置权限

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES    #开启匿名用户访问。默认已开启
write_enable=YES    #开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022    #设置匿名用户所上传数据的权限掩码(反掩码)。
anon_upload_enable=YES    #允许匿名用户.上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES   #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable=YES    #允许删除、重命名、覆盖等操作。需添加

# 设置权限
[root@localhost vsftpd]# chmod 777 /var/ftp/pub/ #为匿名访问ftp的根目录下的pub子目录设置最大权限,以便匿名用户.上传数据

# 重启
[root@localhost vsftpd]# systemctl restart vsftpd

服务器连接

# 服务器
C:\Users\EDY>ftp 192.168.10.103
连接到 192.168.10.103。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.103:(none)): ftp
331 Please specify the password.
密码:
230 Login successful.
ftp> pwd
257 "/"
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub
226 Directory send OK.
ftp: 收到 8 字节,用时 0.00秒 4.00千字节/秒。
ftp> cd pub
250 Directory successfully changed.
ftp> put Traffic.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 43 字节,用时 0.00秒 14.33千字节/秒。
ftp>

# 客户端
[root@localhost vsftpd]# ls -lh /var/ftp/pub/
总用量 4.0K
-rw-r--r--. 1 ftp ftp 43 8月  22 19:50 Traffic.txt


# 服务端
ftp> get car.txt 接受客户端发送的数据
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for car.txt (207 bytes).
226 Transfer complete.
ftp: 收到 207 字节,用时 0.00秒 207.00千字节/秒。

服务端

3.3 设置用户模式登录

设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(默认登录的根目录为本地用户的家目录)
#修改配置文件

[root@localhost pub]# vim /etc/vsftpd/vsftpd.conf

local_enable=Yes              #启用本地用户
anonymous_enable=NO          #关闭匿名用户访问
write_enable=YES              #开放服务器的写权限(若要上传,必须开启) 
local_umask=077               #可设置仅宿主用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES         #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES    #允许被限制的用户主目录具有写权限

#anon_mkdir_write_enable=YES  注释	
#anon_other_write_enable=YES  注释

[root@localhost pub]# systemctl restart vsftpd

创建用户

useradd
passwd

/home/用户名下的文件夹

# 服务器
C:\Users\EDY>ftp 192.168.10.103
连接到 192.168.10.103。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.103:(none)): test2
331 Please specify the password.
密码:
230 Login successful.
ftp> put Traffic.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 43 字节,用时 0.00秒 43.00千字节/秒。
ftp> put Traffic.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 43 字节,用时 0.00秒 43.00千字节/秒。
ftp>

# 客户端
[root@localhost pub]# ls /home/test2
Traffic.txt

把文件上传到/opt/CC目录下

C:\Users\EDY>ftp 192.168.10.103
连接到 192.168.10.103。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.103:(none)): test2
331 Please specify the password.
密码:
230 Login successful.
ftp> put car.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 144 字节,用时 0.00秒 144.00千字节/秒。
ftp>

# 客户端
[root@localhost pub]# ls /opt/CC
car.txt

添加黑

# 使用user_list用户列表文件

vim /etc/vsftpd/user_list
//末尾添加test2用户
test2


vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES    #启用user_list用户列表文件
userlist_deny=NO       #设置白名单,仅允许user_list用户列表文件的用户访问。默认为YES,为黑名单,禁用

用户被禁用

C:\Users\EDY>ftp 192.168.10.103
连接到 192.168.10.103。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.10.103:(none)): test2
530 Permission denied.
登录失败。
ftp>

总结:

1.1 TFP模式

主动模式:服务器主动发起数据连接
被动模式:服务器被动等待数据连接

2.1.配置匿名用户

  1. 开启匿名用户访问,默认已开启         

  2. 开启服务器的写的权限,默认已开启        

  3. 匿名用户的上传数据的权限,取消注释        

  4. 开区允许匿名用户上传目录,取消注释       

  5.  允许删除、重命名、覆盖等操作自己添加        

  6. 最后设置目录权限以便匿名用户上传数据

2.2 用户编辑模式

  1. 编辑主配置文件

  2. 启用本地用户

  3. 关闭·匿名用户

  4. 开放上传权限

  5. 用户被上传的文件权限(反掩码)

  6. 用户家目录禁锢

  7. 用户家目录具有写的权限(允许被限制的用户)关闭匿名 用户删除·创建·其他用户写的权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值