7.VSFTP

网络服务-VSFTP

区别sambaftp
登陆方式samba借用了linux的用户,但密码是独立创建的ftp借用了linux的账号及密码
修改方式samba支持在客户端直接修改ftp不支持在客户端直接修改,需要先下载到客户端,修改完后,再上传覆盖掉服务器端的版本

1. VSFTP概述

​ FTP 是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式!

​ VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP,从名称定义上基本可以看出,这是为了解决ftp传输安全性问题的。

1.1 安全特性

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

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

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

\4. 拥有chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录

2. VSFTP连接类型

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

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

​ 数据连接(按需连接) TCP 随机(数据信道) 用于上传下载数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXZl8HFs-1658156751411)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506162550279.png)]

3. VSFTP工作模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IvEnzkCE-1658156751412)(file:///C:\Users\86152\AppData\Local\Temp\ksohtml4376\wps1.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n40Fr10m-1658156751413)(file:///C:\Users\86152\AppData\Local\Temp\ksohtml4376\wps2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMh6y30d-1658156751413)(file:///C:\Users\86152\AppData\Local\Temp\ksohtml4376\wps3.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ePv9knv8-1658156751414)(file:///C:\Users\86152\AppData\Local\Temp\ksohtml4376\wps4.png)]

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

FTP的两种模式主动模式所使用的端口是20和21端口,而被动模式中,默认开放的是大于1023的端口和21端口,相比而言被动模式更加安全,但是如果只是简单的文件共享,不考虑安全性则可以直接选用主动模式。其次被动模式还有一个非常麻烦的地方,由于需要开放大量的端口,在使用防火墙进行端口过滤及保护时就异常麻烦,一般使用被动模式时都会选定一个端口范围作为被动模式所需端口。

​ 注意:VSFTP默认两种模式都支持,最终决定使用哪种模式很多时候取决于所使用的的FTP客户端工具,当然也可以在服务器端的配置文件禁止掉某一种模式,强行使用另外一种。

4. VSFTP传输模式

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

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

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

切换方式:在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。

5. VSFTP软件信息

**服务端软件名:**vsftpd

**客户端软件名:**ftp

**服务名:**vsftpd

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

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

6. 登录验证方式

  • 匿名用户验证:

​ 用户账号名称:ftp或anonymous

​ 用户账号密码:无密码

​ 工作目录:/var/ftp

默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)

  • 本地用户验证:

​ 用户账号名称:本地用户(/etc/passwd)

​ 用户账号密码:用户密码(/etc/shadow)

​ 工作目录:登录用户的宿主目录

权限:最大权限(drwx------)

  • 虚拟(virtual)用户验证:

\1. 创建虚拟用户用来代替本地用户,减少本地用户曝光率

\2. 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制

\3. 能够设置严格的权限(为每一个用户生成单独的配置文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMNzzTy6-1658156751414)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506162646145.png)]

7. VSFTP实验部署

注:先关闭服务器和客户机上的防火墙和SELinux

\1. 关闭防火墙 systemctl stop firewalld

\2. 临时清空防火墙规则 iptables  -F

\3. 查看SELinux状态 getenforce

\4. 临时关闭SELinux setenforce 0

\5. 永久关闭SELinux "sed -i ‘7s/enable/disabled/’ /etc/


7.1. 匿名用户验证实验:

匿名权限控制:

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为不限速,单位:bytes/秒)

用户:ftp或anonymous

家目录:/var/ftp

权限:软件:配置文件没有写权限,匿名默认不允许写数据

​ 文件系统:没权限,目录属于root用户,其他人没有w权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L9szAJWj-1658156751415)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506160815555.png)]

实验需求与流程:

注意:在客户端登录后,默认情况下是可以下载的,但不能上传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rfAiyJjh-1658156751416)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506160843614.png)]

\1. 实现可以上传

​ a. anon_upload_enable=YES #上传权限 put + 文件名

​ b. 在/var/ftp/下创建上传目录./abc/

​ c. 修改上传目录的权限或所有者,让匿名用户有写入权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqgMNb35-1658156751416)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506161249538.png)]

\2. 实现创建目录和文件其他操作

​ a.anon_mkdir_write_enable=YES #允许创建目录 mkdir + 目录名

​ b.anon_other_write_enable=YES #删除文件、文件改名、文件覆盖 delete 、put

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hSFFKbAP-1658156751417)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506161135753.png)]

