吐槽先:在Ubuntu上搭建TFTP服务器,网上搜到一堆资料,可惜基本都是部分能用,至于哪些部分能用还要自己摸索着试出来,郁闷之情仅次于找不到任何资料……
--------------------------------------------正文开始--------------------------------------------
TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场 合。TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。它传输8位数据,传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
在嵌入式Linux开发中,TFTP协议在很多场合都被用到,甚至是必不可少的,特别是在内核调试阶段,在U-Boot下通过TFTP协议从服务器上加载内核并运行,既方便又快捷。
一般的Linux发行版默认都没有安装TFTP服务以及TFTP服务器。TFTP服务依赖于网络守护进程服务程序,可选择安装inetd或者升级版的xinetd, 然后安装tftp和tftp-server,接着修改或者创建/etc/xinetd.d/tftp配置文件,最后重启xinetd,启动TFTP服务。 无论采用什么发行版,TFTP服务器的安装都是这样的流程,只不过不同发行版的安装命令不同而已。
1、查看系统信息
我用的系统是Ubuntu 12.04.5 LTS。
zlf@ubuntu:~$ cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=12.04DISTRIB_CODENAME=preciseDISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS"
2、安装软件
安装xinetd:
zlf@ubuntu:~$ sudo apt-get install xinetd
安装tftpd-hpa和tftp-hpa:
zlf@ubuntu:~$ sudo apt-get install tftpd-hpa tftp-hpa
tftpd-hpa是服务器端,tftp-hpa是客户端。tftpd-hpa和tftp-hpa是tftpd和tftp的增强版本。
3、修改配置文件
建立/etc/xinetd.d/tftp文件,写入如下内容:
service tftp{ socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/zlf/tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4}
其中server_args设置的/home/zlf/tftpboot/目录是tftp服务器的目录,设置其访问权限为777:
zlf@ubuntu:~$ mkdir -pv /home/zlf/tftpbootzlf@ubuntu:~$ chmod 777 /home/zlf/tftpboot
修改/etc/default/tftpd-hpa文件:
zlf@ubuntu:~$ sudo vi /etc/default/tftpd-hpa
将文件从
1 # /etc/default/tftpd-hpa 2 3 TFTP_USERNAME="tftp" 4 TFTP_DIRECTORY="/var/lib/tftpboot" 5 TFTP_ADDRESS="0.0.0.0:69" 6 TFTP_OPTIONS="--secure"
修改为:
1 # /etc/default/tftpd-hpa 2 3 TFTP_USERNAME="zlf" 4 TFTP_DIRECTORY="/home/zlf/tftpboot" 5 TFTP_ADDRESS="127.0.0.1:69" 6 TFTP_OPTIONS="-s -c"
TFTP的OPTIONS可以通过man tftpd查看。
4、启动服务
软件安装后已自动启动,此时将服务重启:
zlf@ubuntu:~$ sudo service xinetd restart zlf@ubuntu:~$ sudo service tftpd-hpa restart
5、本机测试
在/home/zlf目录下创建文件puttest,在/home/zlf/tftpboot目录下创建文件gettest。
echo "tftp put test" >> /home/zlf/puttest echo "tftp get test" >> /home/zlf/tftpboot/gettest
在/home/zlf目录下运行tftp。
zlf@ubuntu:~$ cdzlf@ubuntu:~$ tftp localhosttftp> get gettest #获取gettest文件 tftp> put puttest #上传puttest文件tftp> q #退出tftp
用ls命令查看,在/home/zlf目录下可以看到下载的gettest文件,在/home/zlf/tftpboot目录下可以看到上传的puttest文件。
TFTP服务器搭建完成。
参考文献: