FTP协议和服务
FTP(File Transfer Protocol),是一种从一个主机向另一个主机传送文件的协议。
FTP是双端口服务器
FTP协议使用两个并行的TCP连接来传送文件,一个是控制连接,一个是数据连接。
- 控制连接,用于在客户端和服务器之间传送控制信息,例如用户名,密码,改变目录上传或下载文件的命令。端口为21.
- 数据连接,用户收发数据的连接。端口为20.
FTP协议的工作模式
FTP协议的工作模式分为主动模式和被动模式,二者的主要区别在于对数据端口的处理方式不同:主动模式在客户端连接后,告诉服务器数据连接的端口;被动模式在客户端连接后,进行数据传输的时候临时连接FTP服务器的20端口,利用此端口进行数据的传输。
FTP协议的传输方式
FTP协议有两种传输方式:ASCII传输模式和二进制数据传输模式,二者的区别在于对传输数据是否进行了解释。
ASCII传输方式
当文件传输是FTP通常会自动地调整文件的内容便于把文件解释成另外那台计算机存储文本文件的格式。但是如果是二进制程序,则需要同二进制传输模式,用binary命令告诉FTP逐字复制。
二进制传输模式
在二进制传输中, 数据中保存文件的位序,这样原始的数据和复制的数据是逐位一一对应的
Linux下开启ftp服务
安装vsftpd服务
sudo apt-get install vsftpd // 安装ftp服务
systemctl start vsftpd.service // 启动ftp服务
systemctl status vsftpd.service // 查看服务状态
/etc/vsftpd.conf配置文件介绍
listen=[YES|NO] // 是否以独立运行的方式监听服务
listen_ipv6=[YES|NO] // 是否运行允许监听IPv6套接字
anonymous_enable=[YES|NO] // 是否允许匿名用户访问
local_enable=[YES|NO] // 是否允许本地用户登录 FTP
write_enable=[YES|NO] // 是否允许对目录或文件可写
local_umask=022 // 本地用户上传文件的 umask 值
anon_upload_enable=[YES|NO] // 是否允许匿名用户上传文件
anon_mkdir_write_enable=[YES|NO] // 是否允许匿名用户创建目录
dirmessage_enable=[YES|NO] // 是否激活目录消息,当远程用户进入某个目录时是否给他们的消息
use_localtime=[YES|NO] // 是否显示显示带有本地时区时间的目录清单
download_enable=[YES|NO] // 是否允许下载文件
xferlog_enable=[YES|NO] // 激活上传/下载日志记录
connect_from_port_20=[YES|NO] // 是否确保端口传输连接来自端口20 (ftp-data)。
// 是否使上传的匿名文件由不同的用户拥有
chown_uploads=[YES|NO]
chown_username=whoever
xferlog_file=/var/log/vsftpd.log // 日志文件的位置,默认为/var/log/vsftpd.log
xferlog_std_format=[YES|NO] // 是否将将日志文件设置为标准ftpd xferlog格式
idle_session_timeout=600 // 设置空闲会话超时的时间
data_connection_timeout=120 // 设置数据连接超时的时间
nopriv_user=ftpsecure // 系统上定义一个唯一的用户,ftp服务器可以使用该用户作为完全隔离和无特权的用户
ascii_upload_enable=[YES|NO] // 是否允许以ASCII模式上传文件
ascii_download_enable=[YES|NO] // 是否允许以ASCII模式下载文件
ftpd_banner=Welcome to blah FTP service. // 定义登录横幅标语
chroot_local_user=[YES|NO] // 是否将用户权限禁锢在 FTP 目录,以确保安全
// 设置用户列表为“允许”还是“禁止”操作
userlist_enable=[YES|NO]
userlist_deny=[YES|NO]
listen_address=IP 地址 // 设置要监听的 IP 地址
listen_port=21 // 设置 FTP 服务的监听端口
max_clients=0 // 最大客户端连接数,0 为不限制
max_per_ip=0 // 同一 IP 地址的最大连接数,0 为不限制
anon_umask=022 // 匿名用户上传文件的 umask 值
anon_root=/var/ftp // 匿名用户的 FTP 根目录
anon_other_write_enable=[YES|NO] // 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0 // 匿名用户的最大传输速率(字节/秒),0 为不限制
local_root=/var/ftp // 本地用户的 FTP 根目录
local_max_rate=0 // 本地用户最大传输速率(字节/秒),0 为不限制
utf8_filesystem=[YES|NO] // 是否使用utf8格式文件系统
ftp命令
Linux ftp命令设置文件系统相关功能。
参数
参数 | 含义 |
---|---|
-d | 详细显示指令执行过程,便于排错或分析程序执行的情形 |
-i | 关闭互动模式,不询问任何问题 |
-g | 关闭本地主机文件名称支持特殊字符的扩充特性。 |
-n | 不使用自动登录 |
-v | 显示指令执行过程 |
实例
ftp 192.168.220.138 // 连接IP地址为192.168.220.138的服务器
客户端命令
命令 | 含义 |
---|---|
! | 执行本地命令 |
? | 显示FTP命令的说明 |
append | 向远程服务器追加本地文件 |
ascii | 设置文件传输类型为ASCII,默认类型 |
bell | 每一个传输命令完成触发一次响铃(默认关闭) |
binary | 设置文件传输类型为binary(二进制传输) |
bye | 结束FTP会话并退出 |
cd | 改变远程工作目录 |
close | 结束FTP会话并返回命令行 |
debug | 关闭调试(默认关闭) |
delete | 删除远程单个文件 |
dir | 显示服务器目录和文件列表 |
disconnect | 从远程断开,重新获得FTP提示框 |
ls | 显示服务器目录和文件列表 |
cd | 进入服务器指定的目录 |
lcd | 进入本地客户端指定的目录 |
get | 复制单个远程文件到本地 |
glob | 开关文件名通配符(默认NO) |
hash | 为每个缓冲区传输切换打印“#”(哈希标记打印),默认关闭 |
help | 显示FTP命令的说明 |
mdelete | 删除远程一个或多个文件 |
mdir | 列出多个远程目录的内容 |
mget | 复制一个或多个远程文件至本地 |
mkdir | 创建一个远程目录 |
mls | 列出多个远程目录的内容 |
mput | 复制一个或多个本地文件到远程 |
open | 连接到指定的FTP服务器 |
prompt | 开关交互提示(默认为ON) |
put | 复制一个本地文件到远程 |
pwd | 显示远程当前工作目录 |
quit | 结束FTP会话并退出FTP |
recv | 复制远程文件到本地 |
rename | 重命名远程文件 |
rmdir | 删除远程目录 |
send | 复制一个本地文件到远程 |
status | 显示当前FTP连接状态 |
trace | 开关数据包追踪(默认为OFF) |
type | 设置文件传输类型(默认为ASCII) |
user | 发送新用户信息 |
verbose | 开关详细模式 |