在 Ubuntu 安装配置 TFTP 服务
安装 TFTP 服务
在 Ubuntu 中执行以下命令安装 TFTP 服务:
sudo apt-get install tftp-hpa tftpd-hpa
运行结果如下:
这个结果的意思是我们的系统中已经有TFTP服务了,并且已经是最新版本了,所以不用安装了。
创建 TFTP 服务器工作目录
然后创建 TFTP 服务器工作目录(假如已经存在也可以删除了再重新建一个以保证用户属性和本篇博文中是一致的):
/home/book/tftpboot
工作目录权限设置
把这个目录的权限调整一下,运行下面的命令进行调整:
sudo chmod 777 /home/book/tftpboot
执行完后的权限情况如下图所示:
修改配置文件
用gedit打开文件tftpd-hpa
:
sudo gedit /etc/default/tftpd-hpa
把文件内容整个改成下面这些内容:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/book/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c --secure"
配置解释:
TFTP_USERNAME="tftp"
:指定 TFTP 服务运行的用户(通常是tftp
或nobody
)。TFTP_DIRECTORY="/home/book/tftpboot"
:指定 TFTP 服务的根目录为/home/book/tftpboot
,即要下载到客户端的文件或客户端要上传到文件放在这个目录中。TFTP_ADDRESS=":69"
:指定 TFTP 服务监听的地址和端口,这里是监听所有可用的网络接口(:
也可写为0.0.0.0
或::
)和端口 69。TFTP_OPTIONS="-l -c --secure"
:-l
:表示TFTP服务器将以“监听模式(listen mode)”运行。在这种模式下,TFTP服务器会监听来自客户端的请求,而不是主动发起连接。这个选项常用于服务启动后使其保持活跃状态,准备接收传入的 TFTP 请求。-c
:允许客户端通过 TFTP 服务上传文件。--secure
:启用安全模式,限制文件只能在指定的TFTP_DIRECTORY
目录及其子目录内访问,防止客户端通过路径遍历(如 …/)访问根目录之外的文件。
修改好之后保存。
重启 TFTP 服务
sudo service tftpd-hpa restart
查看 tftp 服务是否运行正常
sudo systemctl status tftpd-hpa
如果是上面的结果说明运行正常。
测试从Ubuntu上下载文件到开发板
现在我要下载Ubuntu的TFTP的根目录/home/book/tftp_roots
中的文件suwenhao02.txt
到开发板的目录/myfiles
中,
那么像下面这样操作:
先运行下面的命令对文件suwenhao02.txt
的权限进行修改:
注意:这一步非常重要,如果没有这一步,那么后面在开发板上执行下载命令时会提示tftp: server error: (0) Permission denied
的错误。
chmod 644 /home/book/tftpboot/suwenhao02.txt
注意:如果这里提示chmod: changing permissions of '/home/book/tftpboot/suwenhao02.txt': Operation not permitted
,那么就在命令前面加上sudo
,即运行下面的命令:
sudo chmod 644 /home/book/tftpboot/suwenhao02.txt
在开发板上进入新建目录/myfiles
:
mkdir myfiles
进入目录/myfiles
cd /myfiles
然后运行下面的命令即可把根目录/home/book/tftp_roots
中的文件suwenhao02.txt
传到开发板的目录/myfiles
:
tftp -g -r suwenhao02.txt 192.168.5.11
参数-g的意思
参数 -g代表get,表示获取,意思是指示TFTP客户端从服务器下载文件。
参数-r的意思(不是递归的意思)
-r
参数在很多命令中表示递归(如cp
或rsync
等命令),但在 tftp
命令中,-r
参数并不代表递归。在 tftp
命令中,-r
实际上是用来指定要下载或上传的文件名。与递归无关。
上面这条命令运行结果如下:
可见,suwenhao02.txt 这个文件被下载到开发板中的目录 /myfiles
中了,我们可以看下它的内容:
vi suwenhao02.txt
可见,内容也没有问题。
测试从开发板上传文件到Ubuntu的TFTP目录
运行下面的命令新建名为aaa.txt的文件,并写入内容I'm in a good mood today.
vi aaa.txt
然后运行下面这条命令将文件aaa.txt上传到Ubuntu的TFTP目录 /home/book/tftpboot
中:
tftp -p -r aaa.txt 192.168.5.11
参数-p的意思
参数-p代表上传文件到TFTP服务器,它来自于单词put。
运行后我们查看Ubuntu的TFTP目录 /home/book/tftpboot
,发现有了aaa.txt
文件。
内容也没有问题,如下图所示: