vsftp

一、概述

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
很详细,我这里也就不写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值