• 文件服务器:FTP服务器详解


    文件服务器: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

      匿名用户登陆的根目录

  • 相关阅读:
    设计模式系列之中介者模式(Mediator Pattern)——协调多个对象之间的交互
    设计模式系列之外观模式(Facade Pattern)——提供统一的入口
    设计模式系列之装饰模式(Decorator Pattern)——扩展系统功能
    设计模式系列之组合模式(Composite Pattern)——树形结构的处理
    设计模式系列之工厂模式三兄弟(Factory Pattern)
    设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
    设计模式系列之原型模式(Prototype Pattern)——对象的克隆
    动态追踪技术之SystemTap
    一次内核 crash 的排查记录
    LLVM Coding Standards
  • 原文地址:https://www.cnblogs.com/cherishry/p/5886017.html
Copyright © 2020-2023  润新知