手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 tftpd-hpa TFTP サーバー構築

目次に戻る

1. Overview

TFTP(Trivial File Transfer Protocol)は、ネットワークを介してファイルを転送するための軽量なプロトコルです。RFC 1350 で定義されており、UDP(ポート番号 69)を使用します。FTP と比べて機能は限定的ですが、シンプルな構造ゆえに小規模なシステムや組込み機器での利用に適しています。

通信仕様については「TFTP の仕組みとファイアウォール設計上の考慮点」も参考にして下さい。

1.1. 主な用途

  • ネットワーク機器(ルーター、スイッチなど)のファームウェア更新
  • PXE(Preboot Execution Environment)によるネットワークブート
  • 組込み機器での初期設定ファイルの配布

1.2. 特徴

  • 軽量で実装が容易(UDP ベースで制御が単純)
  • 認証や暗号化を持たない(非セキュア)
  • ファイル転送はブロック単位(512 バイト)で ACK 応答を伴う再送制御方式
  • データ転送量が少なく、低リソース環境でも利用可能

1.3. 注意事項

TFTP は暗号化・認証機構を持たないため、セキュリティの観点から信頼された LAN 内でのみ利用することが推奨されます。外部公開は避け、必要に応じて VPN や SSH トンネルなどのセキュアチャネル上で運用します。

2. Prerequisites

  • 基本設定が完了していること。
  • Ubuntu 標準リポジトリを利用します。

3. Installation & Uninstallation

この章では、TFTP サーバーを提供する tftpd-hpa のインストールおよびアンインストール手順を示します。導入後の基本的なファイル配置を確認し、環境を初期状態から整備します。

3.1. インストール

tftpd-hpa をインストールします。

sudo apt update
sudo apt install tftpd-hpa

インストール完了後、自動的に tftpd-hpa サービスが有効化・起動されます。動作状態を確認します。

systemctl status tftpd-hpa

3.2 主な関連ファイル・ディレクトリ

tftpd-hpa の主な設定ファイルおよび関連ディレクトリは以下の通りです。
設定ファイルとデータディレクトリは密接に関連しており、どちらも初期構築段階で確認しておくことが推奨されます。

種別パス用途
設定ファイル/etc/default/tftpd-hpaサービスのメイン設定ファイル。実行ユーザー、ルートディレクトリ、起動オプションなどを定義します。
初期スクリプト/etc/init.d/tftpd-hpasystemd 経由で呼び出される初期スクリプト。通常は直接編集しません。
データディレクトリ/srv/tftpTFTP のルートディレクトリ。転送対象のファイルを配置します。

ルートディレクトリが存在しない場合は、以下のように作成します。

sudo mkdir -p /srv/tftp
sudo chown tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp

3.3. アンインストール

tftpd-hpa を削除する場合は以下を実行します。

sudo systemctl stop tftpd-hpa
sudo apt remove --purge tftpd-hpa
sudo rm -rf /srv/tftp

設定ファイル /etc/default/tftpd-hpa も削除され、再インストール時には初期状態で再生成されます。

4. Configuration

tftpd-hpa の設定は /etc/default/tftpd-hpa に記述されています。このファイルでは、サービスの実行ユーザー、ルートディレクトリ、ポート番号、起動オプションなどを定義します。

4.1 デフォルト設定

インストール直後の設定内容は以下の通りです。

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

この状態ではファイルのダウンロードのみが許可されており、アップロードはできません。

4.2 設定変更

本環境の例では --create オプションを追加し、新しいファイルのアップロードを許可しています。設定ファイルを以下の内容に書き換えます。

sudo tee /etc/default/tftpd-hpa <<"EOF"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
EOF

4.3 設定項目の説明

パラメータ意味備考
TFTP_USERNAMEサービス実行ユーザー。セキュリティ上、root ではなく専用ユーザー tftp を使用。通常変更不要。
TFTP_DIRECTORY転送ルートディレクトリ。ここに置かれたファイルのみ転送対象となる。/srv/tftp を推奨。
TFTP_ADDRESSサーバーの待受アドレスとポート番号。:69 はすべてのインターフェースで待受。
TFTP_OPTIONS実行時オプション。--secure はルート外アクセス禁止、--create はアップロード許可。必要に応じて他のオプションも追加可能。

4.4 推奨パーミッション

アップロードを許可する場合、書き込み先ディレクトリの権限を確認します。通常、デフォルトの状態で書き込み可能となっています。

sudo chown -R tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp

5. Activation

設定変更を反映させるため、tftpd-hpa サービスを再起動します。systemd により管理されているため、一般的な systemctl コマンドで制御可能です。

5.1 サービスの再起動

sudo systemctl restart tftpd-hpa.service

再起動後、状態を確認します。

systemctl status tftpd-hpa.service

5.2 エラー確認

設定変更後に起動しない場合、journalctl でエラー内容を確認します。

journalctl -u tftpd-hpa.service -xe

6. Verification

tftpd-hpa サービス側の起動状態とログ出力を確認します。実際のファイル転送テストについては「TFTP クライアント」を参照してください。

6.1 サービス状態の確認

systemctl status tftpd-hpa.service

出力例:

● tftpd-hpa.service - LSB: HPA's tftp server
     Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
     Active: active (running) since Sat 2025-10-11 13:24:32 JST; 22h ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1425 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 4527)
     Memory: 608.0K
        CPU: 5ms
     CGroup: /system.slice/tftpd-hpa.service
             └─1487 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure --create /srv/tftp

Oct 11 13:24:32 ubuntu systemd[1]: Starting LSB: HPA's tftp server...
Oct 11 13:24:32 ubuntu tftpd-hpa[1425]:  * Starting HPA's tftpd in.tftpd
Oct 11 13:24:32 ubuntu tftpd-hpa[1425]:    ...done.
Oct 11 13:24:32 ubuntu systemd[1]: Started LSB: HPA's tftp server.

6.2 ルートディレクトリの確認

ls -ld /srv/tftp

出力例:

drwxr-xr-x 4 tftp tftp 4096 Nov  2  2024 /srv/tftp

6.3 ログの確認

cat /var/log/syslog | grep tftpd-hpa

以下はサービス再起動時の出力例です。

Oct 12 12:08:04 ubuntu tftpd-hpa[44349]:  * Stopping HPA's tftpd in.tftpd
Oct 12 12:08:04 ubuntu tftpd-hpa[44349]:    ...done.
Oct 12 12:08:04 ubuntu systemd[1]: tftpd-hpa.service: Deactivated successfully.
Oct 12 12:08:04 ubuntu systemd[1]: tftpd-hpa.service: Unit process 1487 (in.tftpd) remains running after unit stopped.
Oct 12 12:08:04 ubuntu tftpd-hpa[44354]:  * Starting HPA's tftpd in.tftpd
Oct 12 12:08:04 ubuntu tftpd-hpa[44354]:    ...done.

7. Notes

7.1 特定ユーザーに書き込み権限を付与(オプション)

特定ユーザーが、TFTP で公開するファイルを SCP などで配置する必要がある場合、以下のように設定ます。

sudo usermod -aG tftp test
sudo chmod 775 /srv/tftp
  • tftp グループに所属するユーザーは /srv/tftp に対して書き込み可能。
  • その他のユーザーは読み取り専用。

目次に戻る

Ubuntu 22.04 tftpd-hpa TFTP サーバー構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る