【Ubuntu 20.04/18.04 LTS Server】TFTPサーバを動かす

スポンサーリンク

以前の記事で「Ubuntu 18.04 LTS Server」をインストールした。そのマシンで「TFTPサーバ」を動かしたので備忘録を残す。

【Ubuntu 18.04 LTS Server】インストールする
Ubuntu 18.04 LTS が、2018年4月26日(日本時間27日)にリリースされた。 そこで、新規に「Ubuntu 18.04 LTS Server」をインストールしたので備忘録を残す。 インストール媒体の入手 下記URLから、イ...

2020/8/13追記

「Ubuntu 20.04 LTS Server」でも同様に動作する事を確認。

【Ubuntu 20.04 LTS Server】新規にインストールする
Ubuntu 20.04 LTS が、2020年4月24日にリリースされた。 先日の記事では Ubuntu 18.04 LTS Server からのアップグレードだったが、新規に「Ubuntu 20.04 LTS Server」をインストー...

目的

以前の記事で、Raspberry Piでu-bootを動かした。

【Raspberry Pi】u-bootを動かす
前の記事で作成した、u-bootを、「Raspberry Pi」に入れて、動かしてみる。 シリアル接続の準備 u-bootでは、シリアル通信を使って、コマンド入出力する。 シリアル-USB変換ケーブルが必要で、私はアマゾンから下記を入手。搭...

又、前の記事で紹介したT-Kernelを、Raspberry Piで動作確認したりするのに、毎回プログラムファイルをSDカードにコピーして実行していたが、けっこう手間がかかる。

【T-Kernel】Raspberry Pi と Renesas RZ/T1 用の T-Kernel「rtk_kernel」をGitHubに公開
以前の記事で紹介した、Raspberry Pi用にポーティングしたT-Kernel(rpi_t-kernel)の構成を見直し、RTOS(T-Kernel)部分のみを分離した「rtk_kernel」をGitHubに公開した。 概要 T-Ker

そこで、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コマンドでポート状態を調べる。

【Ubuntu 18.04/16.04 LTS Server】開いてるポートの確認(nmap ポートスキャン)
nmapという、ポートスキャンソフトで確認できる。 インストール $ sudo apt install nmap ヘルプ表示 $ sudo nmap -h 使っているTCP/UDPポートを調べる $ sudo nmap -sTU local...
$ 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通信を使ったプログラムファイルのロード&実行については、次の記事で紹介する。

【Raspberry Pi】u-bootでTFTPサーバからイーサネット経由のファイル読込み
前の記事で、UbuntuでTFTPサーバを動かすようにした。 そこで、Ubuntu Linux上の「TFTPサーバ」にファイルを置き、Raspberry Piのu-bootからTFTP通信を使ってイーサネット経由でファイルの読み出しが出来た...

補足

  • Ubuntu 20.04 では、ファイルの格納先デフォルト設定が、TFTP_DIRECTORY="/srv/tftp" になっていた。(従来は、"/var/lib/tftpboot" だった)

参考

  1. Ubuntu 18.04: TFTPサーバのtftpd-hpaをインストールする
  2. UbuntuでTFTPサーバーを立ち上げる方法について
  3. How to setup tftp server on ubuntu and load images at uboot
  4. Installing and Configuring TFTP Server on Ubuntu
  5. Trivial File Transfer Protocol | ウィキペディア
  6. TCP/IP – TFTP
  7. in.tftpd(8) – Linux man page
  8. Linuxでユーザーをグループに追加する

コメント

タイトルとURLをコピーしました