一、搭建环境

阿里云 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. js_10_dom表单

    事件的优先级? 先执行事件,后执行标签内置事件,如果事件返回false不执行后面的事件或标签内置事件 如何通过js提交表单? 任意标签定义onclick事件 函数中写入:document.getEle ...

  2. JS正则表达式的基础用法

    RegExp(正则表达式)对象 正则表达式是一个描述字符模式的对象,可以处理更复杂的字符串.进行匹配替换. 常用的修饰符: i/m/g 使用方法: [声明方法一: new RegExp(value)] ...

  3. javaweb后台转码

    为什么需要转码? 客户端向服务器发送请求的四种情况:1.URL方式直接访问;2.页面链接(属于get请求);3.表单get提交;4.表单post提交 1.url(url和页面链接):各大浏览器.各个操 ...

  4. Python Django连接(听明白了是连接不是创建!)Mysql已存在的数据库

    再声明一次!是连接不是创建!网上的一些人难道连接和创建这俩词都弄不懂就在那里瞎写一些文章! (Python Django连接存在的数据库) Python连接存在的数据库-------MySql 1.首 ...

  5. ueditor显示内容末尾有多余标记的解决

    问题: 最近用了百度的ueditor文本编辑器,出现一个问题,用ueditor存数据到数据库都正常,但是重新读取后赋值到ueditor却会在末尾多出 "> 这两个符号.赋值方式如下: ...

  6. test for python thread

    #!/usr/bin/python # -*- coding: UTF-8 -*- import thread import time # 为线程定义一个函数 def print_time(threa ...

  7. Web Application和Web Site两个模板的比较

    Scenario Web Application Project Web Site Project 项目定义 跟 Visual Studio .NET 2003 类似,由于项目文件的存在,只有被项目文 ...

  8. SQL Server ——动态SQL

    EXECUTE 执行 Transact-SQL 批中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.标量值用户定义函数或扩展存储过程.SQL Server 2005 扩展了 E ...

  9. android 页面的切换

    startActivity后加:IntentHelper.jump(mContext, MyBalanceActivity.class);activity.overridePendingTransit ...

  10. Eclipse启动报错[ out of memory error has occurred ]或[ An internal error occurred while showing an internal error ]

    自我总结,有什么需要纠正或更好的方案,请告知,谢谢! 最近上来看到好多同学都遇到了这个问题,之前我也好几次碰到这个问题,很是恼火,什么没干,eclipse一开电脑就卡死了,后来发现不管是新打开ecli ...