一、搭建环境

阿里云 CentOS 7.3 64位

二、FTP协议基础知识

2.1 简介

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件协议”。用于 Internet 上的控制文件的双向传输。

2.2 FTP的运作流程与使用端口

FTP 的传输使用的是 TCP 传输协议,由于 FTP 服务的特点是数据量大、控制信息相对较少,因此在设计的时分别对控制信息与数据进行处理的方式,这样用于通信的 TCP 连接有两个:控制连接与数据连接。其中,控制连接用于在通信双方之间传输 FTP 命令与响应信息,完成连接建立、身份认证与异常处理等控制操作;数据连接用于在通信双方之间传输文件或目录信息。

FTP支持两种模式:Standard(PORT方式,主动方式),Passive(PASV,被动方式)。

2.2.1 PORT 方式

图1 FTP服务器的 PORT 方式示意图

至于连接的过程是这样的:

(1) 建立命令通道的连接

如上图所示,用户端会随机取一个大于1024以上的端口(port AA)来与FTP服务器端的port 21进行连接,这个过程当然需要经历TCP的三次握手!完成连接后用户端便可透过这个连接来对TCP服务器下达指令,包括查询文件名、下载、上传等等指令都是利用这个通道来下达的。

(2)通知FTP服务器端使用 active 且告知连接的端口号

FTP 服务器的 21 端口主要用在命令下达,但是当关系到数据流时,就不是使用这个连接了。用户端在需要数据的情况下,会告知服务器端需要用什么方式来连接,如果是 PORT 模式时,用户端会先随机启用一个端口(图中的port BB),且通过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的连接。

(3)FTP服务器【主动】向用户端连接

FTP 服务器由命令通道了解用户端的需求后,会主动的由 20 这个端口向用户端的 port BB 连接,这个连接当然也会经历 TCP 的三次握手!此时 FTP 的用户端与服务器端会建立两条连线,分别用在命令的下达与数据的传送。而预设 FTP 服务器端使用的主动连接端口就是port 20。

2.2.2 PASV 方式

图2 FTP服务器的 PASV 方式示意图

(1)用户与服务器建立命令通道

同样的需要建立命令通道,通过三次握手就可以建立起这个通道了。

(2)用户端发出PASV的连接请求

当有使用数据通道的指令时,用户端可通过命令通道发出 PASV 的被动式连接要求(Passive 的缩写),并等待服务器的回应。

(3)FTP服务器启动数据端口,并通知用户端连接

如果你的 FTP 服务器能够处理被动式连接,此时 FTP 服务器会先启动一个端口在监听。这个端口号码可能是随机的,也可以是某一范围的端口,具体看你的 FTP 服务器软件而定。然后你的 FTP 服务器会通过命令通道告知用户端已经启动的端口(图中的 port PASV),并等待用户端的连接。

(4)用户端随机取用大于1024的端口进行连接

然后你的用户端会随机取用一个大于 1024 的端口号来对主机的 port PASV 连接。

2.3 用户分类

2.2.1 Real账户

这类用户是指在FTP服务上拥有账号。当这类用户登陆FTP服务器的时候,其默认的主目录就是其账号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。

2.2.2 Guest用户

在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。

2.2.3 Anonymous(匿名)用户

这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。

三、VSFTP

3.1 简介

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

3.2 安装

查看是否装有 vsftpd 服务。

rpm -qa | grep vsftpd

若不存在,则使用 yum 命令直接安装:

yum -y install vsftpd

3.3 配置 vsftpd

修改配置文件,默认路径为 /etc/vsftpd/vsftpd.conf,命令如下。

vim /etc/ftpd/ftpd.conf

以下为需要修改或添加的配置项。

  • anonymous_enable=NO #不允许匿名用户登陆
  • chroot_list_enable=YES #chroot_list_file 指定文件中指定的用户禁锢在其主目录中
  • chroot_list_file=/etc/vsftpd/chroot_list

在 /etc/vsftpd 目录下建立文件 chroot_list,命令如下

cd /etc/vsftpd
touch chroot_list

在 chroot_list 里添加 FTP 用户的用户名,每个用户一样,这里我添加的用户名为 symind。

3.4 添加 FTP 用户组及用户

添加一个用户组,这里我命名为 webftp。

groupadd webftp

在用户组中添加用户,并指定用户的主目录。

useradd -g webftp -M -d /home/www -s /sbin/nologin symind

设置密码。

passwd symind

        修改目录拥有者。

chown -R symind.webftp /home/www

        修改目录权限,vsftp 默认要求如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了。

chmod u=rx /home/www

也可以更改 vsftpd 的配置,allow_writeable_chroot=YES。

参考文献

1. 百度百科 - ftp(文件传输协议) https://baike.baidu.com/item/ftp/13839?fr=aladdin

