当前位置: 首页 > news >正文

Linux环境搭建FTP协议

FTP协议及其在Linux环境中的搭建与配置

  • 前言
  • 一、FTP概述
        • 1.1 FTP的定义与架构
        • 1.2 FTP的工作模式
  • 二、FTP的工作模式详解
        • 2.1 主动模式(Active Mode)
        • 2.2 被动模式(Passive Mode,PASV)
  • 三、FTP的作用与工作原理
        • 3.1 FTP的作用
        • 3.2 VSFTP简介
        • 3.3 FTP的工作原理与流程
  • 四、搭建和配置FTP服务
        • 4.1 安装前准备工作
          • 4.1.1 关闭防火墙和增强型安全功能
          • 4.1.2 查看服务是否安装
          • 4.1.3 安装VSFTP
          • 4.1.4 开启服务并设置开机自启
        • 4.2 配置FTP服务
          • 4.2.1 配置匿名用户
          • 4.2.1.1 修改配置文件
          • 4.2.1.2 设置目录权限
          • 4.2.1.3 完整配置示例
          • 4.2.1.4 重启VSFTP服务
          • 4.2.1.5 匿名访问测试
        • 4.3 设置用户模式登录
          • 4.3.1 修改配置文件
          • 4.3.1.1 完整配置示例
          • 4.3.1.2 重启VSFTP服务
          • 4.3.2 创建本地用户
          • 4.3.3 修改默认根目录(可选)
        • 4.4 使用用户列表文件进行访问控制
          • 4.4.1 编辑用户列表文件
          • 4.4.2 配置VSFTP使用用户列表文件
          • 4.4.3 重启VSFTP服务
  • 五、FTP客户端常用命令
  • 六、实验操作
        • 6.1 匿名用户服务端与客户端登录模式
          • 6.1.1 服务端配置
          • 6.1.2 客户端测试
        • 6.2 用户模式登录与黑白名单配置
          • 6.2.1 服务端配置
          • 6.2.2 客户端测试
  • 七、扩展内容
        • 7.1 其他FTP服务器软件
        • 7.2 其他文件传输协议
  • 八、结语

前言

  在当今数字化时代,文件传输是日常工作和生活中不可或缺的一部分。无论是个人用户在不同设备间共享照片、文档,还是企业内部及企业之间进行大规模的数据交换,都依赖于高效、可靠的文件传输协议。FTP(File Transfer Protocol,文件传输协议)作为互联网上最早且最广泛使用的文件传输协议之一,在文件传输领域扮演着重要角色。
  本文将探讨FTP协议,包括其基本概念、工作模式、作用与工作原理,详细介绍VSFTP(Very Secure FTP)这一在Linux环境中广泛应用的FTP服务,涵盖其安装、配置过程,以及匿名用户和本地用户登录模式的设置等内容。通过理论与实践相结合的方式,帮助读者全面理解FTP协议,并能够在实际环境中搭建和配置FTP服务,满足不同场景下的文件传输需求。

一、FTP概述

1.1 FTP的定义与架构

  FTP(File Transfer Protocol,文件传输协议)是典型的C/S(Client/Server,客户端/服务器)架构的应用层协议,需要由服务端软件和客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的、面向连接的,这为数据的传输提供了可靠的保证。FTP协议基于TCP协议,使用两个主要端口:20和21。

  • ​21端口​:用于传输指令,即控制连接,负责客户端与服务器之间的命令交互,如登录、目录切换、文件操作指令等。
  • ​20端口​:用于传输数据,即数据连接,负责实际文件的上传和下载。
1.2 FTP的工作模式

  FTP支持两种主要的工作模式:​主动方式(Active Mode)​和被动方式(Passive Mode,也称为PASV模式)​。这两种模式主要区别在于数据连接的建立方式,以适应不同的网络环境和防火墙配置。

二、FTP的工作模式详解

2.1 主动模式(Active Mode)

  在主动模式下,FTP客户端首先与FTP服务器的TCP 21端口建立控制连接,通过这个通道发送命令。当客户端需要接收数据时,会在本地随机开放一个大于1024的端口,并通过控制连接发送PORT命令到FTP服务器,告知服务器该客户端用于接收数据的端口。随后,FTP服务器通过自己的TCP 20端口与客户端开放的端口建立数据连接,进行数据的传输。
​工作流程简述:​​

  • 1.客户端与服务器的21端口建立控制连接。
  • 2.客户端在本地随机选择一个端口(例如1025)并发送PORT命令告知服务器。
  • 3.服务器通过20端口连接客户端的1025端口,进行数据传输。

​特点:​​

  • 服务器主动连接客户端的数据端口。
  • 需要客户端防火墙允许来自服务器20端口的连接,这在某些网络环境下可能受到限制。
2.2 被动模式(Passive Mode,PASV)

在被动模式下,FTP客户端同样首先与FTP服务器的TCP 21端口建立控制连接,发送用户名和密码进行身份验证。当需要传输数据时,客户端发送PASV命令到FTP服务器。服务器接收到PASV命令后,在本地随机开放一个大于1024的端口,并将该端口号告知客户端。随后,客户端主动连接到服务器开放的端口进行数据传输。
​工作流程简述:​​

  • 1.客户端与服务器的21端口建立控制连接。
  • 2.客户端发送PASV命令。
  • 3.服务器随机开放一个端口(例如5000)并告知客户端。
  • 4.客户端连接到服务器的5000端口,进行数据传输。

​特点:​​

  • 客户端主动连接服务器的数据端口。
  • 更适用于客户端位于防火墙后的情况,因为数据连接是由客户端发起的。

​总结:​​

  • ​主动模式​:服务器主动发起数据连接,适用于服务器防火墙配置较为宽松的环境。
  • 被动模式​:服务器被动等待数据连接,适用于客户端防火墙配置较为严格的环境。

三、FTP的作用与工作原理

3.1 FTP的作用

  FTP的主要作用是在互联网上进行文件的传输。它允许用户在不同计算机之间通过FTP协议上传和下载文件,广泛应用于网站管理、软件分发、数据备份等场景。

3.2 VSFTP简介

  VSFTP(Very Secure FTP)是一个在Linux环境中广泛使用的FTP服务器软件,以其高安全性和稳定性著称。VSFTP采用C/S模式,与FTP客户端配合使用,实现文件的传输。

3.3 FTP的工作原理与流程

FTP的通信包含两个主要通道:
1.​控制通道​:通过21端口进行,用于传输FTP控制命令,如登录、目录操作、文件操作指令等。
2.​数据通道​:通过20端口(主动模式)或服务器指定的其他端口(被动模式)进行,用于实际的文件数据传输。

FTP的工作流程主要包括以下几个步骤:
1.​建立控制连接​:客户端通过TCP 21端口与服务器建立控制连接,发送登录凭证(用户名和密码)。
2.​身份验证​:服务器验证客户端的身份,确认其有权访问。
3.​命令交互​:客户端通过控制连接发送各种FTP命令,如列出目录、上传、下载文件等。
4.​数据连接建立​:根据所采用的模式(主动或被动),建立数据连接。
5.​数据传输​:通过数据连接进行文件的上传或下载。
6.​连接关闭​:数据传输完成后,关闭数据连接和控制连接。

四、搭建和配置FTP服务

4.1 安装前准备工作

  在Linux环境中,以CentOS为例,搭建FTP服务通常使用VSFTP。以下是安装和配置VSFTP的步骤:

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

  为了简化配置过程,首先需要关闭防火墙和SELinux(增强型安全功能)。但在生产环境中,建议根据具体需求配置防火墙规则,而不是完全关闭。

systemctl stop firewalld    # 关闭防火墙
systemctl disable firewalld  # 开机自启动时关闭防火墙 
setenforce 0         # 临时关闭SELinux

在这里插入图片描述
在这里插入图片描述

4.1.2 查看服务是否安装

在安装之前,可以查看系统是否已经安装了VSFTP。

yum info vsftpd  或  rpm -q|grep vsftp

在这里插入图片描述

4.1.3 安装VSFTP

如果未安装VSFTP,可以使用yum包管理器进行安装。
yum install -y vsftpd

4.1.4 开启服务并设置开机自启

安装完成后,启动VSFTP服务并设置为开机自启动。

systemctl start vsftpd        #启动FTP服务
systemctl enable vsftpd     # 开机自启FTP服务

在这里插入图片描述

4.2 配置FTP服务

  VSFTP的主要配置文件位于/etc/vsftpd/vsftpd.conf。在进行任何配置更改之前,建议先备份原始配置文件。

cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak

在这里插入图片描述

4.2.1 配置匿名用户

  匿名用户允许任何用户无需提供具体的用户名和密码即可访问FTP服务器,通常用于公共文件的共享。

4.2.1.1 修改配置文件

编辑VSFTP的配置文件:
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   #允许删除、重命名、覆盖等操作​(需添加)
4.2.1.2 设置目录权限

  为匿名访问FTP的根目录下的pub子目录设置最大权限,以便匿名用户上传数据。
chmod 777 /var/ftp/pub/
在这里插入图片描述

4.2.1.3 完整配置示例

确保/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
4.2.1.4 重启VSFTP服务

配置完成后,重启VSFTP服务以应用更改。
systemctl restart vsftpd

4.2.1.5 匿名访问测试

在Windows系统上,可以通过命令提示符进行匿名访问测试:
1.打开命令提示符:开始菜单 -> 输入cmd-> 回车。
2.建立FTP连接:

cmd
ftp [IP地址]
#匿名访问,用户名为ftp,密码为空,直接回车即可完成登录。
#常用FTP命令:
pwd:查看当前目录(匿名访问的根目录为Linux系统的/var/ftp/目录)。
ls:查看当前目录内容。
cd pub:切换到pub目录。
get 文件名:下载文件到当前Windows本地目录。
put 文件名:上传文件到FTP目录(需确保有上传权限)。
quit:退出FTP会话。

在这里插入图片描述
注意​:确保/var/ftp/pub/目录具有适当的权限,以允许匿名用户上传和下载文件。

4.3 设置用户模式登录

  除了匿名用户,VSFTP还支持本地用户通过用户名和密码进行登录。为了增强安全性,通常会将用户限制在其家目录中,防止其访问系统其他部分。

4.3.1 修改配置文件

编辑VSFTP的配置文件:
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_enableanon_other_write_enable),以避免冲突。

4.3.1.1 完整配置示例

确保/etc/vsftpd/vsftpd.conf中包含以下配置:

local_enable=YES
anonymous_enable=NO
write_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
4.3.1.2 重启VSFTP服务

配置完成后,重启VSFTP服务以应用更改。
systemctl restart vsftpd

4.3.2 创建本地用户

创建用于FTP登录的本地用户,例如zhangsan和wangwu。

useradd zhangsan
passwd zhangsan
useradd wangwu
passwd wangwu

按照提示设置用户密码。

4.3.3 修改默认根目录(可选)

如果需要将匿名用户或本地用户的默认根目录修改为其他目录,例如/var/www/html,可以进行如下配置:

anon_root=/var/www/html      #​针对匿名用户​
local_root=/var/www/html      #针对本地用户

​注意​:确保所设置的目录存在,并具有适当的权限。

4.4 使用用户列表文件进行访问控制

  VSFTP允许通过用户列表文件(/etc/vsftpd/user_list)来控制哪些用户可以访问FTP服务器。通过配置,可以实现白名单或黑名单机制。

4.4.1 编辑用户列表文件

编辑用户列表文件,添加允许访问的用户,例如zhangsan。
vim /etc/vsftpd/user_list
在文件末尾添加用户名:
zhangsan
wangwu

4.4.2 配置VSFTP使用用户列表文件

编辑VSFTP的主配置文件:
vim /etc/vsftpd/vsftpd.conf
确保以下配置项正确设置:

userlist_enable=YES     #​启用user_list用户列表文件​
userlist_deny=NO      #设置白名单,仅允许user_list用户列表文件中的用户访问​(默认为黑名单,需修改)​
#说明​:
​userlist_deny=YES​(默认)     #user_list文件作为黑名单,文件中列出的用户将被拒绝访问。
userlist_deny=NO​      #user_list文件作为白名单,只有文件中列出的用户才被允许访问。
4.4.3 重启VSFTP服务

配置完成后,重启VSFTP服务以应用更改。
systemctl restart vsftpd
在这里插入图片描述

