在Ubuntu系统中搭建TFTP(Trivial File Transfer Protocol)服务器是一个相对简单的过程,TFTP是一种轻量级的文件传输协议,常用于网络设备(如路由器、交换机、嵌入式设备等)的固件升级或配置文件传输,与FTP相比,TFTP无需复杂的用户认证,使用UDP端口69进行通信,因此在安全性要求不高的内部网络环境中非常实用,本文将详细介绍在Ubuntu上搭建TFTP服务器的完整步骤,包括安装、配置、测试以及常见问题的解决方法。

我们需要更新系统包列表并安装TFTP服务器软件,在Ubuntu中,常用的TFTP服务器软件是tftpd-hpa,它是一个轻量级的TFTP服务器实现,支持IPv6和多种传输模式,打开终端,执行以下命令更新软件包列表:
sudo apt update
更新完成后,安装tftpd-hpa和tftp-hpa(后者是TFTP客户端工具,用于测试服务器是否正常工作):
sudo apt install tftpd-hpa tftp-hpa
安装过程中,系统可能会提示配置tftpd-hpa服务,通常保持默认选项即可,安装完成后,我们需要修改TFTP服务器的配置文件,以指定工作目录、权限等参数,配置文件位于/etc/default/tftpd-hpa,使用以下命令打开该文件:
sudo nano /etc/default/tftpd-hpa
在配置文件中,找到TFTP_OPTIONS和RUN_DAEMON等参数,确保以下内容正确配置:

TFTP_OPTIONS="--secure --create"
RUN_DAEMON="yes"
TFTP_DIRECTORY="/srv/tftp"
这里,--secure选项表示TFTP服务器将只允许读取TFTP_DIRECTORY目录下的文件,并且不允许上传文件(除非明确配置);--create选项允许客户端上传文件(如果目录权限允许);TFTP_DIRECTORY指定了TFTP服务器的根目录,默认为/srv/tftp,如果该目录不存在,需要手动创建:
sudo mkdir -p /srv/tftp
sudo chmod -R 777 /srv/tftp
创建目录后,设置适当的权限,注意,TFTP服务器通常以nobody或tftp用户身份运行,因此需要确保该用户对/srv/tftp目录有读写权限。chmod 777是一种宽松的权限设置,仅适用于测试环境,生产环境中应根据需求设置更严格的权限。
配置完成后,保存并关闭文件,然后重启TFTP服务器以应用更改:
sudo systemctl restart tftpd-hpa
为了确保TFTP服务器在系统启动时自动运行,可以启用其开机自启动:

sudo systemctl enable tftpd-hpa
验证TFTP服务器是否正常运行,使用tftp-hpa客户端工具进行测试,假设我们要测试上传和下载文件,在/srv/tftp目录中创建一个测试文件,例如test.txt:
echo "Hello, TFTP!" | sudo tee /srv/tftp/test.txt
使用tftp命令连接到本地服务器(IP地址为0.0.1)并下载该文件:
tftp 127.0.0.1
进入tftp命令行模式后,执行以下命令:
get test.txt
quit
检查当前用户的主目录下是否下载了test.txt是否正确,如果下载成功,说明TFTP服务器的基本功能正常,接下来测试上传功能,在/srv/tftp目录中创建一个新文件upload.txt为“Upload test”,然后尝试从客户端上传该文件:
tftp 127.0.0.1
put upload.txt
quit
检查/srv/tftp目录中是否存在upload.txt文件,如果存在且内容正确,说明上传功能也正常,如果遇到权限问题,可能需要调整/srv/tftp目录的权限或修改tftpd-hpa的配置。
如果需要在局域网中访问TFTP服务器,还需要确保防火墙允许UDP 69端口的通信,在Ubuntu中,默认使用ufw防火墙,可以通过以下命令开放端口:
sudo ufw allow 69/udp
如果使用的是其他防火墙(如iptables),需要添加相应的规则,如果服务器有多个网络接口,可能需要配置TFTP服务器监听特定的IP地址,这可以通过修改tftpd-hpa的启动参数实现,例如在TFTP_OPTIONS中添加--address=0.0.0.0:69以监听所有接口。
以下是TFTP服务器配置参数的简要说明表格:
| 参数 | 说明 | 示例 |
|---|---|---|
--secure |
限制文件访问范围为TFTP_DIRECTORY目录 |
--secure |
--create |
允许客户端上传文件 | --create |
--address=IP:PORT |
指定服务器监听的IP地址和端口 | --address=192.168.1.100:69 |
--verbose |
显示详细的日志信息 | --verbose |
在配置和使用过程中,可能会遇到一些常见问题,如果客户端无法连接到TFTP服务器,首先检查服务器是否正在运行(sudo systemctl status tftpd-hpa),然后确认防火墙设置和网络连接,如果出现“权限被拒绝”的错误,通常是/srv/tftp目录的权限不正确,需要确保tftp用户对该目录有适当的读写权限,TFTP服务器默认不允许递归传输目录,如果需要传输整个目录,需要先将目录打包成单个文件。
在Ubuntu上搭建TFTP服务器主要涉及安装软件包、配置服务参数、设置目录权限以及测试功能,通过以上步骤,可以快速搭建一个功能完善的TFTP服务器,满足网络设备文件传输的需求,在实际应用中,应根据具体的安全需求和网络环境调整配置,例如限制访问IP、启用日志记录等,以确保服务器的稳定性和安全性。
相关问答FAQs:
-
问:TFTP服务器无法连接,提示“Connection refused”怎么办?
答: 首先检查TFTP服务是否运行(执行sudo systemctl status tftpd-hpa),如果未运行,尝试重启服务,其次确认防火墙是否允许UDP 69端口,执行sudo ufw allow 69/udp开放端口,检查/etc/default/tftpd-hpa中的TFTP_OPTIONS配置是否正确,特别是--address参数是否与服务器IP匹配。 -
问:如何限制TFTP服务器的访问IP,只允许特定客户端连接?
答: 可以通过修改/etc/default/tftpd-hpa中的TFTP_OPTIONS参数,添加--address=服务器IP:69限制监听地址,但这种方法仅能限制服务器的监听接口,更严格的IP访问控制需要结合防火墙规则实现,例如使用ufw添加允许规则:sudo ufw allow from 客户端IP to any port 69 proto udp,并拒绝其他所有UDP 69端口的连接:sudo ufw deny 69/udp。
