zoukankan      html  css  js  c++  java
  • FTP服务器原理

    21.1 FTP服务器原理

     
    使用明码传输方式,且有相当多的安全危机历史。因此一般使用功能较少的vsftpd这个软件。
     
    21.1.1 FTP功能简介
     
    有以下功能
    • 文档传输与管理
    • 不同等级的用户身份:user,guest,anonymous
    • 命令记录与登录文件记录
    • 限制用户活动的目录:(change root,简称 chroot)
    • 即将登录用户的家目录变成根目录
    21.1.2 FTP的运作流程与使用用的端口号
     
    FTP的传输使用的是TCP封包协议。
     
    FTP服务器使用了两个联机,分别是:
    • 命令信道
    • 数据流通道(ftp-data)
     
    两个联机通道的关系是怎么样的?以FTP预设的主动式(active)联机来做说明:
    主动指的是FTP服务器主动联机客户端,作为数据通道;
    • 建立命令通道的联机
      • 客户端会随机取一个大于 1024 以上的端口 (port AA) 来与 FTP服务器端的 port 21 达成联机, 这个过程当然TCP三次握手了!
      • 达成联机后客户端便可以透过这个联机来对 FTP 服务器下达指令, 包括查询文件名、下载、上传等指令
    • 通知 FTP 服务器端,使用 active 且告知连接的端口号
      • 客户端在需要数据的情况下,会告知服务器端要用什么方式来联机,如果是主动式 (active) 联机时, 客户端会先随机启用一个端口号 (图21.1-1 当中的 port BB) ,且透过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的联机;
    • FTP 服务器『主动』向客户端联机
      • FTP 服务器由命令通道了解客户端的需求后,会主动的由 20 这个端口号向客户端的 port BB 联机, 这个联机当然也会经过TCP三次握手!此时 FTP 的客户端与服务器端共会建立两条联机,分别用在命令的下达与数据的传递。 而预设 FTP服务器端使用的主动联机端口号就是 port 20 !
    如此一来则成功的建立起『命令』与『数据传输』两个信道!不过,要注意的是,数据传输信道是在有数据传输的行为时才会建立的通道喔!并不是一开始连接到FTP 服务器就立刻建立的通道
     
     
    由上可见,主动式联机使用到的端口号:
    •  命令通道的 ftp (默认为 port 21) 
    •  数据传输的 ftp-data (默认为 port 20)
     
    在主动联机的 FTP 服务器与客户端之间具有防火墙的联机问题
     
    一般来说,很多的局域网络都会使用防火墙(iptables) 的 NAT 功能,那么在 NAT 后端的 FTP 用户如何连接到 FTP 服务器呢?
     
    服务器主动连到 NAT 等待转递至客户端的联机问题:
    由于透过 NAT 的转换后, FTP 服务器只能得知 NAT 的 IP 而不是客户端的IP , 因此 FTP 服务器会以 port 20 主动的向 NAT 的 port BB 发送主动联机的要求。 但你的 NAT 并没有启动 port BB 来监听 FTP 服务器的联机啊!
     
    解决办法:
    • 使用iptables所提供的FTP侦测模块
      • ip_conntrack_ftp 及 ip_nat_ftp 等模块主动的分析『目标是 port 21 的联机』信息,得到port BB 的资料,
      • 此时若接受到 FTP 服务器的主动联机,就能够将该封包导向正确的后端主机了。
    • 客户端选择被动式(Passive)联机模式
      • 主动式,是指 服务器主动联机客户端。那被动式,就是客户端联机服务器。这里都是指的数据传输联机。
     
    21.1.3 客户端选择被动式联机模式
     
    • 用户与服务器建立命令信道
    • 客户端发出 PASV 的联机要求
      • 发出联机要求,病等待服务器的回应
    • FTP 服务器启动数据端口口,并通知客户端联机
      • 这个端口号码不是主动式的port 20 ,而是随机的。
      • 告知客户端这个 port PASV;
    • 客户端随机取用大于 1024 的端口号进行连接
     
    21.1.4 FTP的安全性问题与替代方案
     
    ssh,提供较为安全的sftp-server。在上面传输的数据是经过加密的。
     
    21.1.5 开放什么身份的使用者登入
     
    • 开放实体用户的情况 (Real user)
      • 系统默认并没有针对实体用户来进行『限制』的,所以他可以针对整个文件系统进行任何他所具有权限的工作。
      • 限制用户能力: chroot 与 /sbin/nologin 等
    • 访客身份(Guest)
      • 访客身份的限制
      • 上传下载档案数目与磁盘容量限制,联机时间,可用指令。
      • 如chmod等就不要允许使用
    • 匿名登录使用者(anonymous)
      • 几乎不要给指令
      • 限制文件传输的数量,尽量不给上传数据的权限
      • 限制匿名者同时登录的最大联机数量。
  • 相关阅读:
    欧拉回路 定理
    UESTC 1087 【二分查找】
    POJ 3159 【朴素的差分约束】
    ZOJ 1232 【灵活运用FLOYD】 【图DP】
    POJ 3013 【需要一点点思维...】【乘法分配率】
    POJ 2502 【思维是朴素的最短路 卡输入和建图】
    POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
    POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】
    POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
    js 实现slider封装
  • 原文地址:https://www.cnblogs.com/csguo/p/7250720.html
Copyright © 2011-2022 走看看