\3. 用户进入某个文件夹时,弹出相应的说明用于提示用户

​ a. 在对应目录下创建 .message 文件,并写入相应内容

​ b. 确认dirmessage_enable=YES是否启用

​ c. 尝试更换目录查看效果(同一次登录仅提示一次)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rHCwj3bJ-1658156751418)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506161544260.png)]

\4. 实现上传的文件可下载

​ 默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有r权限

​ 设置anon_umask=022,可以让上传的文件其他人位置拥有r权限,然后才能被其他人下载


7.2. 本地用户验证实验:

本地用户权限控制:

  • local_enable=YES #是否启用本地系统用户

  • local_umask=022 #本地用户所上传文件的权限掩码

  • local_root=/var/ftp #设置本地用户的FTP根目录

  • chroot_local_user=YES #是否将用户禁锢在主目录

  • local_max_rate=0 #限制最大传输速率

  • ftpd_banner=Welcome to blah FTP service #用户登录时显示的欢迎信息

  • userlist_enable=YES & userlist_deny=YES #禁止/etc/vsftpd/user_list文件中出现的用户名登录FTP

  • userlist_enable=YES & userlist_deny=NO #仅允许/etc/vsftpd/user_list文件中出现的用户名登录FTP

    配置文件:ftpusers #黑名单,优先级较高

    #禁止/etc/vsftpd/ftpusers文件中出现的用户名登录FTP,权限比user_list更高,即时生效

实验需求与流程:

\1. 服务端需要创建用户并设置密码(所创建的用户,不需要登录操作系统,仅用来登录vsftp

useradd -s /sbin/nologin laowang

centos7版本需要在 /etc/shells 文件中添加 /sbin/nologin

将用户设置为不可登录的shell类型防止一下情况发生:使用用户身份直接登录服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ryk9Ydm-1658156751418)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506162123771.png)]

\2. 将所有用户禁锢在自己的家目录下

注:默认没有禁锢用户时,客户端登录后可以随意切换目录,查看文件所在位置和文件名

chroot_local_user=YES

#开启用户家目录限制,限制所有用户不能随便切换目录

\3. 将部分用户禁锢在自己的家目录下

chroot_list_enable=YES

#开启白名单功能,允许白名单中的用户随意切换目录

chroot_list_file=/etc/vsftpd/chroot_list

#白名单文件所在位置(需自己创建)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2GWV7t8-1658156751419)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506162317936.png)]

\4. 配置文件:/etc/vsftpd/ftpusers

所有写入此文件内的用户名都不允许登录ftp,立刻生效。

\5. 修改被动模式数据传输使用端口

将以下代码写入配置文件/etc/vsftp/vsftp.conf

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNYSssZI-1658156751419)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506170229564.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zId2lyq6-1658156751420)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506183110902.png)]


7.3. 虚拟用户验证实验

实验一、ftp的虚拟用户模式

身份认证使用的是人为创建的独立的用户和密码,保存在专门的数据库文件中 #无需创建大量Linux用户。

为虚拟用户绑定一个Linux用户,让虚拟用户借助Linux用户的身份进行文件的存储,被借用的Linux用户称之为映射用户。

为每一个虚拟用户设置权限是不能使用文件系统来实现的,转为使用配置文件的选项来实现,为每一个虚拟用户创建独立的配置文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzTq4kdE-1658156751420)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506162837324.png)]


  • \1. 建立FTP的虚拟用户的用户数据库文件(在/etc/vsftpd)

mkdir vsf_user touch ./vsf_user/vsftpd.user

#该文件名可以随便定义,文件内容格式:奇数行用户,偶数行密码

db_load -T -t hash -f vsftpd.user vsftpd.db

#将用户密码的存放文本转化为数据库类型,并使用hash加密

chmod 600 vsftpd.db

#修改文件权限为600,保证其安全性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yZMN2ywd-1658156751421)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506164557256.png)]

  • \2. 创建FTP虚拟用户的映射用户,并指定其用户家目录

useradd -d /var/ftproot -s /sbin/nologin laowang

#创建laowang用户作为ftp的虚拟用户的映射用户

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

cp –a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam

#使用模板生成自己的认证配置文件,方便一会调用

