网络服务——VSFTP

VSFTP概述

    FTP是FILE Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议。”用于internet 上的控制文件的双向传输,使用FTP来传输时,其实是具有一定程度的【危险性】,因为数据在因特网上面是完全没有受到保护的【明文】传输方式!

 VSFTP是一个基于GPL发布的类UNIX系统上使用的FTP服务软件,它的全称

是Very Secure  FTP 从名称定义上基本可以看出,这是为解决FTP传输安全问题。

      特点:

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

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

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

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

VSFTP连接类型

 

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

数据连接(按需连接)——  TCP20 (数据信道) —— 用于上传和下载数据。

VSFTP工作模式(工作时默认被动模式)

    主动模式                                被动模式

wKiom1k6OGPROjVDAAQGRHR8uyI484.png-wh_50

Port模式

FTP客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接受数据的时候在这个通道上发送PORT命令。PORT包含客户端用什么端口接收数据。在传送数据的时候,服务器通过自己的TCP 20 端口连接至客户端的指定端口发送数据,FTP server必须和客户端建立一个新的连接用来传输数据。

Passive模式

建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传输数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传输数据。

注意:很多防火墙在设置时候都是不允许接受外部发起的连接的,所以许多位于防护墙后或内网通的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能使用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

防火墙规则 (匹配即停止)

  白名单: 逐个允许,拒绝所有,默认防火墙策略。

              ip 源地址和目标地址

防火墙 判断机制:

               协议

               端口      源端口   目标端口

               网卡名成  源端口                  

               MAC地址   源端口   目标端口

      必须所有条件都符合才匹配成功。

   黑名单: 逐个拒绝,默认防火墙策略。允许所有

iptables -A INPUT -s 192.168.100.10 -p tcp -dport 80 -j DROP

  VSFTP传输模式

ASCLL传输方式

     假定用户正在拷贝的文件包含的简单ASCLL码文本,如果再远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于解释成另外那台计算机存储文本文件的格式。

     但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,他们可能是程序,数据库,字处理文件或者压缩文件 。再拷贝任何非文本文件之前 ,用binary命令告诉tfp逐字拷贝。

二进制传输模式(Binary模式)

   在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的机器上包含为序列的文件是没意义的,例如,QQ.exe以二进制方式传送可执行文件到Linux系统,在对方系统上,此文件不能执行。

VSFTP安装配置(搭建环境中一定要关闭SELINUX vsftp 要求特别严格)

ftp软件:

      服务端:

proftpd   支持更多的外部模块,配置灵活

pureftpd   配置简单相对安全

vsftpd     高性能,高安全性

客户端:

    ftp,lftp

服务名:

   vsftp

端口号:

    20 21 随机端口

配置文件:

 /etc/vsftpd/vsftpd.conf

实验搭建vsftp

1.把两台机器设置成NAT模式也可以桥接模式,网段自定义然后配置网卡 (在实验中第一台机器为 a机器 第二台b机器)

2.搭建yum源挂载光盘 a安装 vsftpd b安装ftp

3.cd /etc/vsftpd (修改主文件之前养成习惯记得备份 cp -a vsftpd.conf

vsftpd.conf.bak) 然后打开源文件

