vsftpd 的安装和应用(超详细!!!)

news2024/11/30 8:02:52

        FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络上进行文件传输的标准协议。它允许用户从一台计算机向另一台计算机上传或下载文件。FTP的工作原理涉及到客户端和服务器之间的交互,以及数据传输的过程。

一、FTP的工作流程

        当FTP客户端要上传/下载文件时,通过与服务端21号端口建立于 TCP之上的控制连接,当服务端收到命令之后,立即进行验证或者响应(如:用户名和密码验证,文件传输命令等)。服务端收到文件传输命令时,就需要和客户端建立一个数据连接通道用于传输文件,这个连接的建立,可以由客户端主动发起,也可以由服务端发起。

        数据连接并不是永久性存在的,一旦传输完毕就会将这个连接关闭掉,对于控制连接,而只有关闭客户端,控制连接才会随之关闭。控制连接是随客户端一起存在的,而数据连接是短暂存在的,只要文件/列表传输完成,数据连接就关闭了。

        FTP协议有主动式和被动式两种工作方式,主动与被动是针对服务器是否主动发起数据连接而言的。

主动模式:

  •         在第1步中,客户端的命令端口(≥1024)与 FTP 服务端的命令端口(21)建立连接,并发送命令"PORT 1027";
  •         在第2步中,FTP服务端给客户端的命令端口返回一个"ACK";
  •         在第3步中,FTP服务端发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接;(由于多数防火墙不允许接受外部发起的连接,所以主动模式通过防火墙时可能会受到限制。)
  •         在第4步中,客户端给FTP服务器端返回一个"ACK"相应,主动式的控制连接和数据连接已经建立成功。

解释:ACK是“acknowledgement”的缩写,意思是“确认”。ACK消息通常包含一个序列号,这个序列号对应于接收到的数据包的序列号。当发送方发送一个数据包时,它会包含一个序列号。接收方在收到数据包后,会发送一个ACK消息,其中包含下一个期望接收的数据包的序列号。这样,发送方就知道数据包已经被成功接收,并且可以继续发送下一个数据包。

被动模式:

        在FTP被动模式中,控制连接数据连接都由客户端发起,这样可以解决从服务端到客户端的入方向数据端口被客户端所在网络防火墙过滤掉的问题。

  •         在第1步中,客户端的命令端口(≥1024)与FTP 服务端的命令端口(21)建立连接,并发送命令"PASV";(PASV(Passive,被动)请求服务器进入被动模式)
  •         在第2步中,FTP服务端返回命令"PORT 2024"(可以自定义PORT范围)给客户端,告知FTP服务端将用哪个端口侦听数据连接;
  •         在第3步中,客户端发起一个从它自己的数据端口(N+1)到FTP服务端先前指定的数据端口(2024)的连接;
  •         在第4步中,FTP服务端给客户端的数据端口返回一个"ACK"响应,被动式的控制连接和数据连接已经建立成功。

        PASV模式的主要优点是它允许客户端从任意端口发起数据连接,而不需要客户端的防火墙或NAT设备开放特定的端口。这对于客户端来说更加方便,因为它不需要知道服务器的具体数据端口,也不需要修改防火墙规则。

        然而,PASV模式也给服务器端带来了问题,因为它需要服务器开放一个范围较大的端口供客户端连接。这可能会导致服务器暴露更多的端口,从而增加安全风险。因此,在服务器端配置FTP服务时,管理员需要仔细选择PASV模式侦听的端口范围,并在防火墙上相应地开放这些端口。

        在企业环境中,如果FTP服务器和客户端都位于同一个网络内部,并且防火墙规则允许,那么FTP可以以主动模式工作,只需要在FTP服务器的防火墙规则中开放20和21端口即可。但是,如果客户端位于防火墙或NAT后面,那么使用PASV模式可能是更好的选择,因为它不需要客户端开放额外的端口。

二、安装vsftpd软件包

前提条件:

1.虚拟机是Centos7及以上系统
2.虚拟机在NAT模式下能够联网

如果NAT模式不能上网可以看另一期刊(零基础小白都会)

