在 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
沒有解決問題,試試搜尋本站其他內容