最近在講解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