2,646 瀏覽數

Linux – tftp remap

在 tftp 設定裡面有一項是 tftpd.remap ,這是做什麼?
在 Windows 系統下沒有分大小寫,而且路徑表示方式也與 Linux 不同,我們可以透過 tftp remap 的功能.將一些參數作轉換後再傳送給 tftp.

測試環境為 Ubuntu 16.04 x86_64.

root@ubuntu:~# apt-get install tftp tftpd-hpa

確認一下這個本版的 tftp 有支援 remap.

root@ubuntu:~# /usr/sbin/in.tftpd -V
tftp-hpa 5.2, with remap, with tcpwrappers

tftp 設定檔

設定檔位於 /etc/default/tftpd-hpa ,預設是沒有啟動 remap 功能,需要自行新增 -m .

root@ubuntu:~# vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure -vvv -m /var/lib/tftpboot/tftpd.map"

–secure, -s : Change root directory on startup.
–verbose, -v : Increase the logging verbosity of tftpd,最多可以設定到 -vvv .
–mapfile , -m remap-file : Specify the use of filename remapping.

tftp 預設目錄為 /var/lib/tftpboot.啟動服務的腳本檔則存放在 /etc/init/tftpd-hpa.conf

root@ubuntu:~# systemctl restart tftpd-hpa
root@ubuntu:~# systemctl status tftpd-hpa
root@ubuntu:~# systemctl status tftpd-hpa
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa; bad; vendor preset: enabled)
   Active: active (running) since Thu 2017-11-23 23:33:34 PST; 31min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2972 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS)
  Process: 2986 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tftpd-hpa.service
           └─3001 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure -vvv -m /var/lib/tftpboot/tftp
root@ubuntu:~# pstree | grep -i tftp
        |-in.tftpd
root@ubuntu:~# netstat -a | grep tftp
udp        0      0 *:tftp                  *:*                                
udp6       0      0 [::]:tftp               [::]:*  

remap 設定檔

root@ubuntu:~# vi /var/lib/tftpboot/tftpd.map
rg \\ /
rg ([A-Z]) \L\1

參數說明:

  • r – Replace the substring matched by regex by the replacement pattern.
  • g – Repeat this rule until it no longer matches. This is always used with r.
    用 rg 來表示所有的資料都需要修改.
  • \\ – Literal backslash.
  • \L – Turns all subsequent letters to lower case.
  • \1 to \9 – The strings matched by each of the first nine parenthesized subexpressions, \( … \), of the regex pattern.
rg \\ /

在 Linux 下路徑的表示方式為 /var/lib/tftpboot 但是 windows 的路徑表示為 \User\ben ,\\ / 就是要把 \ 換成 /.

rg ([A-Z]) \L\1

表示把 A-Z 的所有字元都換成小寫 a-z.

測試 tftp remap

建立一個檔案 test ,但是我們透過 tftp 時,卻使用大寫,不過一樣可以得到檔案,因為背後有 tftp remap 在運作.

root@ubuntu:~# touch /var/lib/tftpboot/test 
root@ubuntu:~# tftp 172.16.15.130
tftp> get TEST
Received 30 bytes in 0.0 seconds
tftp> q
root@ubuntu:~# ll TEST
-rw-r--r-- 1 root root 28 Nov 24 00:07 TEST
root@ubuntu:~# cat /var/log/syslog
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: input: TEST
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: rule 1: rewrite: tEST
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: rule 1: rewrite: teST
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: rule 1: rewrite: tesT
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: rule 1: rewrite: test
Nov 24 00:07:24 ubuntu in.tftpd[3126]: remap: done
Nov 24 00:07:24 ubuntu in.tftpd[3126]: RRQ from 172.16.15.130 filename TEST remapped to test

發表迴響