2. 百度百科 - VSFTP https://baike.baidu.com/item/VSFTP/2596628?fr=aladdin

3. 鳥哥的 Linux 私房菜 - 檔案伺服器之三 http://linux.vbird.org/linux_server/0410vsftpd.php

4. vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot()错误的解决方法 http://blog.csdn.net/bluishglc/article/details/42399439

5. CentOS下vsftp设置、匿名用户&本地用户设置、PORT、PASV模式设置 http://desert3.iteye.com/blog/1685734

Linux搭建FTP服务器的更多相关文章

  1. 使用Linux搭建FTP服务器实现文件共享

    使用Linux搭建FTP服务器实现文件共享... ---------------- Linux中的文件共享:FTPVSFTPDVSFTPD虚拟用户 FTP可以用在Linux与Linux 和Window ...

  2. Linux 搭建FTP服务器

    介绍 本章主要介绍在Linux中搭建FTP服务器的过程,需要掌握的要点是配置文件的合理配置. 知识点 在linux中使用的FTP是vsftp FTP可以有三种登入方式分别是: 匿名登录方式:不需要用户 ...

  3. Linux搭建FTP服务器实战

    首先准备一台Linux系统机器(虚拟机也可), 检测出是否安装了vsftpd软件: rpm -qa |grep vsftpd 如果没有输出结果,就是没有安装. 使用命令安装,安装过程中会有提示,直接输 ...

  4. linux搭建FTP服务器并整合Nginx

    操作系统:Centos7 1.1.服务器配置 # 关闭SELINUX,把SELINUX=enforcing改为SELINUX=disabled,reboot重启服务器生效 vim /etc/sysco ...

  5. Linux搭建ftp服务器简单教程及使用方法

    参考文章:https://www.waitig.com/linux-or-centos-install-vsftpd-and-setup-it.html 步骤概括如下: 安装:yum install ...

  6. Linux篇---ftp服务器的搭建

    一.前述 企业中linux搭建ftp服务器还是很实用的,所以本文针对centoos7和centoos6搭建服务器教程做个总结. 二.具体 1.显示如下图则表示已安装 vsftp软件.如果未显示则需要安 ...

  7. linux下FTP服务器搭建教程1

    你买了个主机就像是买了块地皮,搭建FTP就像是盖房子,我在地皮上建房子,然后创建的用户就像是钥匙,我给谁钥匙(权限),谁就可以到我家去玩,去放东西,拿东西. 虽然我们买不起现实的房子,但是我们可以买互 ...

  8. 《Linux下FTP服务器搭建及FTP使用》

    .LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...

  9. 服务器linux centos 7.4 搭建ftp服务器

    此操作是在腾讯云服务器linux centos 7.4 完成搭建ftp服务器 vsftpd 的: 安装 vsftpd $ yum install vsftpd -y 启动 $ service vsft ...

随机推荐

  1. MySQL两大存储引擎InnoDB与MyISAM

    1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...

  2. XML,HTML,XHTML

    对于上面3种技术,我们经常使用到,这里具体的做一个总结,来对比一下这3个东西. 什么是XML? XML即Extentsible Markup Language(可扩展标记语言),是用来定义其它语言的一 ...

  3. MyEclipse中好用的快捷键汇总

    MyEclipse中常用的快捷键有很多,合理的使用其中一些快捷键组合,可以有效提高开发的效率和质量. 1.Ctrl + Shift + R:打开资源.可以查找并打开工作区中任何一个文件,且支持使用通配 ...

  4. PHP实现QQ登录的开发教程

    第三方登录,就是使用大家比较熟悉的比如QQ.微信.微博等第三方软件登录自己的网站,这可以免去注册账号.快速留住用户的目的,免去了相对复杂的注册流程.下边就给大家讲一下怎么使用PHP开发QQ登录的功能. ...

  5. HTML学习——标签

    1.</hr>效果: 2.<q>简短文本引用, <blockquote>长文本引用, 表象:为文本添加一个双引号,实:一个语义,引用别人的话语. 3.&nb ...

  6. MTU,MSS基本概念

    传输层: 对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515: 对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment ...

  7. Spring事务不回滚原因分析

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

  8. Ajax数据的爬取(淘女郎为例)

    mmtao Ajax数据的爬取(淘女郎为例) 如有疑问,转到 Wiki 淘女郎模特抓取教程 网址:https://0x9.me/xrh6z 判断一个页面是不是 Ajax 加载的方法: 查看网页源代码, ...

  9. Linux中fdisk硬盘分区方法

    fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当 ...

  10. iOS-常用三方工具

    #菜单 pod 'LGSideMenuController' # 刷新 pod 'MJRefresh' # 网络请求 pod 'AFNetworking', '~> 3.0' # 图片缓存 po ...