匿名账户验证:

 a.  用户账号名称:ftp或annymous

 b.  用户账号密码:空或任意字符

 c.  服务器目录:/var/ftp

 d.  权限:可下载不可上传,上环权限由两部分组成(住配置文件和文件9

   匿名用户的FTP根目录

   anon_upload_enable=YES       允许上传文件

   anon_mkdir_write_enable=YES  允许创建目录

   anon_other_write_enable=YES  开放其他写入权

4.先重启服务a一下看看能不能上传和下载然后拿b机登陆    

wKiom1k6OI-D-ocLAAAX-ZH_uwg365.png-wh_50

注意打名字时候不能空格直接回车

默认登陆 /var/ftp下pub

wKioL1k6OKrRGSVEAABZpC561ZM406.png-wh_50

#不能上传,没有w权限,只能下载 在a主机打开上传然后重启服务。

wKioL1k6OL-gRN4IAAAjgwY_34g745.png-wh_50

#如果不知道可以?和help

put get 是上传下载

mkdir  在 /var/ftp创建一个lingyu的目录

然后给凌宇设置权限  chown ftp lingyu

只能上传当前,目录下的,下载也一样。

wKiom1k6ONbQxl8DAAAE5A53v5o470.png-wh_50

允许匿名用户上传的文件被匿名下载

允许匿名 anon_mkdir_write_enable=YES  允许创建目录

wKioL1k6OPGTb6K8AAAbpqGOrtE490.png-wh_50

wKioL1k6OQnj0L0uAAAYr1dD5WU588.png-wh_50

可以覆盖然后重启ftp  man5 查看配置文件信息

本地用户验证:

   a.用户账号名称: 本地用户(etc/shaow)

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

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

   e.本地用户权限控制:

     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  用户登陆时显示的欢迎信息

     banner_file=/目录     弹出一个说明,可以做哪些操作

     userlist_enable=YES && userlist deny=YES

     禁止/etc/vsftpd/usr_list 文件中出现的用户名登陆FTP。

     userlist_enable=YES && userlist deny=NO

     仅允许/etc/vsftpd/user_list 文件中出现的用户名登陆FTP

     ftpusers 所有写入到ftpusers都不能登陆 这个权限的优先级更高

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

     f.特点:配置相对复杂,可以设置严格的权限,有安全隐患

本地用户:

   1.先切换到/etc/目录下 然后修改vsftpd.conf文件

wKioL1k6OSfT-CIeAAANai9YXLc138.png-wh_50

2.重启 service vsftpd  restart 先测试下 windows默认就匿名登陆不会有提示。

    先创建一个名字叫lingyu的用户 useradd lingyu

           给 lingyu 用户设置密码 passwd lingyu

                  把用户限制在自己的家里。

wKioL1k6OUDxwn7vAAAgQ6fzFLk210.png-wh_50

保存退出重启一下服务再来验证一下

wKioL1k6OVagyYahAAAOjsJ6Ig8143.png-wh_50

wKiom1k6OXWhabYSAAAJ8vq4I2M449.png-wh_50

把放行的用户写在配置文件里。

那个名单目录没有所以在/etc/下手动创建一个。

 vim chroot_list  里面写允许的用户:anguo 然后创建anguo这个用户 然后重启服务

wKiom1k6OYzyy6I-AABIpC08mh4991.png-wh_50

然后再登陆lingyu

wKioL1k6OaWT7CL7AAAQhcw4rME296.png-wh_50

chroot_local_user=YES 所有用户都禁锢在家目录里面

   chroot_local_enable=YES 如果三句话同时开启并且指定的列表里面有一个用这时候列表里面的用户可以随意切换除此之外都不能。

   chroot_list_file=/etc/vsftpd/chroot_list 列表是白名单

    本地用户默认登陆的位置 先创建一个目录

wKioL1k6Ob-yN2oAAAAD0ZoRZTA547.png-wh_50

然后修改配置文件。

wKiom1k6Oe-CdNh_AAA2SNo6JvI960.png-wh_50

然后重启一下

限速 local_max_rate=512000  先给上传权限 chmod 777 /local


wKioL1k6OhD***WSAAAM-VNrBKo211.png-wh_50

wKioL1k6OiGzF7nvAAAF7Ak3bUc234.png-wh_50

打开欢迎信息

wKiom1k6Oj2hdjdxAAAp5CNQ8L4396.png-wh_50

提示登陆信息


wKioL1k6OnzC14wrAAAN_ZS2zJo926.png-wh_50

然后再/下创下目录  vim /ftpbanner.txt 然后重启服务


wKiom1k6OtKSLi7dAAAOdXn5ed4092.png-wh_50

禁止用户登录和允许用户登录的


wKioL1k6OvmjY6bEAAAHdyVFxaI370.png-wh_50

在vsftpd 下有这些文件。

wKioL1k6OxyhEWB8AAAZMXWUdIM244.png-wh_50

这些允许的用户 如果deny不开启允许,如果开启在这文件里不允许登陆。

      需要设置的权限足够严格才行。

匿名用户验证: (不是原来的匿名而是虚拟用户。是认为手动的创建虚拟虚假的用户,从数据库对应)

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

  2.减少了系统中本地用户的数量,提高安全性

 

匿名用户实验:

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

1.在客户端登陆后,默认情况下是可以下载的,但不能上传。

虚拟用户的搭建流程:

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

     在vsftpd目录下 创建一个vim vsftp                    

wKioL1k6OzSCOLLxAAAD9HzQgi4326.png-wh_50

然后拿db load 命令进行数据库转换。

wKioL1k6O0nAYWb4AAAG0uXj9x4764.png-wh_50

改成只有管理员才能读写

chmod 600 vsftp chmod 600 vsftp.db

然后做一个映射才会验证登陆 指定虚拟用户登陆的目录 并且不能登陆操作系统 需要把权限改成755 默认就是755

wKiom1k6O16i5NAMAAAICzyHzys568.png-wh_50

允许其他用户进入

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

wKiom1k6O3Wx8Xy1AAAxq9qsCUY550.png-wh_50

然后查看文件数据库文件的指定位置

wKiom1k6O4mggpxpAAAK-uL6VO4596.png-wh_50

4.在vsftpd.conf文件中添加支持配置 重启服务

wKioL1k6O6GCwf2SAAAUMC4oOpQ061.png-wh_50

那个目录还没有创建 ,你指什么创建什么

wKiom1k6O8LSBkh1AAALRx0oB-w111.png-wh_50

a1

wKioL1k6O-SyFt7iAAADiHDLa8A611.png-wh_50

b1

wKioL1k6PC2hHHdGAAADxXqw21E971.png-wh_50


C1

wKioL1k6PEizw7soAAADNmkkH84765.png-wh_50

然后重启一下 service vsftpd restart

5.为个别虚拟机用户建立独立的配置文件,启动服务并测试

  在指定目录下创建每个用户的配置文件重启登陆测试

      规则:

               一个用户可以上传

               一个用户可以创建目录或文件

               一个用户可以修改文件名

openssl+vsftpd 加密验证方式

由于使用ftp登陆时,能够通过抓包工具,得到一些信息,所以不安全

虚拟用户总结:

         1.先生成用户密码的数据库文件

         2.创建虚拟用户映射(虚拟用户的家目录)

         3.创建认证文件/etc/pam.d/vsftpd.pam

            指定虚拟用户数据库文件的位置。

         4.配置文件中添加pam认证&虚拟用户的配置文件所在目录

         5.为每个虚拟用户创建配置文件(配置文件要创建指定位置,配置文件名和用户名相同

ssl+vsftpd

    1.ssl证书的生成

    2.配置文件添加ssl认证支持

    匿名,本地用户是否启用ssl

    pem认证证书的位置

    3.登录时用相对应的登陆认证方式(公开式)

openssl+vsftpd 加密验证方式

 由于使用FTP登录时,能够通过抓包工具,得到一些信息,所以不安全

tcpdump port 21 -nA

1.查看是否安装 openssl

   rpm -a openssl

2.查看vsftpd是否支持openssl

wKioL1k6PJWxpA1SAAALLZ6OfEw457.png-wh_50

3.生成加密信息

wKiom1k6PNqTNllAAABFTLNAOZ4517.png-wh_50

注:req标注格式

         -new 创建一个新的认证证书

         x509 证书内容格式

         -nodes 不使用密码

         -out  输出的文件名

         -keyout 生成的密钥文件

4.把证书放在指定位置

wKiom1k6PVXQIuJNAAAGReLJqZ0658.png-wh_50

给他权限chmod 500 certs

5.修改ftp的配置文件 /etc/vsftpd/vsftpd.conf

wKioL1k6PXfi6UHOAAAgrZ6vDPw498.png-wh_50

6.重启服务 service vsftpd restart

7.测试