简单文件传输协议(TFTP)是标准FTP的轻量级替代方案,专为联网设备间的简单文件交换而设计。相比FTP和HTTP,它结构简单,无需复杂的客户端-服务器模型即可工作。因此,它常被用于执行基础的文件传输任务,例如将配置文件或固件更新推送到路由器、交换机等网络设备。TFTP使用UDP作为其传输层,这使得它在速度上可能更快,但牺牲了一定的可靠性。
TFTP协议仅支持一些基本命令,包括读取(RRQ)、写入(WRQ)和确认(ACK)。它缺少许多高级功能,例如目录列表、用户身份验证以及精细的文件权限管理。
TFTP的常见应用场景
- 网络启动和固件升级:为无盘工作站提供启动文件,或为嵌入式设备更新固件。
- 网络管理:在网络管理系统中传输日志文件、监控数据或设备配置文件。
- 嵌入式系统:适用于资源受限的嵌入式设备环境。
- 隔离网络:在受控或隔离的网络环境内部进行文件传输。
TFTP的主要限制
- 功能单一:不支持目录列表和用户身份验证。
- 缺乏安全性:传输不加密,且没有身份验证机制。
- 网络依赖性强:在不稳定的网络环境下可靠性较差。
- 效率问题:采用固定的512字节数据块大小,不适合传输大文件。
准备工作
在开始之前,请确保你已具备以下条件:
- 一台运行Ubuntu 24.04的系统(早期版本如20.04、22.04也可参考本指南)。
- 一个拥有sudo权限的用户账户。
- 稳定的互联网连接,用于下载必要的软件包。
第 1 步:更新Ubuntu系统包列表
首先,打开终端,执行以下APT命令来更新本地软件包列表并升级已安装的软件包到最新版本。这是保证系统环境健康的好习惯。
sudo apt update && sudo apt upgrade
第 2 步:安装TFTP服务器与客户端
接下来,我们将直接从Ubuntu 24.04的官方仓库安装TFTP服务器软件包 tftpd-hpa 和客户端软件包 tftp-hpa。
sudo apt install tftpd-hpa tftp-hpa
执行上述命令后,你将看到类似下方的安装过程输出:

第 3 步:创建文件存储目录并设置权限
我们需要为TFTP服务器创建一个专用的目录,用于存放可供上传或下载的文件。通常,这个目录被设定为 /var/lib/tftpboot。
-
创建目录:
sudo mkdir -p /var/lib/tftpboot
-
设置所有权和权限:为了确保TFTP服务进程能够读写该目录,我们将其所有者设为 nobody:nogroup 并赋予宽松的权限。请注意,在生产环境中应根据安全需求调整权限。
sudo chown -R nobody:nogroup /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
至此,任何你希望通过TFTP服务器共享的文件,都应放置在 /var/lib/tftpboot 目录下。
第 4 步:配置TFTP服务器
安装完成后,我们需要编辑TFTP服务器的配置文件以进行必要的设置。
-
使用文本编辑器打开配置文件:
sudo nano /etc/default/tftpd-hpa
-
修改配置文件内容:将文件内容修改或替换为如下配置。关键的配置项包括指定运行用户、服务目录、监听地址和运行选项。
TFTP_DIRECTORY:指向我们刚刚创建的目录。
TFTP_ADDRESS:设置为 0.0.0.0:69 表示监听所有网络接口的69端口(TFTP默认端口)。
TFTP_OPTIONS:-l -c -s 是常用选项组合,其中 -l 表示以独立模式运行(通过systemd管理时可省略),-c 允许创建新文件,-s 将根目录切换到指定目录。
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
-
保存并退出:在nano编辑器中,按下 Ctrl+X,然后输入 Y 并按 Enter 确认保存。

第 5 步:重启并启用TFTP服务
为了让新的配置生效,我们需要重启TFTP服务。同时,可以将其设置为开机自动启动。
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa
第 6 步:测试TFTP文件上传与下载
现在,TFTP服务器应该已经运行起来了。我们可以使用TFTP客户端来进行连接和文件传输测试。
-
连接TFTP服务器:假设你的Ubuntu服务器IP地址是 192.168.1.15,在另一台已安装TFTP客户端的机器上(或本机),使用以下命令连接:
tftp 192.168.1.15
连接成功后,你会进入 tftp> 提示符。
-
启用详细模式(可选):在 tftp> 提示符下输入 verbose 可以开启详细输出模式,方便查看命令执行详情。
-
下载文件:使用 get 命令从服务器下载文件。例如,下载服务器上 /var/lib/tftpboot/ 目录下的 test.php 文件:
get test.php
-
上传文件:使用 put 命令将本地文件上传到服务器。例如,上传本地的 demo.php 文件:
put demo.php
-
退出客户端:完成操作后,输入 quit 退出TFTP客户端。

总结
在Ubuntu 24.04上安装和配置TFTP服务器是一个相对直接的过程。正如我们所见,它非常适合那些需要轻量级、无需认证的文件传输场景,尤其是在运维网络设备配置或为PXE网络启动提供引导文件时。不过,务必牢记其安全局限性,建议仅在受控的内网环境中使用。如果你在配置过程中遇到问题,或者想探讨更多网络或系统管理相关的话题,欢迎到云栈社区与大家交流分享经验。
|