FTP 服务简介

2015-04-29 linux language

File Transfer Protocol, FTP(RFC 959) 是 TCP/IP 协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

ftp logo

简介

FTP 会话包含控制通道和数据通道:

  • 控制通道。由客户端发起,与服务端的 21 端口进行通讯,用来发送 FTP 指令等。
  • 数据通道。文件传输的通道,主动模式使用 20 端口,被动模式使用其它端口。

ftp logo

FTP 服务器登录通常有三种不同的身份,分别是: 1) 实体账号 real user;2) 访客 guest;3) 匿名用户 anonymous。

通常实体帐号拥有较多权限,而匿名用户通常只有上传下载功能。

在 Linux 中使用比较多的是 vsftp 服务器,其全称为 Very Secure FTP ,如下的配置就是针对 vsftp 。

安装使用

可以通过如下步骤安装 FTP 服务器。

----- 安装服务器以及客户端
# yum install vsftpd ftp

----- 启动服务器
# systemctl start vsftpd

----- 使用客户端
$ ftp hostname
ftp> open 127.1            # 打开链接,需要用户登陆
ftp> user name [password]  # 登陆
ftp> pwd                   # 查看当前目录,一般默认是$HOME
ftp> ls                    # 查看目录以及文件
ftp> cd /some/dir          # 切换目录
ftp> lcd /some/dir         # 切换本地目录
ftp> get /some/file        # 下载文件
ftp> mget *.txt            # 同时下载多个文件

ftp> put file              # 上传文件
ftp> mput *.txt

也可以使用 anonymous 以及空密码登陆。

Anonymous

修改 /etc/vsftpd/vsftpd.conf 配置文件。

#----- 允许匿名访问,且不需要密码
anonymous_enable=YES
no_anon_password=YES
#----- 匿名用户的根目录路径
anon_root=/opt/repos
#----- 禁止匿名用户创建目录
anon_mkdir_write_enable=NO
#----- 禁止匿名用户删除或重命名文件、文件夹
anon_other_write_enable=NO

链接模式

FTP 在建立链接时需要两个通道,分别为命令通道和数据通道,命令通道通常为 21 号端口,数据通道通常为 22 号端口。FTP 在建立链接时分为主动和被动链接,注意所谓主动被动是在建立数据通道时对于服务器而言。

主动模式

ftp connect active

FTP 默认是主动链接,链接过程如下。

  1. 建立命令通道,客户端与 FTP 服务器端的 port 21 通过三次握手链接,建立链接后客户端便可以通过这个通道来对 FTP 服务器下达指令,例如包括查询文件名、下载、上传等。

配置文件

常见的配置文件如下:

  • /etc/vsftpd/vsftpd.conf,主要配置文件,可以通过 man 5 vsftpd.conf 查看详细配置。
  • /etc/pam.d/vsftpd,使用 PAM 模组时的相关配置文件。

配置文件

也就是配置文件 /etc/vsftpd/vsftpd.conf 中的内容。

listen=NO                             # 不以StandAlone方式启动
write_enable=YES                      # 允许用户上传文件
anonymous_enable=YES                  # 是否允许匿名(anonymous/ftp)登陆,默认密码为空
anon_upload_enable=YES                # 允许匿名用户上传文件
dirmessage_enable=YES                 # 切换目录时显示目录
ftpd_banner=Welcome to FTP service.   # 显示登陆欢迎信息

所谓的 StandAlone 模式,就是该服务拥有自己的守护进程支持,可以看到该进程存在;否则是由超级守护进程负责代理,老版本采用的是 Xinetd 负责,新版本则采用 systemd 。

常用命令

FTP 每个命令都有 3 到 4 个字母组成,命令后面跟参数,用空格分开,每个命令都以 \r\n 结束,这里以下载文件为例,简单介绍其使用的流程。

要下载或上传一个文件,首先要登入 FTP 服务器,然后发送命令,最后退出,这个过程中使用到的命令如下:

USER 指定用户名,通常是控制连接后第一个发出的命令。
PASS 指定用户密码,该命令紧跟 USER 命令后。
SIZE 从服务器上返回指定文件的大小,。“SIZE file.txt\r\n”:如果 file.txt 文件存在,则返回该文件的大小。
CWD: 改变工作目录。如:“CWD dirname\r\n”。
PASV: 让服务器在数据端口监听,进入被动模式。如:“PASV\r\n”。
PORT: 告诉 FTP 服务器客户端监听的端口号,让 FTP 服务器采用主动模式连接客户端。如:“PORT h1,h2,h3,h4,p1,p2”。
RETR: 下载文件。“RETR file.txt \r\n”:下载文件 file.txt。
STOR: 上传文件。“STOR file.txt\r\n”:上传文件 file.txt。
REST: 该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其它要求文件传输的 FTP 命令。“REST 100\r\n”:重新指定文件传送的偏移量为 100 字节。
QUIT: 关闭与服务器的连接。