File Transfer Protocol, FTP(RFC 959) 是 TCP/IP 协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
简介
FTP 会话包含控制通道和数据通道:
- 控制通道。由客户端发起,与服务端的 21 端口进行通讯,用来发送 FTP 指令等。
- 数据通道。文件传输的通道,主动模式使用 20 端口,被动模式使用其它端口。
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 默认是主动链接,链接过程如下。
- 建立命令通道,客户端与 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: 关闭与服务器的连接。