成功解决:CentOS7 NAT模式不能联网-CSDN博客

首先查看系统是否vsftpd软件包

rpm -qa|grep vsftpd

开始安装

sudo yum install vsftpd

 如果出现以下的情况:

原因是/etc/yum.repos.d 目录下CentOS-Base.repo文件的镜像源已经过时了,需要改地址

cd /etc/yum.repos.d
vi CentOS-Base.repo

 将里面的内容全删掉,(快捷键:50dd) ,将下面的内容粘贴到文件里面

[base]
name=CentOS-7 - Base
failovermethod=priority
baseurl=http://vault.centos.org/centos/7.9.2009/os/x86_64/

gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-7 - Extras
failovermethod=priority
baseurl=http://mirror.centos.org/centos/7/extras/x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-7 - Updates
failovermethod=priority
baseurl=http://mirror.centos.org/centos/7/updates/x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 修改后再次使用命令:

sudo yum install vsftpd

三、配置和启动vsftpd服务

(1)匿名开放模式

        匿名开放模式是一种FTP服务器的配置方式,允许用户无需提供用户名和密码即可访问服务器上的文件。

1、修改文件之前可以先备份一份,防止文件修改出错后导致不必要的麻烦
cd /etc/vsftpd
 2、查看一下当前目录的文件
ls
 3、拷贝

当然如果不想拷贝也可以快照保存一份! 

4、配置vsftpd.conf文件:
vi /etc/vsftpd/vsftpd.conf

注意文件里面如果存在下面的代码就不用重写,如果前面有# ,将#去掉即可

anonymous_enable=yes

anon_root=/var/ftp

anon_upload_enable=yes

anon_mkdir_write_enable=yes

anon_other_write_enable=yes

anon_umask=022

write_enable=yes

参数作用
anonymous_enable=YES允许匿名访问
anon_root=/var/ftp设置匿名用户目录
anon_upload_enable=YES允许匿名用户上传文件
anon_mkdir_write_enable=YES允许匿名用户创建目录
anon_other_write_enable=YES开放匿名用户的其他写入权限(如:重命名、删除等)
anon_world_readable_only=YES只允许匿名用户下载, 默认YES,可不加入
write_enable = YES设置可写权限
anon_umask = 022匿名umask值,默认(目录077,普通文件066)

        尽管在配置文件中设置了这些选项,但FTP服务器仍然需要文件系统权限的支持才能执行这些操作。例如,如果/var/ftp目录的权限不允许写入,那么即使anon_upload_enable设置为yes,匿名用户也无法上传文件。因此,需要确保/var/ftp目录及其子目录的权限设置正确,以允许匿名用户进行所需的操作。

通常,需要执行以下步骤来修改文件权限:

  • 使用chmod命令来修改目录和文件的权限,确保匿名用户有足够的权限进行读写操作。
  • 使用chown命令来更改文件和目录的所有者,如果需要的话。
5、创建文件目录:
mkdir /var/ftp
mkdir /var/ftp/pub
6、修改pub文件的所属主

修改前:

chown -Rf ftp /var/ftp/pub

修改后:

 7、修改pub文件权限

修改前:

chmod o+w /var/ftp/pub

 修改后:

 注意:不要修改ftp文件夹的所属主和权限!!!不然会一直出现登入验证!

这里都不能修改!!!(如果修改了就要改回去!)

8、停止防火墙或设置防火墙允许FTP服务

方法1:

关闭防火墙

systemctl stop firewalld

方法2:

使用firewall-cmd命令来添加FTP服务规则,这将自动允许控制端口21和数据端口20

sudo firewall-cmd --permanent --add-service=ftp

为了使上述规则立即生效,你需要重新加载防火墙配置 

sudo firewall-cmd --reload
9、将SELinux设置为Permissive

检查SELinux状态: 首先,检查SELinux是否正在运行。

getenforce

设置状态:

setenforce 0

 注意:启动vsftpd服务之前一定要设置好防火墙SELinux!!!不然登入vsftpd服务后没有权限上传数据和更改文件!!!

10、打开vsftpd服务 
systemctl start vsftpd

可以使用ifconfig查看当前虚拟机的ip地址

11、在windows的地址栏中登入

在pub文件夹里可以随意创建和删除文件(注意:只能在pub文件里,不能在pub同级文件外)

也可以上传文件  

回到虚拟机查看pub下面的文件

发现这些文件的所属主是ftp,所以这些文件拥有所有的权限


(2)本地用户模式

1、配置vsftpd.conf文件:

anonymous_enable=no

local_enable=YES

write_enable=YES

local_umask=022

local_root=/share

参数作用
anonymous_enable=NO禁止匿名访问,默认存在
local_enable=YES允许本地用户模式,默认存在
write_enable=YES设置可写权限,默认存在
local_umask=022umask值,默认022存在
local_root=/share设置本地用户的FTP根目录
2、创建/share文件
mkdir /share
3、增加一个用户tom,设置密码为123456
useradd tom
passwd tom

 输入两次123456即可

4、修改share文件的权限

修改前:

chmod 1757 /share

修改后:

 

解释:文件权限中的t表示“粘滞位”(sticky bit)。粘滞位通常用于目录,而不是普通文件,尽管在某些情况下它也可以应用于可执行文件。 

        目录中的粘滞位: 当一个目录被设置了粘滞位时,它意味着只有文件的所有者、目录的所有者或root用户可以删除或重命名该目录中的文件。即使其他用户有写权限,他们也不能删除或重命名这些文件。这通常用于共享目录,如/tmp,以防止用户删除或重命名其他用户的文件。例如,/tmp目录通常被设置为粘滞位,以便任何用户都可以在其中创建临时文件,但只有文件的所有者才能删除或重命名这些文件。

5、启动vsftpd之前一定要确保防火墙和selinux是关闭状态!!!

方法1:

关闭防火墙

systemctl stop firewalld

方法2:

使用firewall-cmd命令来添加FTP服务规则,这将自动允许控制端口21和数据端口20

sudo firewall-cmd --permanent --add-service=ftp

为了使上述规则立即生效,你需要重新加载防火墙配置 

sudo firewall-cmd --reload

检查SELinux状态: 首先,检查SELinux是否正在运行。

getenforce

设置状态:

setenforce 0
6、在windows的地址栏中登入

 同样可以创建文件、上传文件、删除文件

7、在Linux客户端访问FTP服务 

(1)首先安装ftp软件包

yum install ftp

(2)使用ftp命令登入

ftp 192.168.81.128

每台电脑的ip地址不同,输入自己虚拟机的ip(用ifconfig查看)

这样就登入成功了

命令作用
bye或quit退出FTP管理方式
chmod改变远程主机的文件权限
delete删除远程主机中的文件
get  [remote-file]  [local-file]从远程主机中传送至本地主机中(即:下载)
?  [command] 或者 help[command]输出命令的解释
ls或者dir列出文件
put  local-file  [remote-file]将本地一个文件传送至远程主机中(即:上传)
mget  和  mput批量下载和批量上传
open  host  [port]重新建立一个新的连接
cd,pwd,mkdir同Linux下的命令
从ftp子系统退出到外层,临时执行命令


补充:        

        在绝大多数情况下,为了系统的安全和稳定性,都要求限制 ftp 用户只能在其主目录下活动,不允许他们跳出主目录之外浏览服务器上的其他目录。这时候就需要使用到chroot_local _user、chroot_list_enable 和chroot_list_file三个配置选项,三个配置项的解释如下。

        chroot_local_user,是否将所有用户限制在主目录,YES/NO为启用/禁用(默认NO)。安装vsftpd后不做配置,匿名用户不能切换到主目录之外,而 ftp 本地用户是可以切换到主目录之外的。

        chroot_list_enable,是否启动限制用户的名单,YES/NO为启用/禁用(默认NO)。        

        chroot_list_file =/etc/vsftpd/chroot_list,是否限制在主目录下的用户名单,至于是限制/运行  名单取决于 chroot_local_user的值。
        chroot_local_user是一个全局性的设定,YES表示全部用户被锁定于主目录,NO则表示全部用户不被锁定于主目录。为适应一些特殊情况,可能需要作出"微调",即需要一种"例外机制",所以当chroot_list_enable= YES时,表示我们"需要例外",当chroot_list_enable=NO时,表示我们"不需要例外"。
        

        为了更好地理解与应用,利用已经搭建好FTP的本地用户模式,并创建/etc/vsftpd/chroot_list文件,在里面添加tom用户。

vi /etc/vsftpd/chroot_list

然后配置vsftpd.conf文件,chroot_local_user的设置,通常全局禁止跳出主目录,使用chroot_list 文件添加例外,即:先禁止,再开口方式。

chroot_local_user=yes

allow_writeable_chroot = YES

chroot_list_enable=yes

chroot_list_file= /etc/vsftpd/chroot_list

注意修改后要重启服务

systemctl restart vsftpd

使用windows地址栏登入:

        因为chroot_local_user=yes设置了所有用户不能跳出主目录,但是在chroot_list文件中添加了tom并且chroot_list_enable=yes,所以tom用户是个例外可以跳出主目录创建文件或删除

 假设文件/etc/vsftpd/chroot_list里写了Jerry用户

选项1选项2效果
chroot_list_enable=YESchroot_local_user=NO所有用户都限制在其主目录下;
使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制。
即:Jerry可以切换,Jack不可以切换
chroot_list_enable=YESchroot_local_user=YES所有用户都不限制在其主目录下;
使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制。
即:Jerry不可以切换,Jack可以切换
chroot_list_enable=NOchroot_local_user=NO所有用户都限制在其主目录下;
没有例外。
即:所有的用户(Jerry、Jack)都可以切换
chroot_list_enable=NOchroot_local_user=YES所有用户都不限制在其主目录下;
没有例外。
即:所有的用户(Jerry、Jack)都可以切换

        匿名用户不能跳出主目录,如果增加匿名用户对应主目录的w权限,需要主配置文件中增加allow_writeable_chroot = YES选项

        本地用户默认能跳出主目录,可以增加登录用户对应主目录的w权限,可以正常登录。如果设置 chroot_local_user=YES,必须主配置文件中增加allow_writeable_chroot = YES选项,才可以增加登录用户对应主目录的w权限,或更改主目录的所属主或所属组为登录用户,否则会报错,登录失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apifox 11月更新|支持发布多个文档站、文档站支持 Algolia 搜索配置、从返回响应直接设置断言

Apifox 新版本上线啦!!! 在API管理和自动化测试的领域,工具的每一次更新,都意味着开发者和测试人员的工作效率将进一步提升。而11月的Apifox更新,再次为我们带来了几个重磅的新功能,助力提升文档…

关于音频 DSP 的接口种类以及其应用场景介绍

在音频系统中,DSP(数字信号处理器)扮演着重要角色,通常会通过不同的接口与音频系统中的其他组件(如功放、扬声器、音频源等)进行连接。以汽车应用场景为例,以下是一些常见的接口类型分类及其介绍…

Java多线程介绍及使用指南

“多线程”:并发 要介绍线程,首先要区分开程序、进程和线程这三者的区别。 程序:具有一定功能的代码的集合,但是是静态的,没有启动运行 进程:启动运行的程序【资源的分配单位】 线程:进程中的…

Python-链表数据结构学习(1)

