vsftp

article/2025/8/25 16:13:01

一、概述

FTP是file Transfer Protocoll文件传输下ieyi,用于Internet上的文件的双向传输。因ftp是明文传输,没有受到保护,所以具有一定危险性。

VSFTP是一个基于GPL发布的类unix系统上使用的FTP服务器软件。为了解决ftp传输安全性问题的,依然明文,未加密。

二、安全特性

1.vsftp程序的运行着一般是普通用户,降低了相对应进程的权限,提高了安全性。

2.任何需要执行较高权限的执行全都需要上层程序的许可。

3.ftp所需要使用的绝大多数命令都被整合到vsftp中,基本不需要系统额外提供命令。

4.拥有chroot功能,可以改变用户的根目录,限制用户职能再自己的家目录。

三、vsftp连接类型

控制连接(持续连接)—>TCP 21(命令信道)—>用户收发FTP命令

数据连接(按需连接)—>TCP 20(数据信道)—>用于上传下载数据

四、VSFTP工作模式

两种模式(主动模式port模式;被动模式Passive模式)

主动模式(port,默认)

ftp客户端 ftp服务器 1.登录ftp服务器传入用户名密码(21端口) 2.登录成功 3.随机放开端口 4.port命令读取,通过随机端口号,发送到ftp服务器21端口 5.通过20端口发数据到客户端开通的随机端口 ftp客户端 ftp服务器

FTP客户端和服务器的TCP21端口进行连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送port命令。port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。

被动模式(passive)

ftp客户端 ftp服务器 1.登录ftp服务器传入用户名密码(21端口) 2.登录成功 3.pasv命令 4.开放随机端口号 5.服务器向客户端开放随机端口号,客户端接收 6.连接随机端口号获取数据 ftp客户端 ftp服务器

FTP客户端首先和服务器的TCP21端口建立连接,用来建立控制通道发送命令,但建立连接后客户端发送pasv命令。服务器收到pasv命令后,打开一个临时端口(端口大于1023小羽65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器的临时端口,然后ftp服务器将通过这个端口传输数据。

注:由于vsftp的被动模式是随机端口进行数据传输,所以设置防火墙时需要刻意放行。

五、VSFTP传输模式

Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件,图片等。

ASCII模式:进行文本传输时,自动适应操作系统的结束符,如回车等。

Linux红帽发行版本中VSFTP默认采用的时binary模式,这样能保证绝大多数文件传输后能正常使用。

切换方式:在ftp>提示符下输入ascii即转换到ascii方式,输入binary即转换到binary模式

六、vsftp软件信息

服务端软件名
vsftpd

客户端软件名
ftp

服务名
vsftpd

端口号
20、21、或指定范围内随机端口

配置文件
/etc/vsftpd/vsftpd.conf

登录验证方式

匿名用户验证
用户账号名:ftp或anonymous
用户密码:无密码
工作目录:/var/ftp(类似家目录,别把文件放在这里)
默认权限:可下载可上传,上传权限由两部分组成(配置文件和文件系统)

本地用户验证
用户账号名:把本地用户(/etc/passwd)
用户密码:用户密码(/etc/shadow)
工作目录:登录用户的宿主目录(用户家目录)
权限:最大权限(drwx------)

虚拟(virtual)用户验证
1.创建虚拟用户来代替本地用户,减少本地用户曝光率
2.使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
3.能够设置严格的权限(为每一个用户生成单独配置文件)
人为创建,生成数据库文件,找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认登陆点,则默认登录位置:/home/*
每个虚拟账户的权限都可以被单独定制

七、VSFTP实验

匿名用户实现

匿名权限控制:(/etc/vsftpd/vsftpd.conf)

anonymous_enable=yes,启用匿名访问
anon_umask=022,匿名用户所上传文件的权限掩码
anon_root=/var/ftp,匿名用户的FTP根目录
anon_upload_enable=yes,允许上传文件
anon_mkdir_write_enable=yes,允许创建目录
anon_other_write_enable=yes,允许其他人写入权限
anon_max_rate=0,限制最大传输速率,0为不限速,单位byte/s
注:anon就是anonymous,代表匿名用户。

实现需求和流程

1.实现可以上传
anon_upload_enable=yes
在/var/ftp/创建上传目录
修改上传目录的权限或所有者,让匿名用户有写入权限(不推荐设置/var/ftp目录权限,pub也不行)

2.实现创建目录和文件其他操作
anon_mkdir_write_enable=yes
anon_other_write_enable=yes

3.用户进入某文件时,弹出相应说明
在对应目录下创建.message文件,并写入提示内容。
确认dirmessage_enable是否启用
尝试切换目录查看效果,同一次登录仅提示一次。

实现上传的文件可下载
默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有r权限
设置anon_umask=022,可以让上传的文件other位拥有r权限,然后才能被其他人下载。

服务机安装vsftpd,客户端安装ftp
客户端通过ftp 服务器IP,即可通过vsftp访问。
常用命令:
?,获取帮助
get,下载文件,例如:get install.log
put,上传文件,例如:put install.log
delete,删除目录,例:delete laoli
mkdir,创建目录,例:mkdir laoli
rename,改名。例如:rename install.log ist

本地用户验证实现

本地用户权限控制:
local_enable=yes,是否启用本地用户
local_umask=022,本地用户所上传的文件的权限掩码
local_root=/var/ftp,设置本地用户的ftp根目录,默认本地用户家目录
chroot_local_user=yes,是否将用户禁锢在家目录
local_max_rate=0,限制最大传输速率
ftpd_baner=welcaome to blah FTP server,用户登陆时显示的欢迎信息
userlist_enable=yes&userlist_deny=yes,禁止/etc/vsftpd/user_list文件中出现的用户名用户登录FTP
userlist_enable=yes&userlist_deny=no,仅允许/etc/vsftpd/user_list文件中出现的用户名用户登录FTP

配置文件
/etc/vsftpd/ftpusers
禁止/etc/vsftpd/ftpusers文件中出现的用户名用户登录FTP,权限比user_list更好,即刻生效。

实现需求和流程

1.客户端需要创建用户并设置密码(用户不登陆操作系统,仅用来登录vsftp)
useradd -s /sbin/nologin username

2.将所有用户禁锢在自己家目录下
chroot local_user=yes,默认不禁锢

3.将部门用户禁锢在自己家目录下
chroot_list_enable=yes
开启白名单功能,允许白名单中的用户随意切换目录
chroot_list_file=/etc/vsftpd/chroot_list
白名单文件所在位置(需要自己配置)

4.配置文件
/et/cvsftpd/ftpusers
所有写入此文件的用户都不允许登录ftp,立即生效

5.修改被动模式数据传输使用端口
pasv_enable=yes
pasv_main_port=30000
pasv_max_port=35000

虚拟用户验证实验

1.建立FTP虚拟用户的用户数据库文件,在/etc/vsftpd/

vim vsftpd.user
注:文件名可以随便定义,文件格式是奇数行用户,偶数行密码
laoli
123456
在这里插入图片描述
写完后用命令进行文件类型转换
db_load -T -t hash -f vsftpd.user vsftpd.db
将vsftpd.user转换成vsftpd.db
-T,将文件转换成数据库文件
-t,加密类型,hash加密
-f,要转换的源文件,所以是-f vsftpd,user
在这里插入图片描述
再修改文件权限位600,保证其安全性
chmod 600 vsftpd.db
在这里插入图片描述

2.创建ftp用户的映射用户,并指定其家目录。

useradd -d /var/ftproot -s /sbin/nologin virtual
创建virtual用户作为ftp的虚拟用户的映射用户
在这里插入图片描述

3.建立支持虚拟用户的PAM认证文件,添加虚拟用户支持。

cp -a /etc/pan.d/vsftpd /etc/pam.d/vsftpd.pam
在这里插入图片描述
使用模板生成自己的认证配置文件,方便调用

4.编辑新生成的文件vsftpd.pam,清空原来的内容,添加以下内容

auth required pam_userdb.so db:/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd

5. 在vsftpd.conf添加支持配置

修改
pam_service_name=vsftpd.pam
添加
guest_enable=yes #开启虚拟用户
guest_username=virtual #映射用户是谁
user_config_dir=/etc/vsftpd/dir #配置文件目录,自己创建

6.为虚拟用户创建独立的配置文件,启动服务并测试

注:做虚拟用户配置文件时,将主配置文件中定义的匿名用户相关设置注释掉,因为虚拟用户和匿名用户使用同一种参数anon_xxx。如果主配置文件有自定义的配置,那么子配置文件不生效,仅是自定义的,原本默认的不改。
在这里插入图片描述
配置文件:

用户可以上传:anon_upload_enable=yes
用户可以创建文件或目录:anon_mkdir_write_enable=yes
用户可以修改文件名,删除等写入权限
anon_upload_enable=yes
anon_other_write_enable=yes

注:给映射用户的家目录,设置r权限,让虚拟用户有读写权限。
dir下的配置文件的名字和虚拟用户文件中的用户名相同即可,每个用户就有每个配置文件
取消匿名用户的相关设置(虚拟用户与匿名用户使用相同的参数,所以如果要设定虚拟用户,取消主配置文件中关于匿名用户的配置,子虚拟用户配置文件才有作用)

测试是否成功

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

openssl+vsftpd加密验证方式

使用tcpdump工具指定端口抓包,抓取ftp登录过程中的数据包
tcpdump -i ens33 -nn -x -vv port 21 and ip host

-i,interface:指定tcpdump需要监听的接口
-n,对地址以数字方式显示,否则显示主机名
-nn,除了-n作用外,还会把端口显示为数值,否则显示端口服务名
-x,输出包的头部数据,会以16进制和ASCII两种方式同时输出
-vv,产生更详细的输出,可以-v -vvv

例如:
tcpdump -i ens33 -nn -x -vv port 21 and ip host 192.168.1.130
指定监听本机ens33网卡的21端口,抓取来自192.168.1.130的包
注:此抓包就可以看到账户密码,表示vsftp确实以明文传输,可以和22端口抓的包作比较
在这里插入图片描述
在这里插入图片描述

所以需要使用openssl进行加密

具体操作:
https://blog.csdn.net/mango_kid/article/details/108147323
很详细,我这里也就不写了。


http://chatgpt.dhexx.cn/article/IXOBAh1E.shtml

相关文章

vsftpd的使用

简介 vsftpd是 “very secure FTP deamon”的缩写,是一个完全免费,开源的ftp服务器软件。 特点 小巧轻快,安全易用,支持虚拟用户、支持带宽限制等功能。 安装 执行 yum -y install vsftpd 注:在安装前需提前确认是…

vsftpd使用指北

vsftpd使用指北 文章目录 vsftpd使用指北1.安装vsftpd2.登录3.切换本地路径下载命令:get用于下载单个文件:mget用于批量下载:上传命令: FilezillaReference vsftpd 是“very secure FTP daemon”的缩写,是一个完全免费…

linux安装vsftpd

linux安装vsftpd 安装vsftpd作为附件上传和下载服务 文章目录 linux安装vsftpd一、vsftpd是什么?二、使用步骤1.安装2.配置3.可能出现的问题第一种情况:selinux的ftp设置第二种情况:可能是防火墙的原因第三种情况:pam.d设置问题 …

1、vsftpd的简介

1、vsftpd的简介 vsftpd是“very secure TTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件 2、特点 vsftpd是一款在Linux发行版中最受推崇的ftp服务器程序,小巧轻快,安全易用,支持虚拟用户,支持带宽…

vsftpd基本使用

ftp: 文件传输协议 两类连接: 命令连接:传输命令 数据连接:传输数据 两种模式: 主动模式:PORT 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口 被动模式:PASV 打开一个随机端口,并…

vsftpd部署流程和常见问题详解

vsftpd部署流程和常见问题详解 ⭐️ 网上关于在云服务器里配置vsftpd的文章鱼龙混杂,没有一篇是可以彻底解决问题的,有些问题虽简单,但也让初学者感到困惑。本文详细说明vsftpd的部署流程和一些常见问题的解决方法,详述用户创建过…

Linux vsFTPd服务详解——vsFTPd基础知识

今天继续给大家介绍Linux运维相关内容,本文主要内容是Linux的vsFTPd服务。 一、vsFTPd服务简介与安装 FTP服务,即File Transfer Protocol、文件传输服务,用于在互联网上提供文件存储和访问服务。有关FTP的原理请参见以下文章:FT…

vsftpd的安装和使用

目录 1、vsftpd的简介... 2 2、特点... 2 3、安装... 2 4、创建虚拟用户... 2 5、vsftpd服务器的配置... 4 6、vsftpd配置文件说明... 7 7、防火墙的配置... 8 8、vsftpd的验证... 9 9、vsftpd的常用命令... 10 10、反复需要验证ftp身份问题解决... 10 1、vsftpd的简…

Number、parseInt和parseFloat的区别

1、Number() 可以把任何类型的数据转换为数值或NaN(not a number),parseInt()和parseFloat()只能把字符串或数值转换为数值; 2、Number()和parseFloat()会有效解析浮点数(如"324.11abc"转为324.11),而parse…

parseFloat()函数的使用

定义: parseFloat() 函数可解析一个字符串,并返回一个浮点数。该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。 语…

Float.parseFloat()的作用

parseFloat()方法用于返回与给定String表示形式相对应的float值 类型转换: string转float

java float.parsefloat_java.lang.Float.parseFloat()方法实例

全屏 java.lang.Float.parseFloat()方法返回一个为指定String表示新的浮点初始化值,由Float类的valueOf方法执行的值。 声明 以下是java.lang.Float.parseFloat()方法的声明public static float parseFloat(String s) throws NumberFormatException 参数s -- 这是要…

从ES规范和引擎细谈 js 中 parseInt 和 parseFloat 的执行机制

从ES规范和引擎细谈 js 中 parseInt 和 parseFloat 的执行机制 parseInt()和parseFloat()这两个常用 API 其实还是有很多“坑”的,以此文统一梳理一下。(本文比较适合常与数字打交道的 jser 或对这两 API 运作感兴趣的同学) (git…

python实现简单的聊天小程序

概要 这是一个使用python实现一个简单的聊天室的功能,里面包含群聊,私聊两种聊天方式.实现的方式是使用套接字编程的一个使用TCP协议 c/s结构的聊天室 实现思路 x01 服务端的建立 首先,在服务端,使用socket进行消息的接受,每接受一个socket的请求,就开启一个新的线程来管理…

微信小程序调出选择好友聊天窗口

微信小程序分享好友 点击分享,弹出层选择“分享给微信好友”,点击‘“分享给微信好友”,直接调出选择好友聊天窗口。 如图: 微信小程序API:onShareAppMessage 定义 onShareAppMessage 函数,设置该页面的…

小程序mqtt实现聊天功能

mqtt是什么? MQTT是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息协议,在物联网…

微信小程序接入腾讯IM即时通讯,实现在线聊天

最近在帮朋友写一个二手交易平台,买卖双方在线沟通的功能(类似于某鱼) 先上传做完的效果图,后续再更新源码,目前实现了消息列表显示未读数量,显示最后一条信息内容,收到信息后刷新列表。聊天页面 不要吐槽…

应用实战|微信小程序开发示例--多人聊天互动空间

“超能力”数据库~拿来即用,应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库(表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维),很大地降低开发者的使用门槛。 本示例是…

微信小程序实现websocket及单人聊天功能

一、什么是websocket: WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议 二、websoc…

uni-app+websocket实现语音聊天小程序

uni-appwebsocket 开发语音聊天咨询小程序