如何在 Linux 上设置 TFTP 服务器

TFTP(普通文件传输协议)于 1980 年首次被描述。它是一个相当古老的协议,于 1981 年 6 月由 Karen R. Sollins 在 RFC 783(征求意见)中作为 TFTP 协议修订版 2 发布。

早期,TFTP 的主要目标是通过网络发送和接收文件。 特别是,它用于传输引导期间所需的文件,以使系统能够通过网络引导。

下面介绍如何在 Linux 机器上设置 TFTP 服务器。

什么是 TFTP?

TFTP 仍然用于文件传输目的,它支持的功能没有根本变化。 TFTP 用于通过 UDP/IP 下载和发送文件。 它没有其他文件传输协议中常见的身份和授权控制、文件列表、删除或重命名等附加功能。

与在传输层使用 TCP 的高级文件传输协议不同,它工作在 UDP 协议上,不具有检查属于文件的数据包是否会发送到另一端等功能。 由于这个限制,它更适合在局域网中使用,而不是在互联网或广域网中使用。

尽管上面列出了所有这些看似不利的特性,但 TFTP 协议非常强大的一个方面是它的简单性。 与其替代方案相比,该协议的实现非常容易,即使对于没有操作系统的环境也是如此。 由于这个特性,它在嵌入式系统中有广泛的使用领域。

在 Linux 上安装 TFTP 服务器

使用嵌入式设备时,安装 TFTP 服务器服务很重要。 在 Linux 系统上,可以运行多个 TFTP 服务器实现。 如果您使用的是基于 Debian 的发行版,则可以安装 tftpd-hpa, tftpd, 或者 atftpd 包。 如果您不确定选择哪一个,请考虑安装 tftpd-hpa 软件包。

sudo apt-get install tftpd-hpa

安装后,TFTP 服务将开始侦听 UDP 端口 69。要通过 TFTP 服务器将文件提供给其他系统,您需要记住一些先决条件:

  • 将所需文件复制到 TFTP 主目录或该主目录下的目录
  • 使文件权限对公众可见

要找出 TFTP 服务器主目录是什么,您可以查看 TFTP_DIRECTORY 中的变量 /etc/default/tftpd-hpa 文件。 通常,您会看到如下目录 /var/lib/tftpboot 或者 /srv/tftp. 如果需要,您可以更改此目录并重新启动服务。

cat /etc/default/tftpd-hpa

为了便于使用,如果您将相关 TFTP 主目录的所有者更改为您的用户帐户,则无需添加 sudo 您运行的每个命令的前缀。 使用 chown 命令将所有权从 root 更改为当前用户:

sudo chown -R $USER /srv/tftp

TFTP 服务器包名称和默认主目录可能因使用的 Linux 发行版而异。

使用 TFTP 服务器发送文件

有时在某些情况下,TFTP 是将文件从嵌入式 Linux 系统移动到外部环境的唯一选择。 例如,有时系统可能不支持任何可用于传输文件的可写媒体。

在这种情况下,由于 TFTP 客户端可能会在 忙箱,您可以将保存在系统中的文件发送到网络上的 TFTP 服务器。

要使用 TFTP 客户端应用程序,请发出 忙箱 tftp 命令:

busybox tftp                                                                                

要将示例文件发送到 TFTP 服务器,您需要使用如下命令:

busybox tftp -l example.bin -p 192.168.1.100

虽然上面的命令是正确的,但在将文件传输到 TFTP 服务器时会出错。 由于返回的错误消息不是不言自明的,因此很难理解真正的问题是什么。

这里的问题是因为 TFTP 服务器上的一些安全程序。 TFTP 要求具有相同名称的文件应位于将写入文件的目录中,作为文件上传的先决条件,并且该文件的写入权限应可供所有人使用。

换言之,无法通过 TFTP 客户端上传 TFTP 服务器上不存在的文件。 如果您创建一个同名的空文件并编辑其访问权限,则上述上传过程将成功。 为此,您必须在相关的 TFTP 服务器主目录中运行以下命令:

cd /srv/tftp 
touch example.bin
chmod 666 example.bin

现在您可以成功执行上传了。

也可以禁用上述安全措施并让 TFTP 服务器创建一个不存在的文件。 为此,您可以使用 -C 或者 – 创造 启动时的参数 tftpd-hpa 应用。 将此参数添加到现有的 TFTPD_OPTIONS 中的变量 /etc/default/tftpd-hpa 文件:

# /etc/default/tftpd-hpa 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"

为什么使用 TFTP 服务器进行文件传输?

TFTP 最重要的优点是速度快,并且可以帮助您节省时间。 它是将网络设备的配置文件传输到其他系统的理想选择。 此外,它具有非常简单的使用标准。 它可以与基于 Windows 和 Linux 的操作系统上的软件一起轻松运行。 最后,在技术上无法使用 FTP 的情况下,TFTP 总是可以挽救局面。

当然,最大的缺点是不安全。 因此,使用 TFTP 服务器传输文件时必须非常小心。

除了文件传输之外,您不能使用 TFTP 服务器执行文件删除、编辑和修改等功能。 对于那些使用或寻求高级系统的人来说,此功能是一个主要缺点。 最后,它不需要身份验证,如果您认真对待自己的安全性,这是一个主要缺点。

在其他操作系统上设置 TFTP

如果要在 Windows 上使用 TFTP,则无需安装任何第三方软件。 您可以使用控制面板中的打开或关闭 Windows 功能选项启用 TFTP。