什么是TFTP?
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种基于UDP协议的轻量级文件传输服务,默认使用69号端口。与FTP相比,TFTP没有复杂的认证机制和目录浏览功能,非常适合在局域网内进行快速、简单的文件传输。
TFTP的典型应用场景包括:
- 网络设备固件升级:路由器、交换机等网络设备通过TFTP加载固件镜像
- PXE批量部署:无盘工作站通过网络启动时从TFTP服务器下载启动文件
- 嵌入式开发:开发板通过TFTP加载内核镜像和文件系统
- 配置文件备份与恢复:网络设备定期备份运行配置到TFTP服务器
一、安装TFTP服务软件
Ubuntu/Debian系统
在Ubuntu或Debian系统中,推荐使用atftpd或tftpd-hpa:
# 方式一:安装atftpd
sudo apt-get update
sudo apt-get install atftpd
# 方式二:安装tftpd-hpa(更常用)
sudo apt-get install tftpd-hpa
CentOS/RHEL系统
在CentOS或RHEL系统中,可通过yum安装:
sudo yum install tftp-server
安装TFTP客户端(用于测试)
# Ubuntu/Debian
sudo apt-get install tftp-hpa
# CentOS/RHEL
sudo yum install tftp
二、配置TFTP服务
tftpd-hpa 配置方式
安装tftpd-hpa后,主配置文件位于/etc/default/tftpd-hpa,编辑该文件:
sudo nano /etc/default/tftpd-hpa
典型配置如下:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| TFTP_USERNAME | 运行服务的用户 | tftp |
| TFTP_DIRECTORY | TFTP根目录 | /var/lib/tftpboot |
| TFTP_ADDRESS | 监听地址与端口 | 0.0.0.0:69 |
| TFTP_OPTIONS | 额外选项 | –secure –create |
完整配置示例:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
注意:
--create选项允许客户端上传新文件,--secure选项将客户端限制在TFTP根目录内。
atftpd 配置方式
atftpd的配置文件通常位于/etc/default/atftpd:
OPTIONS="--daemon --port 69 --tftptimeout 5 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/tftp"
创建TFTP根目录并设置权限
# 创建目录
sudo mkdir -p /var/lib/tftpboot
# 修改所有者
sudo chown -R tftp:tftp /var/lib/tftpboot
# 设置权限(允许读写)
sudo chmod -R 777 /var/lib/tftpboot
三、启动与管理TFTP服务
使用systemd管理(推荐)
# 启动服务
sudo systemctl start tftpd-hpa
# 设置开机自启
sudo systemctl enable tftpd-hpa
# 查看服务状态
sudo systemctl status tftpd-hpa
# 重启服务(修改配置后)
sudo systemctl restart tftpd-hpa
使用xinetd管理(旧版本)
部分旧版系统使用xinetd管理TFTP服务,需编辑/etc/xinetd.d/tftp:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = tftp
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
修改后重启xinetd:
sudo systemctl restart xinetd
四、配置防火墙规则
TFTP使用UDP 69端口,需要确保防火墙放行该端口。
iptables方式
sudo iptables -I INPUT -p udp --dport 69 -j ACCEPT
# 保存规则
sudo iptables-save | sudo tee /etc/iptables/rules.v4
firewalld方式(CentOS 7+)
sudo firewall-cmd --permanent --add-service=tftp
sudo firewall-cmd --reload
ufw方式(Ubuntu)
sudo ufw allow 69/udp
五、测试TFTP服务
本地测试
先在TFTP根目录创建一个测试文件:
echo "Hello TFTP Test" | sudo tee /var/lib/tftpboot/test.txt
从客户端连接测试
# 连接TFTP服务器
tftp 192.168.1.100
# 下载文件
tftp> get test.txt
Received 17 bytes in 0.0 seconds
# 上传文件
tftp> put myfile.txt
Sent 1024 bytes in 0.1 seconds
# 退出
tftp> quit
常见问题排查
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 连接超时 | 防火墙未放行 | 检查UDP 69端口是否开放 |
| 权限拒绝 | 目录权限不足 | 检查目录所有者和权限设置 |
| 文件不存在 | 路径配置错误 | 确认TFTP_DIRECTORY指向正确目录 |
| 上传失败 | 未启用–create选项 | 在TFTP_OPTIONS中添加–create |
| 服务未响应 | 服务未启动 | 执行systemctl status检查 |
六、安全加固建议
TFTP协议本身不提供加密和认证,在生产环境中需注意以下安全措施:
- 限制访问范围:通过防火墙规则仅允许可信IP访问
- 禁用上传功能:如仅需下载,移除
--create选项 - 使用chroot:确保
--secure选项启用,防止目录遍历 - 定期审计:检查TFTP目录中的文件,清理不再需要的文件
- 内网专用:TFTP仅在内网使用,不要暴露到公网
总结
搭建TFTP服务器的核心步骤为:安装服务软件 → 修改配置文件 → 创建共享目录并设置权限 → 启动服务 → 配置防火墙 → 测试验证。整个过程不需要复杂的配置,几分钟即可完成。对于需要批量部署或固件升级的场景,TFTP仍然是最简单高效的选择之一。