一、什么是链表数据? 链表是一种通过指针串联在一起的数据结构,每个节点由2部分组成,一个是数据域,一个是指针域(存放下一个节点的指针)。最后一个节点的指针域指向null(空指针的意思&#xff0…

《心灵奇旅》观后感

1 这是一部能够给心灵带来慰藉的电影,或许在人生迷茫的时候,可以看一下,洗涤内心,换还自己一片净土。 影片的男主乔伊是一位音乐老师,他一直梦想着能够加入乐队演出。然而,在即将有机会出演时,他…

使用easyexcel导出复杂模板,同时使用bean,map,list填充

背景 在使用easyexcel导出时,如果遇到一个模板中同时存在 一部分是实体类中的字段,另外部分是列表的字段,需要特殊处理一下,比如下面的模板: 这里面 user, addr 是实体类(或者map&#xff09…

3.22【计组】 流水线加法器

实验一 timescale 1ns / 1ps/* ALU模块实现两个32bit数的add、sub、and、or、not、slt功能, 但由于Nexy7输入口限制,将num1简化为8位,在过程中再extend成32位,num2作为内部wire自行赋值,此处赋为5 由于最后的结果在to…

漫谈推理谬误——错误因果

相关文章 漫谈推理谬误——错误假设-CSDN博客文章浏览阅读736次,点赞22次,收藏3次。在日常生活中,我们会面临各种逻辑推理,有些看起来一目了然,有些非常的科学严谨,但也有很多似是而非,隐藏了陷…

实现 vue3 正整数输入框组件

1.实现代码 components/InputInteger.vue <!-- 正整数输入框 --> <template><el-input v-model"_value" input"onInput" maxlength"9" clearable /> </template><script lang"ts" setup> import { ref …

Hot100 - 搜索二维矩阵II

Hot100 - 搜索二维矩阵II 最佳思路&#xff1a; 利用矩阵的特性&#xff0c;针对搜索操作可以从右上角或者左下角开始。通过判断当前位置的元素与目标值的关系&#xff0c;逐步缩小搜索范围&#xff0c;从而达到较高的效率。 从右上角开始&#xff1a;假设矩阵是升序排列的&a…

Hello SpringBoot!

Spring Initializr&#xff1a;一个快速构建springboot项目的网站 进入网站后&#xff0c;选择&#xff1a; Project: MavenLanguage: JavaSpring Boot: 最新稳定版Dependencies: Spring Web 生成的文件结构类似于&#xff1a; my-spring-boot-app ├── src │ ├── m…

模型压缩——量化方法解读

1.引言 前面我们已经介绍了剪枝、蒸馏等通过减少模型参数量来进行压缩的方法。除这些方法以外&#xff0c;量化 (quantization) 是另一种能够压缩模型参数的方法。与前面方法不同的是&#xff0c;量化并不减少模型参数量&#xff0c;而是通过修改网络中每个参数占用的比特数&a…

Core 授权 认证 案例

利用 cookie 模式 》》 框架默认的 利用 cookie 模式 》》 策略授权

计算机网络常见面试题总结(上)

计算机网络基础 网络分层模型 OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出的一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需…

Macos远程连接Linux桌面教程;Ubuntu配置远程桌面;Mac端远程登陆Linux桌面;可能出现的问题

文章目录 1. Ubuntu配置远程桌面2. Mac端远程登陆Linux桌面3. 可能出现的问题1.您用来登录计算机的密码与登录密钥环里的密码不再匹配2. 找不到org->gnome->desktop->remote-access 1. Ubuntu配置远程桌面 打开设置->共享->屏幕共享。勾选允许连接控制屏幕&…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;和联合体&#xff08;union&#xff09; 是常用的复合数据类型&#xff0c;它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法&#xff0c;包括对齐规则、内存分配方…

免交互运用

免交互的概念 文本免交互 免交互的格式 变量配置 expect expect的格式 在脚本外传参 嵌套 练习 免交互ssh远程连接

物联网客户端在线服务中心(客服功能/私聊/群聊/下发指令等功能)

一、界面 私聊功能&#xff08;下发通知类&#xff0c;一对多&#xff09;群聊&#xff08;点对点&#xff09;发送指令&#xff08;配合使用客户端&#xff0c;基于cefsharp做的物联网浏览器客户端&#xff09;修改远程参数配置&#xff08;直接保存到本地&#xff09;&#…

使用C#开发VTK笔记(一)-开发环境搭建

一.使用C#开发VTK的背景 因为C#开发的友好性,一直都比较习惯于从C#开发程序。而长期以来,都希望有一个稳定可靠的三位工程数模的开发演示平台,经过多次对比之后,感觉VTK和OpenCasCade这两个开源项目是比较好的,但它们都是用C++编写的,我用C#形式开发,只能找到发布的C#组…

力扣96:不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1 卡…