阅读(3384) (6)

11.3 TFTP简单文件传输协议

2019-05-09 12:31:11 更新

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务(可将其当作FTP协议的简化版本)。

TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性方面也弱于FTP服务。而且,由于TFTP在传输文件时采用的是UDP协议,占用的端口号为69,因此文件的传输过程也不像FTP协议那样可靠。但是,因为TFTP不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高。

接下来在系统上安装TFTP的软件包,进行体验。

    [root@linuxprobe ~]# yum install tftp-server tftp
    Loaded plugins: langpacks, product-id, subscription-manager
    ………………省略部分输出信息………………
    Installing:
     tftp x86_64 5.2-11.el7 rhel 35 k
     tftp-server x86_64 5.2-11.el7 rhel 44 k
    Installing for dependencies:
     xinetd x86_64 2:2.3.15-12.el7 rhel 128 k
    Transaction Summary
    ================================================================================
    Install 2 Packages (+1 Dependent package)
    Total download size: 207 k
    Installed size: 373 k
    Is this ok [y/d/N]: y
    Downloading packages:
    ………………省略部分输出信息………………
    Installed:
     tftp.x86_64 0:5.2-11.el7 tftp-server.x86_64 0:5.2-11.el7 
    Dependency Installed:
     xinetd.x86_64 2:2.3.15-12.el7 
    Complete!

在RHEL 7系统中,TFTP服务是使用xinetd服务程序来管理的。xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。简单来说,在安装TFTP软件包后,还需要在xinetd服务程序中将其开启,把默认的禁用(disable)参数修改为no:

    [root@linuxprobe ~]# vim /etc/xinetd.d/tftp
    service tftp
    {
            socket_type             = dgram
            protocol                = udp
            wait                    = yes
            user                    = root
            server                  = /usr/sbin/in.tftpd
            server_args             = -s /var/lib/tftpboot
            disable                 = no
            per_source              = 11
            cps                     = 100 2
            flags                   = IPv4
    }

然后,重启xinetd服务并将它添加到系统的开机启动项中,以确保TFTP服务在系统重启后依然处于运行状态。考虑到有些系统的防火墙默认没有允许UDP协议的69端口,因此需要手动将该端口号加入到防火墙的允许策略中:

    [root@linuxprobe ~]# systemctl restart xinetd
    [root@linuxprobe ~]# systemctl enable xinetd
    [root@linuxprobe ~]# firewall-cmd --permanent --add-port=69/udp
    success
    [root@linuxprobe ~]# firewall-cmd --reload 
    success

TFTP的根目录为/var/lib/tftpboot。我们可以使用刚安装好的tftp命令尝试访问其中的文件,亲身体验TFTP服务的文件传输过程。在使用tftp命令访问文件时,可能会用到表11-5中的参数。

表11-5 tftp命令中可用的参数以及作用

参数 作用
? 帮助信息
put 上传文件
get 下载文件
verbose 显示详细的处理信息
status 显示当前的状态信息
binary 使用二进制进行传输
ascii 使用ASCII码进行传输
timeout 设置重传的超时时间
quit 退出
    [root@linuxprobe ~]# echo "i love linux" > /var/lib/tftpboot/readme.txt
    [root@linuxprobe ~]# tftp 192.168.10.10
    tftp> get readme.txt
    tftp> quit
    [root@linuxprobe ~]# ls
    anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures readme.txt Videos
    Desktop Downloads Music Public Templates
    [root@linuxprobe ~]# cat readme.txt 
    i love linux

当然,TFTP服务的玩法还不止于此,第19章会将TFTP服务与其他软件相搭配,组合出一套完整的自动化部署系统方案。大家继续加油!