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 传输数据端口 随机
 

5. 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。
 

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

8.2关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

9.安装并启动FTP服务

9.1 查看系统是否安装vsftp

rpm -qa | grep vsftpd
执行命令没有反馈就是没有安装

9.2 使用yum命令安装vsftpd

yum install -y vsftpd

9.3 启动vsftpd

systemctl start vsftpd

9.4 查看21端口是否存在

netstat -nltp|grep 21

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

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

10.创建FTP用户

10.1 创建一个ftp用户

useradd zxcvbnm

10.2 为ftp用户设置密码

echo "zxcvbnm" | passwd zxcvbnm --stdin

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

usermod -s /sbin/nologin zxcvbnm
 

11.创建FTP文件存储路径

11.1 创建FTP文件存储路径

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

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/ 针对匿名用户的存储目录

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

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

vim vsftpd.conf
anonymous_enable=NO 禁用匿名用户
chroot_local_user=YES 禁止切换根目录 删除此行

13.3 重启FTP服务

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

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

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

usermod -s /sbin/nologin zxcvbnm1

14.4 vsftpd配置

配置各自用户访问根目录
cd /etc/vsftpd/
mkdir userconfig
cd userconfig
用户配置目录 user_config_dir=/etc/vsftpd/userconfig
vim /etc/vsftpd/vsftpd.conf
在userconfig目录下为不同用户配置不同的根目录:
mkdir /var/www/html/lidao -p
vim /etc/vsftpd/userconfig/zxcvbnm
local_root=/var/www/html
mkdir /var/www/hedao/ -p
vim /etc/vsftpd/userconfig/zxcvbnm1
local_root=/var/www/hedao

14.5 重启服务

systemctl restart vsftpd

14.6 创建测试文件,进行测试

mkdir /var/www/html/laonanhai -p
mkdir /var/www/hedao/lizhengya -p
用zxcvbnm用户测试一下
zxcvbnm用户对应的根目录是/var/www/html
 
 
 
用zxcvbnm1用户测试一下
zxcvbnm1对应的根目录是hedao
 
 

15.VSFTP权限管理

ll /var/www/html/ -d
因为所有者和所属组和其他人都是读写执行权限,所以可以正常上传66.txt文件
 
ll /var/www/html/laonanhai -d
因为laonanhai这个目录其他用户没有写的权限,所以zxcvbnm用户登录的FTP服务器,也没有写的权限,所以不能上传文件
 
给老男孩目录提权
chmod 775 /var/www/html/laonanhai
ll /var/www/html/laonanhai -d
让laonanhai有写的权限
usermod -a -G root zxcvbnm
id laonanhai
让zxcvbnm属于zxcvbnm组,也属于root组
重启vsftp 重启后,从电脑访问ftp 拖拽文档放入就可以了
systemctl restart vsftpd

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与操作系统的时间

作者:星辰追路人

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

CentOS7.5上FTP服务的安装与使用的更多相关文章

  1. centos7中搭建ftp服务

    博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的 ...

  2. CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0

    CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0 CentOS7.5 环境 [root@instance-fjii60o3 ~]# rpm -qi centos- ...

  3. http,ftp服务的安装

    首先,要配置云源(在我上一篇博客中有云源配置的详细过程) 一.http服务的安装 1.安装 http   yum install -y httpd 2.启动http服务  systemctl  sta ...

  4. ftp服务的安装

    ftp服务的安装 1.环境准备 2.安装服务 3.配置文件 3.1.匿名访问 把以下三个匿名上传写入开启 启动并查看服务状态: Linux客户端访问: Tips: 220表示服务正常,可以登陆:230 ...

  5. RedHat 7.0 下 FTP 服务的安装,启动,配置,以及虚拟用户的建立

    (注意! 区分shell命令和往配置文件里加的代码不同) 一:ftp服务的安装,启动和启用.   1:vim /etc/sysconfig/selinux     改为disabled后重启     ...

  6. Ubuntu学习总结-02 Ubuntu下的FTP服务的安装和设置

    一 安装vsftpd 在安装前vsftpd,先更新apt-get下载的数据源输入如下命令: sudo apt-get update 然后安装vsftpd sudo apt-get install vs ...

  7. CentOS7.4搭建ftp服务

    1.使用yum安装vsftpd yum install vsftpd -y 2.安装完成后,启动 FTP 服务: service vsftpd start 3.配置ftp权限 目前 FTP 服务登陆允 ...

  8. Linux(Centos7) 实例搭建 FTP 服务

    本文以 CentOS 7.2 64位系统为例,使用 vsftpd 作为 FTP 服务端,FileZilla 作为客户端.指导您如何在 Linux 云服务器上搭建 FTP 服务. 操作步骤 安装 vsf ...

  9. centos7.4 开启ftp服务

    1.安装vsftpd yum install -y ftp vsftpd 2.配置/etc/vsftpd/vsftpd.conf 修改项如下: #不允许匿名访问 anonymous_enable=NO ...

随机推荐

  1. VS2010设置VC6的字体样式及背景色、选中字高亮

    习惯了VC6.0的fixedsys字体,用VS2010还真不习惯.把VS2010打造成经典的.熟悉的模样,也并非难事.网上有相应的文章,我再记录下来,主要是为了自己查找方便(刚刚重装了系统,一切从头再 ...

  2. s3c2410 cs8900a 网卡驱动程序

    /* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Lo ...

  3. Windows下Apache+MySQL+PHP快速配置的几种方法

    Apache MySQL PHP Windows WAMP 1.易思EasySiteServer服务器集成环境 v1.0  (推荐) 尔创互联为推广其ESPCMS而开发的一个小东东,很好用.零配置,完 ...

  4. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装

    1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...

  5. RTB业务知识2-Open-RTB全景

    一个.前言 openrtb这是一套开源的竞价广告系统,来自IAB贡献,井. 有许多值太借鉴,提供sdk api接口文档介绍,整理了相关的资料.主要包含其生态图体系.业务流程和基本的对象模型和数据模型. ...

  6. thinkphp3.2定义多模块并设置默认模块

    前台入口文件index.php <?php // +---------------------------------------------------------------------- ...

  7. Cocos2d-x3.1颗粒使用

    1.头 #include "cocos2d.h" USING_NS_CC; class WaterWaveDemo : public Layer { public: static ...

  8. 2014辛星在读CSS第八节 使用背景图片

    这应该是系统CSS本教程的最后一节,为什么,由于本节.我觉得基础已经完成,接下来的就是无休止的战斗,战斗非常难用知识讲出来,通过积累,战斗经验.这些都不是说出来. 伟大,下来说一下用CSS加入背景图片 ...

  9. 【Java】Java中的数据类型

    Java 语言是一种强类型语言.通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型.Java 数据类型分为两类,如图: 在 Java 的领域里,基本数据类型变量存的是数 ...

  10. Highcharts纯js图表库,以后可以跟客户说,你跟阿里云ECS用的图表库是同款

    Highcharts是一款纯javascript编写的图表库,能够很简便的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达18 ...