#编辑新生成的文件vsftpd.pam(清空原来内容,添加下列两行)

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OzOyz2wC-1658156751421)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506185412885.png)]

在vsftpd.conf文件中添加支持配置

修改:pam_service_name=vsftpd
添加:
     guest_enable=YES
     guest_username=virtual
     user_config_dir=/etc/vsftpd/dir

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXuLVjfm-1658156751422)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506185950779.png)]

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

注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉。

用户可以上传:

anon_upload_enable=YES #允许上传文件

用户可以创建目录或文件:

anon_mkdir_write_enable=YES #允许创建目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30BGLF7i-1658156751422)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506191219870.png)]

用户可以修改文件名:

anon_upload_enable=YES #允许上传文件(为了覆盖开启的)

anon_other_write_enable=YES #允许重名和删除文件、覆盖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xm0HN7CW-1658156751423)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506192122839.png)]

anon_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_root=/var/ftproot/user1

allow_writeable_chroot=YES

local_root=/var/vftp/a1

注:给映射用户的家目录 设置 o+r 让虚拟用户有读权限。


7.4.openssl+vsftpd 加密验证方式:

实验二、ftp的加密登录认证和传输

image-20220506183304893

注:sshd服务的配置文件中,注释掉的是默认生效的
由客户端生成密钥对文件,并将公钥文件上传到服务器的指定目录下,修改指定名称:ssh-keygen –t rsa –b 1024 & ssh-copy-id user@ip
需要在服务器端开启密钥对登录认证模式(默认是开启的)

拓展:使用tcpdump 工具进行指定端口抓包,抓取ftp登录过程中的数据包

tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 来源ip

​ -i #interface:指定tcpdump需要监听的接口

​ -n #对地址以数字方式显式,否则显式为主机名

​ -nn #除了-n的作用外,还把端口显示为数值,否则显示端口服务名

​ -X #输出包的头部数据,会以16进制和ASCII两种方式同时输出

​ -vv #产生更详细的输出


  • \1. 查看是否安装了openssl

rpm -q openssl

  • \2. 查看vsftpd 是否支持openssl

ldd /usr/sbin/vsftpd | grep libssl

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BhdQTB7P-1658156751423)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506233331847.png)]

  • \3. 生成加密信息的秘钥和证书文件

位置:/etc/ssl/certs/

a. openssl genrsa -out vsftpd.key 1024 #建立服务器私钥,生成RSA密钥

b. openssl req -new -key vsftpd.key -out vsftpd.csr

#需要依次输入国家,地区,城市,组织,组织单位,Email等信息。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书

c. openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt

#使用CA服务器签发证书,设置证书的有效期等信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-goAXm6jW-1658156751424)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220506233430939.png)]

注意1:生成完秘钥和证书文件后,将本目录{/etc/ssl/certs/}的权限修改为500.

注意2:在实验环境中可以用命令生成测试,在生产环境中必须要在https证书厂商注册(否则浏览器不识别)

  • \4. 修改主配置文件/etc/vsftpd/vsftpd.conf
ssl_enable=YES																	 #启用ssl认证
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES																		 #开启tlsv1、sslv2、sslv3都支持
allow_anon_ssl=YES															 #允许匿名用户{虚拟用户}
force_anon_logins_ssl=YES
force_anon_data_ssl=YES													 #匿名登录和传输时强制使用ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES													 #本地登录和传输时强制使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt							#rsa格式的证书
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key				 #rsa格式的密钥

注:密钥文件要在配置文件中单独声明(写入配置文件时,注释要单独一行,否则会报错)

  • \5. 重启服务

service vsftpd restart

  • \6. 测试(使用第三方客户端连接)

​ FileZilla-FTP(第三方客户端工具)

连接测试时选择:

​ 服务器类型:显式 TLS/SSL

ssl=YES #匿名登录和传输时强制使用ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES #本地登录和传输时强制使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt #rsa格式的证书
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key #rsa格式的密钥


<font color='red'>**注:密钥文件要在配置文件中单独声明(写入配置文件时,注释要单独一行,否则会报错)**</font>

- \5. **重启服务**

​	`service vsftpd restart`

- \6. **测试(使用第三方客户端连接)**

​	FileZilla-FTP(第三方客户端工具)

连接测试时选择:

​		服务器类型:显式 TLS/SSL 

​		登录类型:	一般或匿名
  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值