TFTPD(8)

名称
tftpd - インターネット TFTP (Trivial File Transfer Protocol) サーバ

書式
/usr/libexec/tftpd [-cCln] [-s directory] [-u user] [directory ...]

解説
tftpd ユーティリティは、インターネット TFTP プロトコル (RFC 1350) を提供するサーバです。 TFTP サーバは、 ‘tftp’ サービス定義で指示されたポートを操作します。 services(5) を参照してください。 このサーバは普通 inetd(8) によって起動されます。

tftp(1) の利用には、リモートシステムのアカウントやパスワードを必要としません。 認証情報がありませんので、 tftpd はパブリックに読み込み可能なファイルだけしかアクセスを許可しません。 文字列 ``/../'' を含んだファイル、もしくは ``../'' から始まるファイルのアクセスは許可されません。 ファイルは、既に存在してパブリックに書き込み可能な場合だけ 書き込まれます。 “パブリック (public)” という概念は、ネットワークを通して到達可能な全てのホストの全てのユーザ を含むように拡張されている点に注意してください。 これは全てのシステムにおいて適当ではないかも知れないし、 そのことは tftp サービスを有効にする前に考慮すべきです。 サーバは、もっとも可能な限り小さな権限を持ったユーザ ID を 持たねばなりません。

ファイルへのアクセス制限は、 tftpd 起動時のディレクトリリストを、 /etc/inetd.conf にサーバプログラムへの引数として 20 までのパス名を指定することにより可能です。 この場合、アクセスは、ファイル名がそこで与えられたディレクトリを 頭に付けたものに制限されます。 与えられたディレクトリは、相対ファイル指定要求に対しての探索パスと しても利用されます。

-s オプションは、 tftpd のルートディレクトリを変更し、指定した directory 外へのアクセスを禁止することにより、さらなる安全性を提供します。 chroot(2) はスーパユーザの権限が必要ですから、 tftpd は root で実行することが必要です。 しかしながら chroot() を実行した後では、 tftpd は自己のユーザ ID を、指定された user か、 -u オプションが指定されない場合には “nobody” に設定します。

以下のようなオプションがあります。

-c  接続ホストのデフォルトのルートディレクトリを、 接続 IP アドレスに基き、chroot を用いて変えます。 これにより、複数のクライアントが同じファイルへ同時に書き込むことを防ぎます。 ディレクトリが存在しない場合、クライアントの接続は拒否されます。 -c には、 -s オプションが必須であり、指定された directory が基点として使用されます。

-C  -c と同様に動作しますが、クライアントの IP 用のディレクトリが存在しない場合、 -s のディレクトリを使うことになります。

-l  全ての要求を、 syslog(3) のファシリティ LOG_FTP を使って、ログ保存します。 注: syslog 設定ファイル syslog.conf(5) においても、 LOG_FTP メッセージのログ機能を有効とする必要があります。

-n  存在しない相対ファイル名に対する要求の否定応答を抑止します。

-s directory
    directory へと、 tftpd のルートディレクトリを変更させます。 ルートディレクトリの変更後、コマンドを受け付ける前に、 tftpd は非特権ユーザの権限へ移行します。

-u user
    -s オプション使用時に、 権限を user (デフォルトでは “nobody” です) へ切り替えます。 user は、名前で指定することが必要であり、数値の UID では駄目です。

関連項目
tftp(1), chroot(2), inetd(8), syslogd(8) K. R. Sollins, The TFTP Protocol (Revision 2), July 1992, RFC 1350, STD 33.

歴史
tftpd ユーティリティは、 4.2BSD から導入されました。 -s オプションは FreeBSD 2.2 から導入され、 -u オプションは FreeBSD 4.2 から導入され、 -c オプションは FreeBSD 4.3 から導入されました。

バグ
33488896 オクテット (65535 ブロック) を越えるファイルは、 クライアントとサーバがブロックサイズのネゴシエーション (RFC1783) を サポートしていなければ、転送不可能です。

多くの tftp クライアントが、 16744448 オクテット (32767 ブロック) を越えて転送できません。