文件服务器:FTP服务器

数据传输原理

功能简介

  1. 文件的传输与管理
  2. 不同等级的用户身份:user、guest、anonymous

    • 实体用户。权限较完整
    • 匿名用户。下载资源的能力
  3. 命令记录与日志文件记录

    /var/log 里面可找到用户曾经使用过的命令和传输的数据
    使用的服务是syslogd

  4. 限制用户活动的目录:(change root,简称:chroot)

    用户的工作范围局限在用户的主目录下。ftp后显示的就是根目录就是用户的主目录。

工作流程和使用到的端口(以ftp默认的主动式连接为例)

  1. 两个连接

    • 命令通道
    • 数据流通道

    因为是TCP数据包,所以每次连接都需要经过三次握手

  2. 连接过程

    • 建立命令通道的连接

    客户端随机取一个大于1024的端口与ftp服务器的port 21端口实现连接,这个连接来对ftp服务器执行命令

    • 通知ftp服务器端使用Active并告知连接的端口号

    客户端在需要数据的情况下,会告知服务器使用什么方式来连接,如果是主动式(Active)连接时,客户端会先随机启用一个端口,且通过命令通道告知FTP服务器这两个消息,并等待ftp服务器的连接

    • FTP服务器主动向客户端连接

    ftp服务器通过命令了解到客户端的需求之后,默认使用port 22向客户端发起请求,经过三次握手,现在就可以开始传输数据了

备注:数据传输通道是在有数据传输行为的时候,才会建立的通道,并不是一开始就连接ftp服务器的时候就立刻建立起的通道

在主动连接的FTP服务器与客户端之间具有防火墙

很多局域网络都会使用防火墙的NAT功能

让我们来梳理一下问题发生的过程吧!

  1. 用户与服务器之间命令通道的建立

    NAT会主动记录由内部送往外部的连接信息,而由于命令通道的建立是由客户端向服务器端发起的,故这条连接顺利建立

  2. 用户与服务器之间数据通道建立的通知

    client启动数据传输通道,并通过命令告知ftp服务器,等待服务器端的主动连接

  3. 服务器主动连到NAT等待转递至客户端的连接问题

    经过NAT转换,服务器端只能得知NAT的IP而不是客户端的IP。因此ftp服务器会以port 20主动向NAT发起port发起主动连接的请求。但NAT并没有启动port来监听ftp服务器的连接

在ftp的主动式连接中,NAT将会被视为客户端,但是NAT并不是客户端,这就造成了问题。

如果你有时发现连接上服务器了,但是无法获取文件名的列表,而是在超过一段时间后显示“can’t build data connection:connection refused”,"无法进行数据传输"之类的信息,那就是这个原因困扰的。

简易的解决办法:

  1. iptables提供的ftp检测模块

    使用modprobe这个命令加载ip_conntrack_ftp及ip_nat_ftp等模块,这几个模块会主动的分析目标是port 21的连接信息,就可以得到客户端的数据传输通道的端口信息,就能接收服务器的连接了。

    但是如果ftp服务器使用的不是默认端口21的话,那就无法顺利解析了

  2. 客户端选择被动式(Passive)连接模式

    主动式是服务器向客户端发起连接,那被动式就是客户端向服务器端发起连接。

客户端选择被动式的连接模式

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

  2. 客户端发起PASV的连接请求

    当使用数据通道命令时,客户端可通过命令通道发出PASV的被动式连接要求,并等待服务器的回应

  3. ftp服务器启动数据端口,并通知客户端连接

    如果你所使用的ftp服务器是支持被动式连接的,那么就会启动一个监听端口,也可以自定义某一范围的端口,这要看ftp服务器软件而定。然后ftp服务器会通过命令通道告知客户端已经启动的端口(port PASV)

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

    客户端随机取用大于1024的端口来进行对ftp服务器的port PASV连接。

潜在问题:

  1. 被动式的ftp数据通道的连接方向是由客户端向服务器端连接的。那么,如果ftp服务器也是在NAT后端怎么办?

  2. 服务器在没有设置的情况下随机选取大于1024的端口来提供客户端连接使用。但如果此端口有问题的话,怎么办呢?很难追踪来自入侵者攻击的日志信息。 passive ports限制 port number

vsftpd服务器基础设置

较为安全的ftp服务器软件的特点

  1. 启动者身份为一般用户,对于Linux系统的权限较低,危害相对降低。此外,vsftpd利用chroot()函数进行改换根目录的操作,使系统工具不被利用

  2. 任何需要具有较高执行权限的vsftpd命令均以一个特殊的上层程序所控制,该上层程序享有的较高执行权限能力已经被限制的相当低了

  3. 绝大部分的ftp命令已经被整合到vsftpd主程序中,不要使用额外的系统提供的命令,比较安全

  4. 较高执行权限的命令需经过相当程度的身份确认后,才可使用

所需软件及软件结构

  1. 软件:vsftpd

  2. 配置文件:/etc/vsftpd/vsftpd.conf

    参数=设置值
    等号两边不能有空白

  3. 文件/etc/pam.d/vsftpd

    主要作为身份认证使用,阻挡一些用户身份的功能

  4. 文件/etc/vsftpd/ftpusers

    系统账号默认是无法使用vsftpd
    限制某些用户无法使用vsftpd

  5. 文件/etc/vsftpd/user_list

    不允许登陆vsftpd的账号写入这里,与ftpusers的作用相同
    但是这个文件是否生效是由vsftpd.conf来决定(userlist_deny与userlist_enable = {YES/NO})

  6. 文件/etc/vsftpd/chroot_list

    此文件默认不存在,需要手动建立。
    功能:将某些账号的用户chroot建立在他们的默认用户主目录下。但是这个文件生效与vsftpd.conf内的chroot_list_enable、chroot_list_file两个参数有关

  7. 文件/usr/sbin/vsftpd

    vsftpd的主要执行文件。只有这一个执行文件

  8. 目录/var/ftp

    匿名用户登陆的根目录

文件服务器:FTP服务器详解的更多相关文章

  1. Linux中搭建一个ftp服务器详解

    来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种 ...

  2. 引用 Windows Server 2003 FTP服务器配置详解

    引用 昆神之星 的 Windows Server 2003 FTP服务器配置详解 1.FTP文件传输协议,主要用于计算机之间文件传输,是互联网上仅次于www的第二大服务.本文主要演示如何在Window ...

  3. NGINX高性能Web服务器详解(读书笔记)

    原文地址:NGINX高性能Web服务器详解(读书笔记) 作者:夏寥寥 第4章  Nginx服务器的高级配置 4.1 针对IPv4的内核7个参数的配置优化 说明:我们可以将这些内核参数的值追加到Linu ...

  4. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  5. 【转载】Hadoop历史服务器详解

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:过往记忆(http://www.iteblog.com/)     原文地址: ...

  6. Linux实现利用SSH远程登录服务器详解

    Linux实现利用SSH远程登录服务器详解 http://www.111cn.net/sys/linux/55152.htm

  7. 计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  8. 【网络】IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  9. IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解,DNS域名设计

    本文参考:<计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解> IP地址 概述 计算机要实现网络通信,就必须要有一个用于快速定位的网络地址.IP地址就是计算机在网络 ...

随机推荐

  1. eclipse运行没问题,tomcat以脚本启动后插入数据库的中文会乱码

    记一次部署工程的时候遇到的问题 部署war包到win7的时候发现,布上去后插入数据库的中文会乱码,然后发现用eclipse运行源码没问题,一开始以为是war打出来的时候编码错误,然后将eclipse的 ...

  2. 解决Windows版Git出现templates not found的问题

    环境: Win10 x64 Git windows客户端(下载自 https://git-scm.com/) SourceTree 1.9.6.1(使用系统安装的Git,而非SourceTree内嵌的 ...

  3. SQL Server 2008 允许远程连接的配置

    如果无法通过IP地址远程连接你的SQL Server 2008服务器,可以参考下面的内容进行设置.在进行下述设置之前,应该确保你的网络已经安装设置完毕,服务器已经正常连接到网络中. 1.单击Windo ...

  4. MAC上安装 HLA(High Level Assembly)

    1.安装HLA 最新版的hla汇编器可在这里下载,支持MacOs,Linux,Windows平台 2.安装步骤 将下载好的hla程序包放在Mac根目录下 最重要的一步是设置好环境变量,打开Mac根目录 ...

  5. easyUI和bootstrap的混搭

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. Oracle创建自增ID

    先创建序列sequence create sequence S_User minvalue 1 nomaxvalue  -- 或 maxvalue 999 start with 1 increment ...

  7. 在使用 HttpWebRequest Post数据时候返回 400错误

    笔者有一个项目中用到了上传zip并解压的功能.开始觉得很简单,因为之前曾经做过之类的上传文件的功能,所以并不为意,于是使用copy大法.正如你所料,如果一切很正常的能运行的话就不会有这篇笔记了. 整个 ...

  8. juery实现贪吃蛇的游戏

    今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...

  9. ruby 基础知识(二)

    ruby  中的动态方法 http://singleant.iteye.com/blog/1680382 Rails 大量使用了符号(symbol).符号看上去很像变量名,不过以冒号作为前缀.符号的例 ...

  10. 第一章 --- 关于Javascript 设计模式 之 单例模式

    首先我们对单例模式先进行理论上的讲解,接下来,我们再通过具体的代码示例,来讲解,这个单例模式的使用场景和这种模式的优缺点 (这个系列的所有关于设计模式的都是面向Javascript) 一.理论定义: ...