以前の記事で「Ubuntu 18.04 LTS Server」をインストールした。そのマシンで「TFTPサーバ」を動かしたので備忘録を残す。
2020/8/13追記
「Ubuntu 20.04 LTS Server」でも同様に動作する事を確認。
目的
以前の記事で、Raspberry Piでu-bootを動かした。
又、前の記事で紹介したT-Kernelを、Raspberry Piで動作確認したりするのに、毎回プログラムファイルをSDカードにコピーして実行していたが、けっこう手間がかかる。
そこで、Ubuntu Linux上に「TFTPサーバ」を動かしておき、プログラムファイルをRaspberry Piのu-bootからイーサネット経由でロードできるようにする。
TFTPサーバのインストール
下記コマンドで、TFTPサーバとTFTPクライアントをインストール。
$ sudo apt install tftpd-hpa tftp-hpa
実行状態確認
下記コマンドで、TFTPサーバの動作状況を確認。
$ sudo systemctl status tftpd-hpa
● tftpd-hpa.service - LSB: HPA's tftp server
Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
Active: active (running) since Fri 2019-10-11 15:01:05 JST; 42s ago
Docs: man:systemd-sysv-generator(8)
Process: 4617 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCE
Process: 4622 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUC
Tasks: 1 (limit: 4915)
CGroup: /system.slice/tftpd-hpa.service
└─4642 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure
10月 11 15:01:05 server-1 systemd[1]: Starting LSB: HPA's tftp server...
10月 11 15:01:05 server-1 tftpd-hpa[4622]: * Starting HPA's tftpd in.tftpd
10月 11 15:01:05 server-1 tftpd-hpa[4622]: ...done.
10月 11 15:01:05 server-1 systemd[1]: Started LSB: HPA's tftp server.
サービスの自動起動
たぶん、自動設定されるので必要ないと思うが、念のため自動起動の登録は下記コマンド。
$ sudo systemctl enable tftpd-hpa
$ sudo systemctl restart tftpd-hpa
ポートが開いているか確認
nmapコマンドでポート状態を調べる。
$ sudo nmap -sTU localhost
Starting Nmap 7.60 ( https://nmap.org ) at 2019-10-11 15:05 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 1982 closed ports
PORT STATE SERVICE
・・・(略)
69/udp open|filtered tftp
・・・(略)
「69/udp」ポートがオープンされてる。
設定ファイルの確認
TFTPサーバの設定ファイルは「/etc/default/tftpd-hpa
」で、内容を確認しておく
$ cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
- デーモンユーザ名は「
tftp
」 - ファイルの格納先は、「
/srv/tftp
」フォルダ。
ファイルのPUT(書き込み)を可能にする
上記の設定ファイルの TFTP_OPTIONS=
行を下記のように書き換える。
TFTP_OPTIONS="--secure --create"
--create
オプションは、ファイル書き込みを許可するオプション。(尚、tftp
ユーザで作成される)--secure
オプションは、起動時にルートディレクトリを、TFTP_DIRECTORY
指定のフォルダに変更する。
設定ファイル変更したら、下記コマンドでサービスを再起動。
$ sudo systemctl restart tftpd-hpa
格納先フォルダに「tftp」ユーザが書き込みできるようにする
このフォルダの所有グループを「tftp」に変更して書き込み権限を設定する。
$ sudo chgrp tftp /srv/tftp/
$ sudo chmod 774 /srv/tftp/
$ sudo ls -al /srv/tftp/
drwxrwxr-- 2 root tftp 4096 10月 15 23:16 .
drwxr-xr-x 45 root root 4096 10月 15 23:16 ..
自分のユーザを「tftp」グループに追加する
格納先フォルダには自分も読み書き出来た方が都合がよいので、「tftp」グループに自分のユーザを追加。
$ sudo adduser hogeuser tftp
ユーザー `hogeuser' をグループ `tftp' に追加しています...
ユーザ hogeuser をグループ tftp に追加
完了。
- 一度ログアウトして、再度ログインする。追加されたか、
id
コマンドで確認。
tftpクライアントからファイルの読み書き
試しに、tftpクライアントを使って適当なファイルを書き込んで読み出してみる。
$ echo "test test." > hello.txt
$ tftp localhost
tftp> put hello.txt
tftp> get hello.txt hello2.txt
tftp> quit
$ cat hello2.txt
test test.
$ ls -al /srv/tftp/
drwxrwxr-- 2 root tftp 4096 10月 16 13:27 .
drwxr-xr-x 59 root root 4096 10月 11 14:55 ..
-rw-rw-rw- 1 tftp tftp 11 10月 16 13:31 hello.txt
- getコマンドの二つ目の引数は省略可。(同じ名前のファイル名となる)
tftpのコマンドヘルプ(参考)
tftp> ?
tftp-hpa 5.2
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing
literal toggle literal mode, ignore ':' in file name
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet transmission timeout
timeout set total retransmission timeout
? print help information
help print help information
Raspberry PiからTFTPサーバを使う
Raspberry Piで、TFTP通信を使ったプログラムファイルのロード&実行については、次の記事で紹介する。
補足
- Ubuntu 20.04 では、ファイルの格納先デフォルト設定が、
TFTP_DIRECTORY="/srv/tftp"
になっていた。(従来は、"/var/lib/tftpboot"
だった)
コメント