下面我将为您提供两种最常见 TFTP 服务器软件的安装和配置方法:tftpd-hpa (推荐) 和 atftpd。

使用 tftpd-hpa (推荐)
tftpd-hpa 是一个功能完善、稳定且广泛使用的 TFTP 服务器实现,是大多数情况下的首选。
安装 TFTP 服务器
打开终端,使用 apt 包管理器进行安装:
sudo apt update sudo apt install tftpd-hpa
安装过程中,系统可能会弹出一个配置界面,询问您如何配置 tftpd-hpa,通常选择默认的“独立”模式即可,然后点击“确定”。
配置 TFTP 服务器
安装完成后,我们需要编辑其配置文件 /etc/default/tftpd-hpa。

sudo nano /etc/default/tftpd-hpa
可能如下所示,我们需要修改或确保 TFTP_OPTIONS 和 TFTP_DIRECTORY 这两项配置正确。
# /etc/default/tftpd-hpa # 服务器的运行方式,默认是独立运行。 # 可以是 inetd, standalone, 或 wait RUN_DAEMON="yes" # 当 RUN_DAEMON="yes" 时,此选项用于定义服务启动参数 # --create: 允许客户端创建新文件 # --secure: 将 chroot 到指定目录,增强安全性 # --verbosity 7: 设置详细日志级别,方便排查问题 TFTP_OPTIONS="--secure --create --verbosity 7" # TFTP 服务器存放文件的根目录 # 默认是 /srv/tftp TFTP_DIRECTORY="/srv/tftp" # 运行 TFTP 服务器的用户和用户组 # 默认是 tftp:tftp TFTP_USERNAME="tftp" TFTP_USERNAME="tftp" # 服务器的 IP 地址,留空则监听所有网络接口 # TFTP_ADDRESS=":69"
关键配置项解释:
TFTP_DIRECTORY: 这是 TFTP 服务器共享文件的根目录,客户端连接后,只能访问这个目录及其子目录,我们将使用/srv/tftp。TFTP_OPTIONS:--secure: 非常重要,此选项会启用chroot环境,将 TFTP 服务器限制在TFTP_DIRECTORY目录中,这大大提高了安全性。--create: 允许客户端向服务器上传文件,如果只需要下载,可以不加此选项。--port-range: 可以指定端口范围,以符合某些防火墙策略。
配置步骤:
-
创建 TFTP 根目录并设置正确的权限:
(图片来源网络,侵删)# 创建目录 sudo mkdir -p /srv/tftp # 设置目录所有者为 tftp 用户,并赋予读写执行权限 sudo chown -R tftp:tftp /srv/tftp # 设置目录权限为 777 (最宽松,确保可读写) # 在生产环境中,应根据需求设置更严格的权限 sudo chmod -R 777 /srv/tftp
-
保存并关闭配置文件 (在
nano中按Ctrl+X,然后按Y,最后按Enter)。
启动并启用服务
配置完成后,重启 tftpd-hpa 服务以应用新配置,并设置为开机自启。
# 重启服务 sudo systemctl restart tftpd-hpa # 设置开机自启 sudo systemctl enable tftpd-hpa # 检查服务状态,确保运行正常 sudo systemctl status tftpd-hpa
如果看到绿色的 active (running) 字样,说明服务已成功启动。
防火墙配置 (如果需要)
如果您的系统启用了 UFW 防火墙,需要允许 TFTP 通信 (使用 UDP 端口 69)。
sudo ufw allow tftp
测试 TFTP 服务器
让我们测试一下服务器是否正常工作。
步骤 A: 在服务器上准备一个测试文件
# 在 TFTP 根目录下创建一个名为 test.txt 的文件 echo "Hello from TFTP Server" | sudo tee /srv/tftp/test.txt
步骤 B: 从另一台 Linux/Ubuntu 机器测试 (需要安装 tftp-hpa 客户端)
如果您在另一台机器上测试,先安装客户端:
sudo apt install tftp-hpa
步骤 C: 执行测试
回到您的 TFTP 服务器 本身,执行以下命令进行测试:
-
下载测试
# 从服务器下载 test.txt 文件到当前目录 tftp 127.0.0.1 -c get /test.txt
0.0.1是本地回环地址,表示从本机下载。-c get是执行get命令(下载)。- 如果成功,当前目录下会出现一个
test.txt文件。
-
上传测试
# 上传刚刚下载的 test.txt 文件回服务器,重命名为 upload.txt tftp 127.0.0.1 -c put test.txt /upload.txt
-c put是执行put命令(上传)。- 如果成功,
/srv/tftp目录下会出现一个upload.txt文件。
检查 /srv/tftp 目录,如果文件都存在,说明您的 TFTP 服务器已经配置成功!
ls -l /srv/tftp
使用 atftpd
atftpd 是另一个流行的 TFTP 服务器实现,它支持多线程,性能可能更好。
安装
sudo apt update sudo apt install atftpd
配置
atftpd 的配置通常通过命令行参数或修改 /etc/default/atftpd 来完成。
sudo nano /etc/default/atftpd
修改或添加以下内容:
# /etc/default/atftpd # 运行选项 # --port: 指定端口 # --tftpd: 指定 tftpd 程序路径 # --daemon: 以守护进程模式运行 # --no-fork: 不 fork,方便调试 # --create: 允许创建文件 # --ipv4: 仅使用 IPv4 # --verbose: 详细输出 OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --maxthread 100 --no-fork --ipv4 --verbose --create --daemon --port 69" # TFTP 根目录 # 注意:atftpd 的配置项名是 USE_INETD 和 SERVER_OPTIONS # USE_INETD=no,则 SERVER_OPTIONS 中的第一个路径被视为根目录 SERVER_OPTIONS="--no-fork --port 69 --create /srv/tftp" # 是否由 inetd/xinetd 管理 USE_INETD="no"
配置步骤:
-
创建 TFTP 根目录并设置权限:
sudo mkdir -p /srv/tftp sudo chown -R nobody:nogroup /srv/tftp sudo chmod -R 777 /srv/tftp
注意:
atftpd默认使用nobody用户,与tftpd-hpa不同。 -
保存并关闭文件。
启动并启用服务
sudo systemctl restart atftpd sudo systemctl enable atftpd sudo systemctl status atftpd
测试
测试方法与 tftpd-hpa 完全相同,只需确保测试文件在 /srv/tftp 目录下即可。
故障排查
如果遇到问题,可以按照以下步骤排查:
-
检查服务状态:
sudo systemctl status tftpd-hpa # 或 atftpd
查看是否有错误信息。
-
检查端口是否监听:
sudo netstat -ulnp | grep 69 # 或者使用 ss sudo ss -ulnp | grep 69
确保能看到 TFTP 服务在监听 UDP 69 端口。
-
检查日志文件:
- 对于
tftpd-hpa,日志通常直接输出到系统日志,可以使用journalctl查看:sudo journalctl -u tftpd-hpa -f
- 对于
atftpd,如果配置了--verbose,日志也会输出到系统日志。
- 对于
-
检查文件和目录权限: 这是最常见的问题,确保 TFTP 根目录 (
/srv/tftp) 和其内部文件的权限和所有者设置正确,特别是当使用--secure(chroot) 时,目录本身必须可执行 (x权限)。sudo ls -ld /srv/tftp sudo ls -l /srv/tftp
-
检查防火墙: 确保防火墙没有阻止 UDP 69 端口的流量。
希望这份详细的指南能帮助您成功在 Ubuntu 上搭建 TFTP 服务器!
