作为Linux世界的Beginner,我立志要成为Hacker级别的Master-hand!:)不会整服务器肯定是不行的,但是Linux下有那么多的,多到数不清楚的服务器,选择哪个下手呢!当然从最简单的开始,虽然我不怎么懂Linux,但是什么东东简单,什么东东复杂还是有一定认识的,不然这几年在某国内知名公司就白混了......:)个人觉得TFTP这个东西最简单,什么用户、口令、权限等等都没有,实际应用也还比较多,因此就拿他开刀了!!
TFTP(Trivial File Transfer Protocol)简单文件传输协议,采用UDP协议进行文件传输,使用端口号69。相比FTP,协议简单,配置方便。尤其在无盘系统,和网络维护中应用广泛。
我的安装环境是一台 Ubuntu 7.10 Desktop @ Virtual PC 2007 虚拟机,就是前几天我刚刚装上的,就是默认安装,连中文包都没装,也没有上网更新过。以下是我的安装记录:
1) 启动虚拟机,进入图形界面后,Applications>Accessiories>Termial,敲“sudo dpkg –s *tftp*”,这条命令可以查看带有tftp字段的相关包有没有安装,刚安装完的Ubuntu啥东西都没得,结果当然是“not intalled”。
2) 好在咱有网络呀,上官方网站搜一把。最后我在
http://packages.ubuntu.com/gutsy/net上找到一个叫“atftpd”的tftp服务器安装包,版本0.7,同时还下载了客户端的安装包,叫“atftp”,呵呵就比服务器名字少一个d。然后WindowsXP下打开WinISO软件,新建一个名为Share.iso的空白光盘映像文件,并添加刚刚下载的安装包到share.iso,接着VPC上“CD>Capture”选择刚刚创建的share.iso。这时Ubuntu自动打开光盘映像,然后使用cp命令copy安装包到Ubuntu的虚拟硬盘里。(有人可能会问,为什么不直接Ubuntu上网Download多方便呀?哎,一言难尽呀!我乃穷人,为了省钱,装了小区的宽带,该宽带系统使用了万恶的Dr.com认证客户端,不能共享上网,令我十分郁闷。等我有一天终于成为了宗师级的Hacker,看我不回来收拾你小样......哼!:)
3) Ubuntu下右键选中copy过来的安装包,然后选择“Open with “GDebi Package Installer”,接着马上弹出了一个对话框告诉我“Error:Dependency is not satisfiable:inet-superserver”,很明显少了inet-superserver这个Package!回到官网找inet-superserver,就在atftpd的下载页面下就有依赖关系提示,但是inet-superserver是个“虚包”,他还链接另外4个安装包:inetutils-inetd_1.5.dfsg.1-4_i386.deb、rlinetd_0.6.1-3_i386.deb、openbsd-inetd_0.20050402-6_i386.deb、xinetd_2.3.14-1ubuntu1_i386.deb,都不大,我当时就晕了,是全部要装还是只装一个就行了?不管他全部下载了,copy到虚拟机,了不起我一个一个试呗!咱穷人没钱但是有时间!:)
4) 我先选择了rlinetd_0.6.1-3_i386.deb这个包进行安装,同样是右键点击,然后选“Package Installer”,这次比较好,直接就告诉我:“All dependencies are satisfied”,然后“Install Package”,输入密码,安装开始,一小会就完了,窗口提示“Installation finished”。接下来我没有继续安装其他3个包,而是直接安装Atftpd,结果依赖关系满足,安装成功。看来那四个包任意装一个就可以了,呵呵,我猜的哈!:)采用同样方法安装atftp客户端。
5) 以上都搞完了,安装就结束了,剩下就是配置了,其实tftp根本没什么配置,就设置一个目录就行,默认的目录都是“/tftpboot”。建目录很简单嘛,打开终端敲“sudo mkdir /tftpboot”;“sudo chmod 777 /tftpboot”;“sudo chown –R nobody:nogroup /tftpboot”。
6) 使用“sudo lsof –i:69”,该命令查看当前69端口被哪些进程占用,我看到之前安装的rlinetd_0.6.1-3_i386.deb有两个进程在侦听UDP/69端口,用户是root,其中一个进程的Type是“IPv6”,另外一个是“IPv4”;奇怪!Atftpd进程怎么没有看到,是不是装的有问题呀!?不管他,先找个tftp client试一试!
7) 在“/home/user/”目录和“/tftpboot”下分别建立了两个文本文件home.txt和tftp.txt;我用类似“ls -l > home.txt”这样的方法给文档里面写进了内容。然后在“/home/user/”目录下,执行atftp命令:“atftp –g –r tftp.txt 192.168.1.217”;“atftp –p –l home.txt 192.168.1.217”。执行完成后没有任何提示,应该是成功了,赶快more一下,发现两个目录的文件都一样,成功了!TFTP服务器和客户端都在正常工作了,呵呵!开心呀!Atftp 的参数是这样的:-g表示Get,就是去服务器取文件;-p则是Put,就是像服务器上传文件;-r 表示后面的tftp.txt是远端服务器上的文件;-l表示本地目录要上传的文件;最后的IP就是服务器的IP。
8) 同一台机器运行的客户端和服务器能够通信正常没什么奇怪,服务器原本就应该对外提供服务,因此还需要用WindowsXP下的tftp客户端试一试才能确认服务器是否工作正常。WindowsXP下的tftp客户端程序是tftp.exe,直接打开Cmd窗口就能运行,命令行是这样的“tftp -i 192.168.1.217 get home.txt”,运行的结果让我比较郁闷,系统返回“Error on server : Illegal TFTP operation”。这说明服务器端有问题!后来我发现这又是那个“万恶”的Dr.Com在搞鬼,在Windows里面退出以后,在试tftp就成功了!系统返回“Transfer successful: 27894 bytes in 1 second, 27894 bytes/s”。要上传则只要把get换成put就可以了!:)
通过以上的安装步骤,我们可以看出,Tftp确实比较简单,我真是太有才了:),同时我又是一个诚实的人,我向大家坦白,我从早上10点开始整这玩意,到把这篇攻略写完已经晚上11点多了!主要很多命令都不熟悉,一边上Google、Baidu、Ubuntu.org.cn搜资料,一边看man出来的E文,还一边在虚拟机上操作,费老劲了!即使这样,Atftpd安装完后的配置文件还没来得及研究,不管他,今天已经收获不少了,那些问题留着以后慢慢解决吧!:)
补充一点:在使用tftp客户端访问服务器资源的时候,在服务器端执行“sudo lsof –i:69”除了原来的两个进程外,还多出来几个atftpd的进程,而在长时间不操作以后,在执行“sudo lsof –i:69”,则又只有rlinetd的两个进程。
这说明atftpd是由rlinetd启动的,平时只有rlinetd在侦听UDP/69端口,一旦有访问需求,rlinetd能调用atftpd来相应访问。