五、FTP客户端常用命令

  在与FTP服务器进行交互时,FTP客户端提供了一系列命令,便于用户进行文件和目录操作。以下是一些常用的FTP客户端命令:

  • cd​:改变远程工作目录,格式为 cd <远程目录路径>
  • lcd​:改变本地工作目录,格式为 lcd <本地目录路径>
  • put​:将本地文件上传到远程服务器,格式为 put <本地文件路径+文件名>
  • get​:从远程服务器下载文件到本地,格式为 get <远程文件路径+文件名>
  • mput​:批量上传多个文件到远程服务器,格式为 mput <文件名称1> <文件名称2>...
  • mget​:批量下载多个远程文件至本地,格式为 mget <文件名称1> <文件名称2>...
  • delete​:删除远程单个文件,格式为 delete <远程文件名>
  • rmdir​:删除远程目录,格式为 rmdir <远程目录名>
  • mkdir​:创建一个远程目录,格式为 mkdir <远程目录名>
  • quit​|bye:结束FTP会话并退出FTP客户端。

​示例​:

ftp> cd /path/to/remote/directory
ftp> lcd /path/to/local/directory
ftp> put localfile.txt
ftp> get remotefile.txt
ftp> mput file1.txt file2.txt
ftp> mget file3.txt file4.txt
ftp> delete remotefile.txt
ftp> rmdir remotedir
ftp> mkdir newdir
ftp> quit

六、实验操作

6.1 匿名用户服务端与客户端登录模式
6.1.1 服务端配置

确保匿名用户访问的FTP服务配置正确,给予最大权限:

1.​修改配置文件​ /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 # 允许删除、重命名、覆盖等操作。需添加
2.​设置目录权限​
chmod 777 /var/ftp/pub/ # 为匿名访问ftp的根目录下的pub子目录设置最大权限,以便匿名用户上传数据
3.​重启VSFTP服务
systemctl restart vsftpd

6.1.2 客户端测试

在Windows系统上,通过命令提示符进行匿名访问测试:
1.​打开命令提示符​:开始菜单 -> 输入cmd-> 回车。
2.​建立FTP连接​:
cmd
ftp 192.168.10.22
3.​匿名登录​:用户名为ftp,密码为空,直接回车即可完成登录。
4.​常用命令​:

  • pwd:查看当前目录(匿名访问的根目录为Linux系统的/var/ftp/目录)。
  • ls:查看当前目录内容。
  • cd pub:切换到pub目录。
  • get 文件名:下载文件到当前Windows本地目录。
  • put 文件名:上传文件到ftp目录(需确保有上传权限)。
  • quit:退出FTP会话。
6.2 用户模式登录与黑白名单配置
6.2.1 服务端配置

配置本地用户验证访问FTP,并禁止切换到FTP以外的目录:
1.​修改配置文件​ /etc/vsftpd/vsftpd.conf
local_enable=YES # 启用本地用户
anonymous_enable=NO # 关闭匿名用户访问
write_enable=YES # 开放服务器的写权限(若要上传,必须开启)
local_umask=077 # 可设置仅宿主用户拥有被上传的文件的权限(反掩码)
chroot_local_user=YES # 将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES # 允许被限制的用户主目录具有写权限
2.​注释掉或删除与匿名用户相关的写权限配置#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
3.​重启VSFTP服务​
systemctl restart vsftpd
4.​创建本地用户​
useradd zhangsan
passwd zhangsan
useradd wangwu
passwd wangwu
5.​修改默认根目录(可选)​​:

​针对匿名用户​:anon_root=/var/www/html       #anon_root 针对匿名用户
针对本地用户:local_root=/var/www/html      # local_root针对系统用户

6.​使用用户列表文件进行访问控制​:
编辑用户列表文件​ /etc/vsftpd/user_list:vim /etc/vsftpd/user_list
末尾添加用户,例如 zhangsan
[用户名]
​配置VSFTP使用用户列表文件​ /etc/vsftpd/vsftpd.conf

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

7.​重启VSFTP服务​
systemctl restart vsftpd

6.2.2 客户端测试

使用创建的本地用户(如zhangsan)进行FTP登录:
1.​打开命令提示符​:开始菜单 -> 输入cmd-> 回车。
2.​建立FTP连接​:

cmd
ftp 192.168.10.12
或者使用用户名和密码进行连接:
cmd
ftp://zhangsan@192.168.10.12

