最近在讲解Ubuntu 10.10相关的基础课程的时候,课堂上给同学们讲过了tftp相关的配置,虽然相关的配置很简单的几步就可以实现tftp服务的配置,但是同学在下课做实验的过程中遇到了很多问题,因此,在网上仔细找了一下原因,现把tftp配置过程及相关的配置及容易出现的错误总结一下。
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。它基于UDP协议而实现。
在我们的使用过程中,我们的TFTP服务是利用xinetd进程起动的,所以下面先看一下xinetd的介绍:xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。
一般来说,我们如果启动tftp服务,只要做如下的配置就可以了:
1、编辑/etc/xinetd.d/tftp文件,本文件为xinetd对tftp服务支持的配置文件,一般来说这个文件会有如下所示的内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
一般来说,在这个配置文件中,我们要注意的就是对tftp服务器共享目录的设置,也就是server_args=-s /tftpboot这一行,我们可以看到这行有个参数-s,那么对这个配置还有几个相关的参数,现介绍一下:
-l 使用standalone模式运行,此模式下,将会忽略-t选项
-a address:port 在standalone模式下服务所在的IP与端口,如果不指定,则在本机所有IP,/etc/service中指定的port上侦听连接
-c 允许在服务器上新建文件,否则只允许更新现有的文件。如果未指定-U或-p选项,则允许任何人上传文件
-s directory 服务器端默认的目录,默认为/var/lib/tftpdboot
-u username tftp服务以什么身份运行,默认是nobody,一般可以新建一个tftp的账号来运行
-U umask 上传文件的掩码,如果未指定-p则为000,如果指定了-p,则采用指定的umask
-p 对于通过-u指定的用户执行的动作,不做额外的权限检查
2、创建共享目录
按照上一步中配置的目录,创建tftp服务共享目录步骤如下:
cd /
sudo mkdir tftpboot
sudo chmod –R 777 tftpboot
cd /tftpboot
sudo touch test
chmod 777 test
在本步骤中,创建了一个tftpboot的目录,并在目录下创建了一个名为test的文件用来测试,把他们的权限均改为777以备使用。
3、启动tftp服务
我们的tftp服务此时是利用xinetd进程起动的,故启动命令如下:
sudo /etc/init.d/xinetd restart
4、测试tftp服务
可以 利用ifconfig eth0查看本机IP地址后利用tftp连接至本机的tftp服务器,但是如果想在本机上测试可以利用127.0.0.1地址来测试以上步骤是否成功:
tftp 127.0.0.1
tftp>get test
Received 1018 bytes in 0.1 seconds
tftp>quit
此时如果在当前目录下发现test文件,则tftp服务已经正确运行。
但是,在保证以上步骤没有误操作的情况下,有些同学虽然配置运行都没有问题了,到最后获取文件的时候会出现问题,主要会出现以下两个提示:(下面是我在网上找到的解决办法)
1:如果出现permission denied 错误 则是操作者权限不够,需要提升权限
su root
输入密码后就可以正常进行tftp传输操作了
2:如果出现Access violation错误 则是文件权限没有解开,
将要操作的文件操作权限全解开就可以了
chmod 777 文件名
第一个错误一般来说按照上面的办法都可以修正,但是第二个错误按照以上方法修改后如果还是出现的话,可以看看下面的这个文件/etc/inetd.conf,然后在其中找到这样的一行:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
要把最后一个参数改成我们自己设置的tftp共享目录就可以了,即:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot