如何在 Fedora 上建立一個 TFTP 伺服器

2019-09-22 11:14:00

TFTP 即簡單文字傳輸協定Trivial File Transfer Protocol,允許使用者通過 UDP 協定在系統之間傳輸檔案。預設情況下,協定使用的是 UDP 的 69 號埠。TFTP 協定廣泛用於無盤裝置的遠端啟動。因此,在你的本地網路建立一個 TFTP 伺服器,這樣你就可以對 安裝好的 Fedora 和其他無盤裝置做一些操作,這將非常有趣。

TFTP 僅僅能夠從遠端系統讀取資料或者向遠端系統寫入資料,而沒有列出遠端伺服器上檔案的能力。它也沒提供使用者身份驗證。由於安全隱患和缺乏高階功能,TFTP 通常僅用於區域網內部(LAN)。

安裝 TFTP 伺服器

首先你要做的事就是安裝 TFTP 用戶端和 TFTP 伺服器:

dnf install tftp-server tftp -y

上述的這條命令會在 /usr/lib/systemd/system 目錄下為 systemd 建立 tftp.servicetftp.socket 檔案。

/usr/lib/systemd/system/tftp.service/usr/lib/systemd/system/tftp.socket

接下來,將這兩個檔案複製到 /etc/systemd/system 目錄下,並重新命名。

cp /usr/lib/systemd/system/tftp.service /etc/systemd/system/tftp-server.servicecp /usr/lib/systemd/system/tftp.socket /etc/systemd/system/tftp-server.socket

修改檔案

當你把這些檔案複製和重新命名後,你就可以去新增一些額外的引數,下面是 tftp-server.service 剛開始的樣子:

[Unit]Description=Tftp ServerRequires=tftp.socketDocumentation=man:in.tftpd[Service]ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpbootStandardInput=socket[Install]Also=tftp.socket

[Unit] 部分新增如下內容:

Requires=tftp-server.socket

修改 [ExecStart] 行:

ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot

下面是這些選項的意思:

  • -c 選項允許建立新的檔案
  • -p 選項用於指明在正常系統提供的許可權檢查之上沒有其他額外的許可權檢查
  • -s 建議使用該選項以確保安全性以及與某些引導 ROM 的相容性,這些引導 ROM 在其請求中不容易包含目錄名。

預設的上傳和下載位置位於 /var/lib/tftpboot

下一步,修改 [Install] 部分的內容

[Install]WantedBy=multi-user.targetAlso=tftp-server.socket

不要忘記儲存你的修改。

下面是 /etc/systemd/system/tftp-server.service 檔案的完整內容:

[Unit]Description=Tftp ServerRequires=tftp-server.socketDocumentation=man:in.tftpd[Service]ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpbootStandardInput=socket[Install]WantedBy=multi-user.targetAlso=tftp-server.socket

啟動 TFTP 伺服器

重新啟動 systemd 守護行程:

systemctl daemon-reload

啟動伺服器:

systemctl enable --now tftp-server

要更改 TFTP 伺服器允許上傳和下載的許可權,請使用此命令。注意 TFTP 是一種固有的不安全協定,因此不建議你在與其他人共用的網路上這樣做。

chmod 777 /var/lib/tftpboot

設定防火牆讓 TFTP 能夠使用:

firewall-cmd --add-service=tftp --permfirewall-cmd --reload

用戶端設定

安裝 TFTP 用戶端

yum install tftp -y

執行 tftp 命令連線伺服器。下面是一個啟用詳細資訊選項的例子:

[client@thinclient:~ ]$ tftp 192.168.1.164tftp> verboseVerbose mode on.tftp> get server.logsgetting from 192.168.1.164:server.logs to server.logs [netascii]Received 7 bytes in 0.0 seconds [inf bits/sec]tftp> quit[client@thinclient:~ ]$

記住,因為 TFTP 沒有列出伺服器上檔案的能力,因此,在你使用 get 命令之前需要知道檔案的具體名稱。