1.FTP简介
1.1FTP:File Transfer Protocol 文件传输协议
FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。
"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。

2.VSFTP特点
2.1VSFTP是一个比FTP更安全的软件具有以下特点:
01 vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
02 任何需要执行较高权限的指令都需要上层程序的许可
03 ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
04 用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
05 vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本
  服务器的初衷就是服务的安全性。
06 vsftpd是RedHat Linux默认使用的ftp服务端软件。
07 vsftpd不再依赖于xinetd服务
08 vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。

3.VSFTP连接类型
控制连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据

4.Vsftp工作模式
4.1FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
主动模式端口分配:控制端口 21 传输数据端口 20
被动模式端口分配:控制端口 21 传输数据端口 随机

  1. FTP的PORT(主动模式) 和 FTP的PASV(被动模式)
    5.1PORT(主动模式)
    PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上), 发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端 开放的端口连接,发送数据,原理如下图:

如上图所示,在主动模式下,FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求,并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认,然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151,最后客户端返回确认。
这种模式缺点在于服务器带客户端的FTP连接很容易被传输过程中的路由器、防火墙所影响或拦截。
5.2PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP 客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

为了主动模式所面临的服务器到客户端的连接会被拦截阻塞的问题,FTP发展出了被动模式。在被动模式中,命令连接和数据连接都由客户端来发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙拦截的问题。

如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认ok。

centos 7 windows 传输 centos7传文件_根目录

6.VSFTP传输模式
1 文本模式:ASCII模式,以文本序列传输数据
2 二进制模式:Binary模式,以二进制序列传输数据

7.FTP用户的类型
1 匿名用户:anonymous或ftp
2 本地用户:帐号名称、密码等信息保存在passwd/shadow文件中
3 虚拟用户:使用独立的帐号/密码数据文

8.环境准备

8.1关闭SElinux

setenforce 0 临时关闭selinux

vim /etc/selinux/config 永久关闭selinux

SELINUX=disabled

centos 7 windows 传输 centos7传文件_根目录_02

8.2关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

centos 7 windows 传输 centos7传文件_根目录_03

9.安装并启动FTP服务

9.1 查看系统是否安装vsftp

rpm -qa | grep vsftpd

执行命令没有反馈就是没有安装

centos 7 windows 传输 centos7传文件_根目录_04

9.2 使用yum命令安装vsftpd

yum install -y vsftpd

centos 7 windows 传输 centos7传文件_根目录_05

9.3 启动vsftpd

systemctl start vsftpd

9.4 查看21端口是否存在

netstat -nltp|grep 21

centos 7 windows 传输 centos7传文件_服务器_06

9.5 宿主机浏览器访问 ftp://10.0.0.201

centos 7 windows 传输 centos7传文件_服务器_07

FTP默认的存储目录 /var/ftp/pub 默认不允许匿名用户上传

10.创建FTP用户

10.1 创建一个ftp用户

useradd zxcvbnm

10.2 为ftp用户设置密码

echo “zxcvbnm” | passwd zxcvbnm --stdin

centos 7 windows 传输 centos7传文件_centos 7 windows 传输_08

10.3 限制该用户只能访问FTP,不能直接登录服务器(系统)
usermod -s /sbin/nologin zxcvbnm

11.创建FTP文件存储路径

11.1 创建FTP文件存储路径

mkdir /var/www -p 创建主目录,不可上传文件

mkdir /var/www/html 文件存储目录

centos 7 windows 传输 centos7传文件_根目录_09

11.2 设置访问权限
chmod a-w /var/www && chmod 777 -R /var/www/html

12.修改系统用户的存储目录

vim /etc/vsftpd/vsftpd.conf

local_root=/var/www/ 针对系统用户的存储目录

anon_root=/var/www/ 针对匿名用户的存储目录

centos 7 windows 传输 centos7传文件_根目录_10

13.配置FTP权限

13.1 vsftpd的配置目录:/etc/vsftpd

vsftpd.conf 主要配置文件(注意备份)

ftpusers 配置禁止访问 FTP 服务器的用户列表

user_list 配置用户访问控制

建议备份vsftpd.conf文件: cp vsftpd.conf vsftpd.conf.bak

绝对路径: cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

centos 7 windows 传输 centos7传文件_centos 7 windows 传输_11

13.2 关闭匿名访问和切换根目录权限

vim vsftpd.conf

anonymous_enable=NO 禁用匿名用户

centos 7 windows 传输 centos7传文件_根目录_12

chroot_local_user=YES 禁止切换根目录 删除此行

centos 7 windows 传输 centos7传文件_服务器_13

13.3 重启FTP服务

systemctl restart vsftpd

重启之后再用浏览器登陆ftp,此时需要输入用户名和密码

centos 7 windows 传输 centos7传文件_服务器_14

14.vsftp为不同用户设置不同的ftp的根目录

需求:

要求ftp登录后的根目录是/var/www/,但是又不能影响其他用户的登录路径,因为有些程序是直

接在根目录进行操作的,而没有目录切换的过程。

操作过程

注释掉配置文件中的存储目录

#local_root=/var/www/

#anon_root=/var/www/

创建多用户访问不同的根目录,这两行已经不生效。所以注释不注释都可以

14.1 创建第二个FTP用户

useradd zxcvbnm1

14.2 添加密码

echo “zxcvbnm1” | passwd lzxcvbnm1 --stdin

centos 7 windows 传输 centos7传文件_服务器_15

14.3 限制该用户只能访问FTP,不能直接登录服务器(系统)

usermod -s /sbin/nologin zxcvbnm1

14.4 vsftpd配置

配置各自用户访问根目录

cd /etc/vsftpd/

mkdir userconfig

cd userconfig

centos 7 windows 传输 centos7传文件_根目录_16

用户配置目录 user_config_dir=/etc/vsftpd/userconfig

vim /etc/vsftpd/vsftpd.conf

centos 7 windows 传输 centos7传文件_客户端_17

在userconfig目录下为不同用户配置不同的根目录:

mkdir /var/www/html/lidao -p

vim /etc/vsftpd/userconfig/zxcvbnm

local_root=/var/www/html

centos 7 windows 传输 centos7传文件_服务器_18

mkdir /var/www/hedao/ -p

vim /etc/vsftpd/userconfig/zxcvbnm1

local_root=/var/www/hedao

centos 7 windows 传输 centos7传文件_客户端_19

14.5 重启服务
systemctl restart vsftpd
14.6 创建测试文件,进行测试
mkdir /var/www/html/laonanhai -p
mkdir /var/www/hedao/lizhengya -p
用zxcvbnm用户测试一下
zxcvbnm用户对应的根目录是/var/www/html

centos 7 windows 传输 centos7传文件_服务器_20

centos 7 windows 传输 centos7传文件_centos 7 windows 传输_21

centos 7 windows 传输 centos7传文件_根目录_22

用zxcvbnm1用户测试一下

zxcvbnm1对应的根目录是hedao

centos 7 windows 传输 centos7传文件_centos 7 windows 传输_23

centos 7 windows 传输 centos7传文件_centos 7 windows 传输_24

centos 7 windows 传输 centos7传文件_客户端_25

15.VSFTP权限管理

ll /var/www/html/ -d

centos 7 windows 传输 centos7传文件_客户端_26

因为所有者和所属组和其他人都是读写执行权限,所以可以正常上传66.txt文件

centos 7 windows 传输 centos7传文件_客户端_27

ll /var/www/html/laonanhai -d

centos 7 windows 传输 centos7传文件_服务器_28

因为laonanhai这个目录其他用户没有写的权限,所以zxcvbnm用户登录的FTP服务器,也没有写的权限,所以不能上传文件

centos 7 windows 传输 centos7传文件_根目录_29

给老男孩目录提权

chmod 775 /var/www/html/laonanhai

ll /var/www/html/laonanhai -d

centos 7 windows 传输 centos7传文件_服务器_30

让laonanhai有写的权限

usermod -a -G root zxcvbnm

id laonanhai

centos 7 windows 传输 centos7传文件_根目录_31

让zxcvbnm属于zxcvbnm组,也属于root组

重启vsftp 重启后,从电脑访问ftp 拖拽文档放入就可以了

systemctl restart vsftpd

centos 7 windows 传输 centos7传文件_根目录_32

16.FTP客户端
FTP图形化客户端 Xftp falshfxp 资源管理器 浏览器 等等。。。
访问方式: ftp://自己FTP服务器的ip地址
FTP命令行客户端 Xshell SecureCRT 等等。。。
访问方式: ftp 自己FTP服务器的ip地址

17.vsftpd.conf配置文件
 vsftpd.conf 里面有很多的配置项,这里只列出一部分常用的配置项
 下面是配置的选项及说明
 17.1 系统用户的配置
 local_enable=YES # 是否允许本地用户登录
 write_enable=YES # 是否允许本地用户的写权限(是否允许上传)
 listen=YES # 是否开启监听
 listen_port=2121 # 修改连接端口
 pam_service_name=vsftpd # 服务名称
 local_umask=022 # 默认的umask码(本地用户的掩码信息)
 diremssage_enable=YES # 是否显示目录说明文件
 connect_from_prot_20=YES # 是否确定端口传输来自20
 xferlog_ftd_format=YES # 是否使用标准的ftp xferlog模式
 17.2 匿名登录设置(匿名用户的常用配置)
 anonymous_enable=NO # 是否允许匿名登录
 anno_upload_enable=YES #是否允许匿名用户上传权限
 anno_mkdir_write_enable=YES #是否允许匿名用户可创建目录及其文件
 anno_other_write_ebable=YES #匿名用户是否除了写权限是否拥有删除和修改的权限
 anno_world_readable_only=YES #匿名用户是否拥有只读权限
 no_anno_password=YES #匿名用户是否跳过密码检测
 anno_umask=077 #匿名用户创建文件的掩码权限
 17.3 限制目录
 chroot_local_user=yes # 限制所有用户都在家目录(禁锢所有ftp用户在其家目录下)
 chroot_list_enable=YES # 调用限制在家目录的用户名单(是否将系统用户限制在自己的
 home目录下)
 chroot_list_file=/etc/vsftpd/chroot_list # 限制在家目录的用户名单所在路径(列表不受限制的用户)
 17.4 日志设置xferlog_file=/var/log/vsftpd.log # 日志文件路径设置
 xferlog_enable=YES # 是否记录ftp传输过程
 use_localtime=YES


默认情况下,vsftpd 是用GMT做为它的时间的,所以和操作系统的时间不一致,加入这个命令来同步vsftpd与操作系统的时间