3.​登录​:输入用户名zhangsan和相应密码。
4.​常用命令​:

  • cd:改变远程工作目录。
  • lcd:改变本地工作目录。
  • put:将本地文件上传到远程服务器。
  • get:从远程服务器下载文件到本地。
  • mput:批量上传多个文件到远程服务器。
  • mget:批量下载多个远程文件至本地。
  • delete:删除远程单个文件。
  • rmdir:删除远程目录。
  • mkdir:创建一个远程目录。
  • quit:结束FTP会话并退出FTP客户端。

七、扩展内容

7.1 其他FTP服务器软件

除了VSFTP,还有其他FTP服务器软件可在不同操作系统中使用:

  • ​Windows​:Serv-U、FTP Server、FileZilla Server
  • ​Linux​:ProFTPD
  • ​重点​:在Linux工作环境中,​Very Secure FTP(VSFTP)​是最常用的FTP服务。
7.2 其他文件传输协议
  • TFTP(Trivial File Transfer Protocol)​​:使用端口69,是一种简单文件传输协议,常用于网络设备的固件升级。
  • ​SFTP(SSH File Transfer Protocol)​​:通过SSH协议进行文件传输,提供更高的安全性,常用于需要加密传输的场景。

八、结语

  通过本文的详细介绍,我们从FTP协议的基本概念出发,深入探讨了其工作模式、作用与工作原理,并重点介绍了在Linux环境中使用VSFTP搭建和配置FTP服务的全过程。文章涵盖了从安装前准备、配置匿名用户和本地用户登录模式,到使用FTP客户端命令进行文件传输的各个方面。
  FTP作为经典的文件传输协议,尽管面临现代安全协议如SFTP、FTPS等的挑战,但在某些场景下仍具有不可替代的价值。通过合理配置和安全管理,FTP服务依然能够为个人用户和企业提供高效、便捷的文件传输解决方案。
  在实际应用中,建议根据具体需求选择合适的文件传输协议,并结合防火墙、访问控制、加密等措施,确保数据传输的安全性和可靠性。同时,持续关注和学习新的文件传输技术和协议,将有助于提升文件传输的效率和安全性。
  希望本文能够为您在搭建和管理FTP服务时提供有价值的参考和指导,助您在文件传输和网络服务配置的道路上取得更多的成功与进步!

http://www.dtcms.com/a/346226.html

相关文章:

  • fdisk工具源码编译生成
  • 记SpringBoot3.x + SpringSecurity6.x的实现
  • 20250822日记
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第四章知识点问答(37题)
  • 如何编译botan加密库?
  • 模板商城探秘:DINO-X 定制模板指南(1)
  • Ansys Motor-CAD:概述(EMag、THERM、LAB、MECH)
  • Unreal Engine UActorComponent
  • 豆包 + 蘑兔,破解写歌难题!
  • 普中烧录软件 PZISP,打不开,提示“应用程序无法启动,因为应用程序并行配置不正确.....”
  • 深度学习设计模式:责任链(Chain of Responsibility)模式(例子+业务场景+八股)
  • RFID技术在铸管生产车间AGV小车的使用
  • SQL 复杂连接与嵌套查询的优化之道:从自连接、不等值连接到 CTE 的体系化实践
  • 「数据获取」《中国农村统计年鉴》1985-2024(获取方式看绑定的资源)
  • Python中各种数据类型的常用方法
  • 国产轻量级桌面GIS软件Snaplayers从入门到精通(20)
  • 自定义单线通信协议解析
  • Unreal Engine Simulate Physics
  • MySQL InnoDB记录存储结构深度解析
  • windows 帮我写一个nginx的配置,端口是9999,静态资源的路径是D:\upload
  • 企业架构之微服务应用架构
  • 深入理解底层通信协议和应用层协议的区别
  • Java Stream常见函数与应用案例
  • 大模型应用发展与Agent前沿技术趋势(下)
  • Debezium导致线上PostgreSQL数据库磁盘日志飙升处理方案
  • Unreal Engine ATriggerVolume
  • java 海报、图片合成
  • 蓝牙部分解析和代码建构
  • SSH如何访问只有没有公网IP的云服务器
  • loss 基本稳定,acc 一直抖动,如何优化?