FTP基础知识

什么是FTP

FTP :文件传输协议。该协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的标准。FTP运行在OSI模型的应用层,并利用TCP在不同的主机之间提供可靠的数据传输。TCP是一种面向连接的、可靠的传输协议。在实际传输中,FTP靠TCP来保证数据传输的正确性,并在发生错误的情况下,对错误进行相应的修正。FTP支持断点续传。

FTP服务器

FTP服务是Internet上最早应用于主机之间进行数据传输的基本服务之一。FTP服务的实现不依赖与平台,即UNIX、Mac、Linux、Windows等操作系统中都可以实现FTP的客户端和服务器。
尽管现在已经普遍采用HTTP方式传送文件,但FTP仍然是跨平台直接传送文件的主要方式

FTP的工作原理

FTP协议是一个客户机/服务器系统。用户通过一个支持FTP的客户机程序,连接到远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行结果返回给客户机。
图片说明
一个FTP会话通常包含5个软件元素:
用户接口(UI)

  • 客户端协议解释器(CPI)
  • 服务端协议解释器(SPI)
  • 客户端数据传输协议(CDTP)
  • 服务端数据传输协议(SDTP)

FTP 会话中,会存在两个独立的TCP连接,一个是CPI和SPI使用的,被称为控制连接;另一个是由CDTP和SDTP使用的,称为数据连接。
控制连接:由客户端发起,并不传输数据,只用来传送在实际通信过程中需要执行的FTP命令以及命令的相应。

  • FTP服务器监听端口号TCP: 21来等待控制连接建立请求。
  • 建立连接后,服务器通过一定方式验证客户身份,来决定
  • 是否可以建立数据传输。
  • 服务器通过自己的TCP:20来发出数据

图片说明

FTP的数据传输模式

图片说明

  • 主动模式
    FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1指令。服务器接收到指令后,会用其本地的FTP数据端口(默认是20)来连接客户端指定的端口N+1,进行数据传输。
    主动模式下,FTP数据连接和控制连接的方向是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。客户端的连接端口是由服务器端和客户端通过协商确定的。
  • 被动模式
    FTP客户端随机开启一个大于1024的端口N向服务器的21端口发起连接,同时会开启N+1端口。然后向服务器发送PASV指令,通知服务器自己处于被动模式。服务器收到指令后,会开放一个大于1024的端口P进行监听,然后PORT P指令通知客户端自己的数据端口是P。客户端收到命令后,会通过N+1端口连接服务器的端口P,然后传输数据。
    被动模式下,FTP的数据连接和控制连接的方向是一致的。

FTP的用户类型

  • ①本地用户(Real用户):如果用户在远程FTP服务器上拥有Shell登录账号,则称此用户为本地用户。本地用户可以通过输入自己的账号和口令来进行授权登录。当授权访问的本地用户登录系统后,其登录目录为用户自己的家目录($HOME),本地用户既可以下载又可以上传。
  • ②虚拟用户(Guest用户):如果用户在远程FTP服务器上拥有账号,且此账号只能用于文件传输服务,则称此用户为虚拟用户或Guest用户。虚拟用户可以通过输入自己的账号和口令来进行授权登录。当授权访问的虚拟用户登录系统后,其登录目录是vsftpd为其指定的目录,虚拟用户既可以下载又可以上传。
  • ③匿名用户(Anonymous用户):在登录FTP服务器时并不需要特别的密码就能访问服务器。当匿名用户登录系统后,其登录目录为匿名FTP服务器的根目录(/var/ftp),匿名用户只能下载,不能上传。

centos下的FTP服务器软件vsftpd

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

vsftpd服务的配置文件

vsftpd作为一个主打安全的FTP服务器,有很多的选项设置。vsftpd的配置文件:

/etc/vsftpd/vsftpd.conf      #主配置文件。
/etc/vsftpd/ftpusers         #该文件用来指定哪些用户不能访问FTP服务器。
/etc/vsftpd/user_list        #该文件用来指定用户是否被允许访问FTP服务器。

vsftpd的数据目录

/var/ftp/       #匿名用户主目录。
/var/ftp/pub    #匿名用户下载目录。

vsftpd主配置文件/etc/vsftpd/vsftpd.conf

图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明

FTP命令

图片说明

访问FTP服务器的方法

图片说明
图片说明

项目实施

安装FTP服务

图片说明
图片说明

FTP配置流程

图片说明

配置匿名用户

主文件 /etc/vsftpd/vsftpd.cof 里有些设置不能瞎写,配置好后重新启动,注意关闭防火墙

systemctl stop firewall.service

访问服务器

输入客户机IP地址 #ftp 192.168.0.102 

图片说明
IE浏览器就可以访问了
图片说明

配置本地用户

//首先关闭防火墙(这个很坑,不然windiws连不上服务器)
#systemctl stop firewall.service
//不关防火墙也可以,点开防火墙程序在服务里ftp选项打勾
//
//登录的时候不能登录,注释掉 /etc/pam.d/vsftpd 文件的 auth 两行即可
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
auth       include  password-auth
account    include  password-auth
session    required     pam_loginuid.so
session    include  password-auth

//登录了服务器发现打不开文件夹
#vim /etc/selinux/config
修改 SELINUX=disabled
  • 创建用户和组
    //创建一个组用于放 ftp用户
    #groupadd ftpgroups
    //设置目录权限为o+w
    #chmod o+w /home/ftp/files
    //创建用户名
    #useradd –d /home/ftp/files –g ftpgroups  qp
    #passwd qp
    //设置不允许用户登录系统
    #usermod –s /sbin/nologin  用户
  • 配置主文件 /etc/vsftpd/vsftpd.conf
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    user_config_dir=/etc/vsftpd/userconfig
    在/etc/vsftpd/目录下创建chroot_list文件,并将qp用户的用户名加入该文件.
  • 测试
    图片说明
    图片说明

图片说明

图片说明