目录
Linux FTP 协议详解
1. FTP 概述
FTP(File Transfer Protocol,文件传输协议)是一种基于 TCP/IP 协议族的应用层协议,诞生于 1971 年,旨在实现不同计算机之间的文件传输。它定义了客户端与服务器之间进行文件交互的标准规则,支持跨平台、跨网络的文件操作,是互联网早期最核心的协议之一。
2. FTP 作用和模式以及通信方式
2.1 FTP 的作用
跨网络文件传输:这是 FTP 最核心的功能,允许用户将本地文件上传至远程 FTP 服务器,或从远程服务器下载文件至本地,不受操作系统和网络类型的限制,例如 Windows 客户端可向 Linux FTP 服务器上传文件。
文件及目录管理:用户登录 FTP 服务器后,可执行多种文件管理操作,包括创建目录(mkdir)、删除目录(rmdir)、删除文件(delete)、重命名文件或目录(rename)、查看目录列表(ls)等,如同管理本地文件系统一样便捷。
权限控制与资源共享:FTP 服务器可对不同用户设置不同的访问权限,例如匿名用户仅能下载文件,而本地用户可上传、下载和管理文件。这种权限机制使得 FTP 适用于团队内部文件共享、公共资源发布等场景。
2.2 FTP 的工作模式
FTP 的工作模式主要分为主动模式(Active Mode)和被动模式(Passive Mode),两种模式的核心区别在于数据连接的建立方式不同。
主动模式:由 FTP 服务器主动向客户端发起数据连接。在该模式下,客户端首先通过随机端口与服务器的 21 号控制端口建立控制连接,然后客户端告知服务器自己用于接收数据的临时端口(通常大于 1024),服务器随后从 20 号数据端口向客户端的临时端口发起数据连接。
被动模式:由 FTP 客户端主动向服务器发起数据连接。客户端与服务器建立控制连接后,服务器会开启一个临时数据端口(通常大于 1024)并告知客户端,客户端收到后,从自己的临时端口向服务器的临时数据端口发起数据连接。
被动模式在实际应用中更为常见,尤其是当客户端位于防火墙或 NAT(网络地址转换)设备后方时,主动模式下服务器发起的连接可能被防火墙阻挡,而被动模式可避免这一问题。
2.3 FTP 的通信方式
控制连接:贯穿整个 FTP 会话的连接,用于传输客户端与服务器之间的命令和响应信息(如登录请求、操作指令、状态码等),默认使用服务器的 21 号端口。控制连接一旦建立,在会话结束前会保持打开状态。
数据连接:仅在传输文件或目录列表等数据时建立的临时连接,数据传输完成后即关闭。数据连接的端口和建立方式由 FTP 的工作模式决定(主动模式使用服务器 20 号端口,被动模式使用服务器临时端口)。
3. FTP 的基本工作原理
FTP 基于客户端 - 服务器(C/S)架构,其工作原理可概括为:客户端通过控制连接向服务器发送操作命令(如登录、上传、下载等),服务器解析命令后执行相应操作,并通过控制连接返回响应信息(如状态码、错误提示等);当需要传输数据(文件或目录列表)时,客户端与服务器根据工作模式建立数据连接,完成数据传输后关闭数据连接,而控制连接保持至会话结束。
4. 搭建和配置 FTP 服务
以 Linux 系统中最常用的 vsftpd 为例,介绍 FTP 服务的搭建和配置过程。
4.1 安装 vsftpd 服务
通过系统包管理工具安装 vsftpd,以 CentOS 为例,执行命令:yum install vsftpd -y。

4.2 启动并设置开机自启动
安装完成后,启动 vsftpd 服务,执行:systemctl start vsftpd。同时设置开机自启动,CentOS 执行:systemctl enable vsftpd

4.3 配置匿名用户
vsftpd 的主配置文件为/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 #允许删除、重命名、覆盖等操作。

然后设置 chmod 777 /var/ftp/pub/ 为匿名访问ftp的根目录下的pub子目录设置最大权限,以便匿名用户上传数据
修改配置文件后,需重启 vsftpd 服务使配置生效,重启服务:systemctl restart vsftpd。

在windows系统输入win+r,打开cmd窗口,建立ftp连接输入 ftp 10.0.0.251,用户名ftp,密码没有

这样就登入成功,我们就可以执行一些命令比如下载文件,输入cd pub进入pub目录,然后输入get qwe.txt,把qwe.txt文件传输到本地

我们也可以使用put 4444.txt把本地文件上传到ftp目录

4.4 用户模式登录
在 /etc/vsftpd/vsftpd. conf 里面进行以下设置
local_enable=Yes #启用本地用户
anonymous_enable=NO #关闭匿名用户访问
write_enable=YES #开放服务器的写权限(若要上传,必须开启)
local_umask=077 #可设置仅宿主用户拥有被上传的文件的权限(反掩码)

chroot_local_user=YES #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES #允许被限制的用户主目录具有写权限
完成后重启服务,然后打开Windows的cmd输入ftp 10.0.0.251进行登入,输入对应的用户名和密码就可以登入了(我的用户名是www),

完成之后就可以输入命令进行操作,上传的文件默认在用户的家目录,如果需要更改用户的家目录
则在/etc/vsftpd/vsftpd. conf里添加一行local_root=/opt/666(这里是要设置的家目录)

wq保存即可,然后添加权限,chmod 777 /ott/666

比如我上传4444.txt后,文件就会保存在/opt/666目录下


在vim /etc/vsftpd/user_list 可以把用户加入黑名单,只需要在末尾加上用户名称即可
但是要用user_list用户列表文件,要在 /etc/vsftpd/vsftpd.conf 把这行userlist_enable=YES 启用(默认打开)
userlist_deny=NO 可以设置白名单,仅允许user_list用户列表文件的用户访问。默认为YES,为黑名单,禁用


1万+

被折叠的 条评论
为什么被折叠?



