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

        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权限,或更改主目录的所属主或所属组为登录用户,否则会报错,登录失败。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记:黑马程序员JavaWeb开发教程(2024.11.29)

10.5 案例-部门管理-新增 如何接收来自前端的数据: 接收到json数据之后,利用RequestBody注解,将前端响应回来的json格式的数据封装到实体类中 对代码中Controller层的优化 发现路径中都有/depts,可以将每个方法对应请求路径中的…

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟,基于 Java 开发的小程序电商商城开源源码,为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行,可以实现管理员;首页、个人中心、用户…

JiaJia-CP-1,2,3的WP(1)

一.JiaJia-CP-1 这是ctfshow里电子取证里面的题,以下下是我做题时的WP 审题,最后提交格式要进行md5 加密,给各位CTFer们找了一个md5加密的网站(加紧收藏哦): MD5 在线加密工具 | 菜鸟工具 1.拿到题目&am…

微信小程序下拉刷新与上拉触底的全面教程

微信小程序下拉刷新与上拉触底的全面教程 引言 在微信小程序的开发中,用户体验至关重要。下拉刷新和上拉触底是提高用户交互体验的重要功能,能够让用户轻松获取最新数据和内容。本文将详细介绍这两个功能的实现方式,结合实际案例、代码示例和图片展示,帮助开发者轻松掌握…

Vision Transformer(vit)的主干

图解: 代码: class VisionTransformer(nn.Module):def __init__(self, img_size224, patch_size16, in_c3, num_classes1000,embed_dim768, depth12, num_heads12, mlp_ratio4.0, qkv_biasTrue,qk_scaleNone, representation_sizeNone, distilledFalse,…

无人机的起降装置:探索起飞和降落的秘密 !

一、起降系统的运行方式 起飞方式 垂直起飞:小型无人机通常采用垂直起飞方式,利用螺旋桨产生的升力直接从地面升起。这种方式适用于空间有限或需要快速起飞的场景。 跑道起飞:大型无人机或需要较长起飞距离的无人机,可能会采用…

【VUE3】npm : 无法加载文件 D:\Program\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 D:\Program\nodejs\npm.ps1。未对文件 D:\Program\nodejs\npm.ps1 进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_ Execution_Policies。…

跨平台应用开发框架(4)----Qt(系统篇)

目录 1.Qt事件 1.事件来源 2.事件处理 3.按键事件 1.组合按键 4.鼠标事件 1.鼠标单击事件 2.鼠标释放事件 3.鼠标双击事件 4.鼠标移动事件 5.滚轮事件 5.定时器 1.QTimerEvent类 2.QTimer 类 3.获取系统日期及时间 6.事件分发器 7.事件过滤器 2.Qt文件 1.输入…

Mybatis集成篇(一)

Spring 框架集成Mybatis 目前主流Spring框架体系中,可以集成很多第三方框架,方便开发者利用Spring框架机制使用第三方框架的功能。就例如本篇Spring集成Mybatis 简单集成案例: Config配置: Configuration MapperScan(basePack…

【Debug】hexo-github令牌认证 Support for password authentication was removed

title: 【Debug】hexo-github令牌认证 date: 2024-07-19 14:40:54 categories: bug解决日记 description: “Support for password authentication was removed on August 13, 2021.” cover: https://pic.imgdb.cn/item/669b38ebd9c307b7e9f3e5e0.jpg 第一章 第一篇博客记录一…

算法笔记:力扣105从前序与中序遍历序列构造二叉树

首先重要的是要明白前序遍历,和中序遍历的含义; 前序遍历:根左右中序遍历:左根右 那么在前序遍历的数组中,第一位一定是根节点,而中序遍历数组中,根节点的左边部分就是该节点的左子树&#xf…

el-selet下拉菜单自定义内容,下拉内容样式类似表格

<el-form-item label"角色:" prop"username"><el-selectv-model"value"placeholder"Select"popper-class"role_select"><el-option disabled><div class"flex"><div style"width…

数据追踪技术有哪些?如何实现的?

在数字化时代&#xff0c;数据成为了业务决策和市场营销的关键资源。用户行为分析作为数据驱动的一部分&#xff0c;通过数据追踪技术帮助企业了解用户行为、趋势和偏好&#xff0c;从而制定更加精准的战略。本文将深入探讨数据追踪技术在用户行为分析中的神秘面纱&#xff0c;…

2024年信号处理与神经网络应用会

重要信息 会议时间&#xff1a;2024年12月13-15日 会议地点&#xff1a;中国武汉 会议官网&#xff1a;www.spnna.org 会议简介 2024年信号处理与神经网络应用&#xff08;SPNNA 2024&#xff09;将于2024年12月13日至15日在中国武汉召开。在为全球研究人员、工程师、学者和…

C++11-lambda表达式

目录 1.labmda的表达式 1.1.仿函数的使用 1.2lambda表达式的书写 1.3 lambda的捕获列表 1.3.1传值捕捉 1.3.2mutable可以修改拷贝对象 1.3.3 引用捕获 1.3.4混合捕捉 1.4 函数对象与lambda表达式 1.5 lambda和仿函数的比较 &#x1f33c;&#x1f33c;前言&#xff1a;从…

蓝桥杯模拟题不知名题目

题目:p是一个质数&#xff0c;但p是n的约数。将p称为是n的质因数。求2024最大质因数。 #include<iostream> #include<algorithm> using namespace std; bool fun(int x) {for(int i 2 ; i * i < x ; i){if(x % i 0)return false;}return true; } int main() …

mac访达打开终端

选择文件夹打开 选中文件夹&#xff0c;然后右键即可&#xff1a; 在当前文件夹打开 在访达的当前文件夹长按option键 左下角出现当前文件夹路径 右键即可打开终端

永久免费的PDF万能水印删除工具

永久免费的PDF万能水印删除工具 1.简介 PDF万能水印删除工具&#xff0c;可以去除99.9%的PDF水印。例如&#xff1a;XObject水印&#xff08;含图片水印&#xff09;、文本水印、绘图水印/曲线水印、注释水印、工件水印、剪切路径水印等等。本软件是永久免费&#xff0c;无有…

小程序 - 本地生活

小程序页面和样式练习 - 本地生活小程序开发笔记 目录 本地生活 准备工作 加载图片素材 页面开发 页面样式开发 功能实现截图 总结 本地生活 本地生活”微信小程序是一个介绍本地美食、装修、工作等信息的微信小程序&#xff0c;该微信小程序的首页包含轮播图区域和九宫…

基于SpringBoot实现的编程训练系统(代码+论文)

&#x1f389;博主介绍&#xff1a;Java领域优质创作者&#xff0c;阿里云博客专家&#xff0c;计算机毕设实战导师。专注Java项目实战、毕设定制/协助 &#x1f4e2;主要服务内容&#xff1a;选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 &#x1f496;精彩专栏…