TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一个轻量级的文件传输协议,常用于网络设备的固件升级、配置文件备份或启动(PXE 网络安装),要使用它,您需要在一台服务器上安装并运行 TFTP 服务。

我将分三步为您解答:
- 如何检查 TFTP 服务器是否已开启
- 如何开启 TFTP 服务器(以 Linux 系统为例)
- 如何验证 TFTP 服务器是否正常工作
第一步:如何检查 TFTP 服务器是否已开启
您可以通过以下几种方法来检查系统上是否正在运行 TFTP 服务。
使用 ps 和 netstat 命令(推荐)
这是最直接的方法,可以同时检查进程是否运行和端口是否监听。
-
检查 TFTP 进程是否在运行: TFTP 服务通常由一个名为
tftpd或tftpd-hpa的进程提供服务。-e参数可以显示完整的命令行。
(图片来源网络,侵删)ps -ef | grep tftpd
如果看到类似下面的输出,说明 TFTP 服务进程正在运行:
root 1234 1 0 10:00 ? 00:00:00 /usr/sbin/in.tftpd --listen --user tftp --address :69 -s /var/lib/tftpbootin.tftpd是 TFTP 的守护进程。69是 TFTP 协议默认使用的 UDP 端口。
-
检查 69 端口是否正在监听: TFTP 服务默认在 UDP 端口 69 上监听,使用
netstat或ss命令可以查看。# 使用 netstat (较老但常用) netstat -ulnp | grep 69 # 使用 ss (推荐,更现代) ss -ulnp | grep 69
如果看到类似下面的输出,说明端口正在被监听:
udp UNCONN 0 0 0.0.0.0:69 0.0.0.0:* users:(("in.tftpd",pid=1234,fd=4))udp表示是 UDP 协议。0.0.0:69表示在所有网络接口上监听 69 端口。
使用系统服务管理工具(systemctl)
在现代的 Linux 发行版(如 Ubuntu 16+, CentOS 7+, Debian 8+)中,TFTP 服务通常被封装成一个系统服务。

-
检查服务状态:
# 对于 Ubuntu/Debian (使用 tftpd-hpa) systemctl status tftpd-hpa # 对于 CentOS/RHEL (使用 tftp-server) systemctl status tftp
如果服务正在运行,输出中会显示
active (running)。 如果服务已安装但未运行,输出会显示inactive (dead)。 -
列出所有已启用的服务(查找 TFTP 相关服务):
systemctl list-unit-files | grep tftp
这会显示类似
tftp.service enabled或tftpd-hpa.service disabled的信息,enabled表示开机自启,disabled表示不会开机自启。
第二步:如何开启 TFTP 服务器
如果检查后发现 TFTP 服务未开启,您可以按照以下步骤进行安装和配置,这里以最常用的 Ubuntu/Debian 和 CentOS/RHEL 为例。
场景 A:在 Ubuntu/Debian 系统上
-
安装 TFTP 服务器软件包:
tftpd-hpa是 Ubuntu/Debian 上最流行的 TFTP 服务器实现。sudo apt update sudo apt install tftpd-hpa
-
配置 TFTP 服务器: 安装后,主配置文件位于
/etc/default/tftpd-hpa,您需要编辑这个文件来指定 TFTP 的根目录和运行参数。sudo nano /etc/default/tftpd-hpa
修改或确保文件内容如下,将
/home/tftp改为您想作为文件共享的目录(如果该目录不存在,请先创建它):# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/tftp" <!-- 这是存放要传输文件的根目录 --> TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure --create"
TFTP_DIRECTORY: 非常重要,这是客户端可以访问的根目录,客户端无法访问此目录之外的任何文件。TFTP_OPTIONS:--secure: 限制在TFTP_DIRECTORY目录内,防止目录遍历攻击。--create: 允许客户端上传文件到服务器,如果只需要下载,可以不加此选项。
-
创建 TFTP 根目录并设置权限: TFTP 服务器通常以
tftp用户身份运行,因此需要确保该用户对根目录有读写权限。# 创建目录 sudo mkdir -p /home/tftp # 设置目录所有者为 tftp 用户 sudo chown -R tftp:tftp /home/tftp # 设置目录权限为 777 (最简单,但注意安全风险) 或 755 # 如果需要上传,客户端需要写权限,777 最方便 sudo chmod -R 777 /home/tftp
-
启动并启用 TFTP 服务:
# 启动服务 sudo systemctl start tftpd-hpa # 设置开机自启 sudo systemctl enable tftpd-hpa
场景 B:在 CentOS/RHEL 系统上
-
安装 TFTP 服务器软件包:
tftp-server是 CentOS/RHEL 上的标准包。sudo yum install tftp-server # 或者使用 dnf (CentOS 8+) # sudo dnf install tftp-server
-
配置 TFTP 服务器: 配置文件是
/etc/xinetd.d/tftp。xinetd是一个超级服务器,TFTP 服务由它管理。sudo nano /etc/xinetd.d/tftp
找到
server_args这一行,并确保它指向您想作为根目录的路径,/var/lib/tftpboot。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 }server_args = -s /var/lib/tftpboot:-s选项指定了 TFTP 的根目录。
-
创建 TFTP 根目录并设置权限:
# 创建目录 (如果不存在) sudo mkdir -p /var/lib/tftpboot # 设置权限 sudo chmod -R 777 /var/lib/tftpboot
-
启动并启用服务: 在 CentOS/RHEL 上,需要启用
xinetd服务,因为它负责管理 TFTP。# 启动 xinetd 服务 sudo systemctl start xinetd # 设置开机自启 sudo systemctl enable xinetd # 如果系统有防火墙 (firewalld),需要开放 69 端口 sudo firewall-cmd --permanent --add-port=69/udp sudo firewall-cmd --reload
第三步:如何验证 TFTP 服务器是否正常工作
完成配置后,最好的验证方式就是实际进行一次文件传输。
-
在服务器上准备一个测试文件: 在您配置的 TFTP 根目录(
/home/tftp或/var/lib/tftpboot)里创建一个文件。echo "Hello, TFTP Server!" | sudo tee /home/tftp/test.txt
-
在客户端(可以是同一台服务器)进行测试: 使用
tftp命令行客户端进行下载和上传测试。- 下载文件到本地:
tftp -
- 下载文件到本地:
