1.我之前安装的tftp tftpd ,不好用,后来看到有人说tftp不好用,换装tftp-hpa,这个是最新的,所以在Ubuntu的终端输入了一下指令
sudo apt-get install tftp-hpa tftpd-hpa //前者是客户端,后者是服务程序
另外tftp服务依赖于网络守护进程服务程序,所以还需安装 xinetd
sudo apt-get install xinetd
2.配置相关服务文件
进入根目录下的etc文件夹(cd /etc/),首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话查看内容,看是否与下面的一致,若不一致则修改,内容如下:
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success ont-size: 12pt; "> # log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d
3.配置tftp 服务器
命令:
sudo vim /etc/default/tftpd-hpa
将内容修改成
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/hananbo/tftp"
#这是你tftp服务器的工作目录,就是你存储要上传到tftp服务器上的文件夹路径,自行修改,注意,在新建工作目录时,最好修改其权限为777,命令sudo chmod 777 /tftpboot
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s" //标红的地方需注意
4.进入xinetd.d文件夹(cd xinetd.d),查看是否有一个tftp文件,如果没有就新建一个(sudo gedit /etc/xinetd.d/tftp )如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}
其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的,-c是允许上传的参数设置
5.修改所用文件的权限
需要修改的文件夹也就是上一步提到的那个服务器文件存放的文件夹,以我的配置文件为例,创建一个文件夹(sudo mkdir /tftpboot),然后把它可以设置成访问权限最宽松的(sudo chmod 777 /tftpboot),也可以设置成合适的权限。
6.重新启动服务。sudo service tftpd-hpa restart,这也是我经常疏忽的一步,当配置好tftp的配置文件后,需要重新启动一下xinetd,在终端中输入 sudo /etc/init.d/xinetd reload,重新加载一下进程,再输入 sudo /etc/init.d/xinetd restart,重启服务。记住,每次修改完配置文件后,都需要重新启动一下服务。
执行次序:
sudo service tftpd-hpa restart
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
7.本地测试
注意本地测试 sudo tftp localhost 可能不好用,传过来的文件没有字符
所以我用了 tftp 127.0.0.1
get ** 下载文件
put ** 上传文件
q 退出
如果想要对其他电脑或者开发板进行tftp传输,则在终端输入 sudo tftp xxx(即目标电脑或目标开发板的ip地址),而且还要关闭ubuntu自带的防火墙(书上说的),我是直接把防火墙给卸载了(sudo apt-get remove iptables),因为我觉得对于Linux来说,防火墙可能没什么需要把,至少目前为止我还没有受到过攻击。。。当然,想要与其他局域网内的电脑或开发板互联进行传输,还要将这些机器的ip改到同一个段内。好了,通过以上的步骤,就可以通过tftp协议,在电脑和开发板之间进行文件传输了,目前的目的就是下载Linux内核和文件系统到开发板。如果有朋友发现了我的不足,都可以给我提出来,我们也可以进行讨论。不过还要强调一点,我的这些配置都是针对于ubuntu的,对于其他的系统可能会有所出入的。
8 补充
sudo vi /etc/xinetd.d/tftp 打开tftp 文件
输入i,由comanda mode 进入编辑模式,若输入有误需修改时,直接用delete 键就可以。这时自动从编辑模式进入comonde mode.所以在删除完后需要重新输入i
输入a,从当前字符的下一个位置开始输入
输入o,从当前行上插入一行,从该行的第一个字符开始输入
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
其次,我们还可以用gedit指令
sudo gedit /etc/xinetd.d/tftp
删除root权限的文件夹或者文件的指令
sudo rm -rf /etc/xinetd.d/tftp
查看该文件夹下都用那些文件用ll
sudo ll /etc/
查看tftp是否启动的指令
netstat -a|grep tftp
udp 0 0 *:tftp *:*
已经启动了
安装过程中出现的问题及原因
现象一:
tftp> get test.log
Transfer timed out.
原因:
tftpd服务没有启动
现象二
tftp> put test2
Error code 0: Permission denied
原因:
运行命令,查看系统日志
#tail /var/log/messages
发现有如下一段文字:
Mar 24 19:05:26 localhost setroubleshoot: SELinux is preventing /usr/sbin/in.tftpd (tftpd_t) "write" to tftpboot (tftpdir_t). For complete SELinux messages. run sealert -l 40a5a6bf-8ded-4bfa-ab6e-fa669a25fc6c
知道这是是由SELinux造成的,在FC3和FC3以后的FC版本中SELinux默认的都是开启的,现关掉它,修改文件 /etc/sysconfig/selinux,设定其中的
SELINUX=disabled
然后重启电脑即可
或者执行命令 system-config-securitylevel 打开 “安全级别配置”对话框,将SELinux(S)选项中 “强制” 改为“允许”。
现象三:
tftp> put ex070416.log
Error code 1: File not found
原因:
指定的文件不存在;或tftpd启动参数中没有指定-c选项,允许上传文件
现象四:
tftp> get test.log
Error code 2: Only absolute filenames allowed
原因:
在/etc/xinetd.d/tftpd中设置的server_args为/etc/default/tftpd-hpa
cat /etc/default/tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="no"
OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"
设置的时候只要将server_args=改为你自己设定的服务器文件夹就行了