Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ

tftpサービスを起動する

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2005/05/07
2006/12/15 更新
 
対象OS
Windows 2000 Server
Windows Server 2003
tftpは、UDPを使った軽量なファイル転送プロトコルである。
Windowsでは、RISやPXEサービスといった、ネットワーク・ブート環境で利用される。
Windows Server OSにはtftpのサーバ・プログラムtftpd.exeが用意されているので、これを使ってtftpサーバを構築できる。
セキュリティ対策のため、可能ならば書き込み(アップロード)を禁止しておくとよい。
 
解説
 
[本TIPSに対する注意事項]

 2006年12月13日、マイクロソフトからセキュリティ更新プログラムMS06-077が公開された。これは本TIPSで解説しているtftpd.exeに関する脆弱性に対処するためものである。そのため本TIPSの方法でtftpdサービスをインストールした後は、MS06-077のセキュリティ対策を施す必要がある。またすでに本TIPSの方法に基づいてこのサービスを利用している場合も、同様の対策を行う必要がある。詳細については、稿末の解説を参照していただきたい。

 tftp(Trivial File Transfer Protocol)プロトコルは、UDPを使った簡易ファイル転送プロトコルである(プロトコルはRFC1350で定義されている)。TCPを使った通常のFTPプロトコルと比べると、低機能だが、非常に「軽量な」プロトコルだ(ネットワークでは、機能がシンプルで制御が容易なものを軽量と呼ぶことが多い)。tftpはユーザーが直接使うことはほとんどないが、システム起動時のブートストラップ用プロトコルとして使われることが多い。システム起動時には、TCPのような複雑で高度な制御が必要なプロトコルを実装・利用することは困難だからだ。

 tftpは、Windows Server OSのRIS(リモート・インストール・サービス)やPXE(Preboot eXecution Environment。ブート前実行環境)でも利用されているし、一般的にはディスクレス・コンピュータのブート用途などで利用されている。これらの環境では、BOOTPやDHCPで各コンピュータの構成情報を取得し、さらにtftpで実際のOSコードなどをサーバからダウンロードしてシステムを起動している。

 Windows Server OSではRISを導入するとtftpdサービスが利用できるようになるが、RISを使わない場合でも、単独でtftpdサービスを導入することも可能である。本TIPSではこの方法について解説する。

■セキュリティ対策に対する追記
 冒頭でも述べているように、RISのtftpdサービスに対して、現在ではセキュリティ修正プログラムが提供されている。以下の方法でtftpdサービスを手動で導入すると、このセキュリティ修正プログラムの適用対象外となる。可能ならRISサービスを導入し、tftpdサービスだけを利用する、といった運用方法も検討していただきたい(これならば適用対象となる)。


操作方法

 tftpdサービスをセットアップするには、管理者としてログオンし、以下の操作を行う。

手順1―tftpd.exeファイルを用意する

 tftpdのサーバ・プログラムであるtfptd.exeファイルは、デフォルトでは%windir%\system32\dllcacheの下に置かれているので、これを手動で%windir%\system32フォルダへコピーする。%windir%はWindows OSのシステム・アファイルが置かれているフォルダであり、Windows 2000ではC:\WINNT、Windows Server 2003ではC:\Windowsがデフォルトとなっている。

C:\>cd C:\WINDOWS\system32
C:\WINDOWS\system32>copy dllcache\tftpd.exe
……ファイルをコピーする
        1 個のファイルをコピーしました。

手順2―サービスとして登録する

 次はtftpd.exeをサービスとしてシステムに登録し、OS起動時に自動的にサービスが開始されるように設定する。このためには、sc.exeというコマンド・ツールを利用する。

 sc.exeは、コマンド・ラインからサービスを制御するためのツールであり、Windows XPやWindows Server 2003には標準で含まれている。Windows 2000 Serverの場合はリソースキットに含まれているので、リソースキットをインストールするか、Windows XPやWindows Server 2003を使ってリモートから操作すればよい。scコマンドの一般的なフォーマットは「sc コマンド名 パラメータ…」であるが、リモートのコンピュータを指定する場合は「sc \\サーバ名 コマンド名 パラメータ…」とする。

 tftpd.exeを「tftpd」というサービス名でシステムに登録するには、次のコマンド(sc createコマンド)を実行する。

C:\>sc \\servername create tftpd binPath= c:\windows\system32\tftpd.exe
[SC] CreateService SUCCESS

 ここで、「\\servername」は対象となるサーバ名の指定であるが、ローカルのコンピュータの場合はこの部分は省略してもよい。

 「tftpd」はサービス名、「binPath= c:\windows\system32\tftpd.exe」は登録するプログラムのパス名の指定である(パス名に空白文字が含まれている場合は引用符で囲む。また「binPath=」の直後には空白を入れること)。

手順3―サービスの確認と開始

 tftpdサービスを登録したら、その内容を確認し、システム起動時に自動的に開始するように設定する。このためにはscコマンドを使うか、[管理ツール]の[サービス]を利用する。サービスの開始/停止には、sc start/sc stopコマンドだけでなく、net start/net stopコマンドも利用できる 。

C:\>sc \\servername query tftpd …サービスの確認
SERVICE_NAME: tftpd
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 1077       (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\>sc \\servername config tftpd start= auto …自動開始に設定する
[SC] ChangeServiceConfig SUCCESS

C:\>net start tftpd …サービスの開始
tftpd サービスを開始します.
tftpd サービスは正常に開始されました。

 サービスの管理ツールを使う場合は、以下の設定を行う。

tftpdサービスの設定
作成したばかりのサービスは自動開始になっていないので、設定を変更する。
  作成したサービス名。
  [自動]に変更する。
  これを押すと、サービスが開始する。

手順4―tftpdフォルダの作成

 tftpdはデフォルトでは、システム・ドライブの「\tftpdroot」フォルダ(c:\tftpdroot)をファイル転送のルートとして利用する。そのため、このフォルダを作成しておく必要がある。

C:\>mkdir c:\tftpdroot

 クライアントからtftpコマンドでファイルをputするとこの中に書き込まれ、getする場合はこの中のファイルしかアクセスすることはできない。tftpプロトコルにはユーザー認証がないので、FTPと違って、ファイルやフォルダごとに個別のアクセス権限を付けることはできない。だが、tftpd.exeではレジストリを設定することにより、いくらかのアクセス制限やログ・ファイルの設定などを行うことができる(後述)。

手順5―動作確認

 tftpのクライアント・プログラムであるtftp.exeは、ServerでないWindows OSにも搭載されているので、これを使って動作を確認する。

ファイルの取得

 tftpサーバからファイルをダウンロードするには、次のようなコマンドを実行する。

C:\>tftp server get testfile.data local-testfile.data
Transfer successful: 3983 bytes in 1 second, 3983 bytes/s

 これは、サーバ上のtestfile.dataというファイルをローカルへ転送するコマンドである。ローカル側のファイル名(local-testfile.data)を省略すると、同じ名前のファイルがローカル側に作成される。ワイルド・カードは使用できないし、サーバ側のファイル名の一覧を取得することもできない。

ファイルの送信

 逆に、tftpサーバへ送信するには、putを使う。

C:\>tftp server put testfile.data dest-testfile.data
Transfer successful: 3983 bytes in 1 second, 3983 bytes/s

 これは、ローカル側のtestfile.dataというファイルをtftpサーバへdest-testfile.dataという名前で保存するコマンドである(サーバ側のファイル名は省略可能)。

 いずれも、デフォルトではアスキー・モードで転送されるが(行末コードの変換が行われる)、バイナリ・モードで転送するには、「tftp -i server get testfile.data」「tftp -i server put testfile.data」というふうに、先頭に「-i」オプションを指定する。

送信機能の禁止

 デフォルトでは、tftpサーバに対する送信(put、アップロード)が許可されているが、tftpでは認証機能がないため、不正なアップロードでファイルが破壊されたり、上書きされたりする可能がある。またWindows 2000 Serverの場合は、セキュリティ情報MS06-077で示されるように、脆弱性が悪用される危険性もある。そのため、必要がなければ送信機能は無効にしておくのがよい。システムのブートやRISなどの用途ではtftpでアップロードできる必要はない。具体的な禁止方法については最後の部分を参照していただきたい。

tftpd.exeの設定変更

 tftpd.exeは、レジストリを変更することにより、接続可能IPアドレスの制限や、書き込み(クライアントからサーバへの転送)の禁止など、いくつかのアクセス制限やログ・設定などを行うことができる。詳細については、tftpd -?で表示されるヘルプ・メッセージを参考にしていただきたい。ただしこのメッセージはWindows Server 2003では表示されないので、以下にWindows 2000 Server上での実行結果を掲載しておく。

C:\>tftpd -?
==============================================================
Abstract:
This implements an RFC 783 tftp daemon.
It listens on port 69 for requests
and spawns a thread to process each request.

TFTPD USAGE and Installation:

  md d:/tftpd                                     (the StartDirectory).
  copy //MohsinA_p90/test/tftpd.exe .
  sc create tftpd binPath= d:/tftpd/tftpd.exe     (give full path).
  sc query tftpd                                  (check if installed).

Start:
    sc start tftpd -f                             (creates a log file).
or  sc start tftpd
or  net start tftpd
or  sc start tftpd [-dStartDirectory] [-e] [-f]
    Options: -e  use event log.
             -f  log to file.
             -dStartDirectory
Info:
  sc interrogate tftpd           (logs will be updated).
  sc query tftpd                 Check whether running.
Stop:
  sc  stop tftpd
  net stop tftpd

Variables that control what files can be read/written and by whom:
   StartDirectory - only files there will be accessible.
                    LogFile is created here.
   ValidClients - Clients matching this ip address can read files.
                    eg. you can set it to "157.55.8?.*"
   ValidMasters   - clients matching this can write and read files.
                    eg. you can set it to "" and no one can write.
   ValidReadFiles - only matching files will be served out, eg. "r*.t?t"
   ValidWriteFiles- only matching files will be accepted,  eg. "w*.txt"

Client:
  tftp [-i] servername {get|put} src_file dest_file
  -i from binary mode, else ascii mode is used.

==============================================================
TFTPD_DEFAULT_DIR is \tftpdroot\
TFTPD_LOGFILE     is tftpd.log

Registry key names, all strings: HKEY_LOCAL_MACHINE System\CurrentControlSet\Services\tftpd\parameters
o StartDirectory keyname "directory"
These keys are shell patterns with * and ? (see examples above):
o ValidClients   keyname "clients"
o ValidMasters   keyname "masters"
o Readable files keyname "readable"
o writable files keyname "writable"

C:\>

セキュリティ更新プログラムMS06-077に対する措置

 2006年12月13日、マイクロソフトからセキュリティ更新プログラムMS06-077が公開された。これは本TIPSで解説しているtftpd.exeに関する脆弱性に対処するためのものである。そのため本TIPSの方法でtftpdサービスを手動でインストールした後は、MS06-077のセキュリティ対策を施す必要がある。またすでに本TIPSの方法に基づいてこのサービスを利用している場合も、同様の対策を行う必要がある(Windows 2000 Serverだけでなく、Windows Server 2003の場合も行うこと)。

 RISサービスをWindows 2000 Serve上にインストールすると、本TIPSでも解説しているtftpd.exeを使ったtftpdサービスが導入されるが、このtftpサーバの機能に問題がある。tftpには認証機能がないため、すでに存在するファイルに対するアップロード要求の場合には、認証されずに上書きされてしまう。その結果、不正なファイルがクライアントへtftpでダウンロードされ、利用される可能性がある。これを防ぐため、MS06-077の更新プログラムでは、tftpdサービスに対するアップロード(tftpのクライアントから本tftpdサービスに対するput転送)を禁止し、ダウンロードのみ(クライアントから見るとgetのみ)を許可するようにレジストリを設定する。

 MS06-077のタイトルは「RISサービス」となっているが、対象は、RISサービスを構成するコンポーネントの1つであるtftpd.exeである。ただしMS06-077の修正プログラムではこのファイルそのものはいっさい更新せず、tftpdサービスが参照するレジストリのみを更新する。デフォルトではtftpdではファイルの送受信が可能になっているが、レジストリを変更して、クライアントからのアップロード(クライアントからのputによる書き込み)を禁止している。これにより、不正なファイルを含め、すべてのアップロードが禁止される。ダウンロードしかできなくなるが、通常のリモート・ブートの用途ではダウンロードしか行わないので、このような対処方法でも問題ないだろう。

 Windows Server 2003の場合は少し事情が異なっている。(1)RISサービスのインストール時に該当するレジストリが自動的に設定されるので、デフォルトでアップロードは禁止されている。(2)レジストリを解除してアップロードを許可しても、すでに存在するファイルへの上書きはエラーとなる。これらの理由により、Windows 2000 Serverの場合よりも問題は少ない。だが手動でtftpdサービスをセットアップした場合にはレジストリ・エントリは存在しないので、アップロード可になっている(ただし上書きはできない)。安全性を考えると、アップロードは常時禁止とすることが望ましい。

MS06-077のインストールのための前提条件

 MS06-077はレジストリを変更するだけの更新プログラムであるが、実行時に、RISサービスがすでにインストール済みかどうかを確認する。そしてRISサービスがインストールされていなければ実行を中止する。本TIPSでは、RISサービスをインストールせず、tftpd.exeを直接サービスとして登録、実行しているが、このような環境ではMS06-077は何も実行されない。また自動更新やWindows Update、Microsoft Update、MBSAなどでも、このようなケースでは何も検出されない。

 そのため、本TIPSの方法で手動でtftpd.exeを登録した場合は、MS06-077に示されている回避策(「TFTP サービスを読み取り専用に設定する」)を、自分自身で行う必要がある。以下にその方法を示す。

回避策:tftpに対するファイル・アップロードの禁止

■手順1―レジストリの設定
 MS06-077の脆弱性を回避するには、該当Webページで指示されている回避策を、ユーザー自身が手動で行う。これは修正プログラムが行っている処理と同じものである。具体的には、以下のレジストリ・キーと値を新規追加し、その値を空の文字列に設定する。これにより、tftpサーバに対するアップロード(put)ができなくなる。

[注意]

レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリ・エディタの操作は慎重に行うとともに、あくまで御自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本Windows Server Insider編集部では責任を負いかねます。ご了承ください。

 
項目 内容
キー HKEY_LOCAL_MACHINEの
System\CurrentControlSet\Services\TFTPD\Parameters
値の名前 Masters

REG_SZ

値の内容 (空の文字列)

tftpでアップロード禁止にするための設定

Mastersは、本来はアップロードを許可するクライアント(コンピュータ名)のリストを記述するために使われる。これを空文字列に設定することにより、すべてのクライアントからのアップロードが禁止される。なおMS06-077のWebページの回避策の記述では、DWORD型のMastersという値を新規作成し値を0にする、となっている。この方法でもアップロードは禁止できるようであるが、実際のMS06-077のセキュリティ更新プログラムでは、REG_SZ型の値を作成しているので、ここではその方法を記述しておく。Windows Server 2003の場合は、RISサービス導入時に自動的にこの値(REG_SZ型の空文字列値)が作成されるが、手動でtftpdサービスを導入した場合には存在しないので、必ず作成して、アップロードを禁止しておくこと。

■手順2―tftpdサービスの再起動
 レジストリの設定が済んだら、有効化するために、tftpdサービスを再起動する。[サービス]管理ツールで再起動してもよいし、次のようなコマンドを使って再起動してもよい。

C:\>net stop tftpd …サービスの停止

tftpd サービスは正常に停止されました。

C:\>net start tftpd …サービスの再起動
tftpd サービスを開始します.
tftpd サービスは正常に開始されました。

C:\>

設定の確認

 以上で設定は終了である。クライアントからtftpでファイルをputし、アクセスが拒否されることを確認する。End of Article

C:\>tftp  sysserver01 put sample.txt …ファイルの書き込み(アップロード)
Error on server : Access violation …拒否されている

C:\>
  
更新履歴
【2006/12/15】MS06-077に対する対策を追加しました。
【2006/12/15】Windows Server 2003に対する記述を追加し、同様の措置を行うように加筆修正しました。
 
「Windows TIPS」

@IT Special

- PR -

TechTargetジャパン

Windows Server Insider フォーラム 新着記事
  • ドメインの情報を提供するDNSのコンテンツサーバ (2017/6/22)
     DNSサーバには、ドメインの情報を定義・公開するコンテンツサーバと、それを利用するリゾルバの2種類がある。今回はコンテンツサーバの機能についてまとめておく
  • DNS(Domain Name System)とは (2017/6/21)
     インターネット上にあるサーバやサービスの「名前」とIPアドレスとの対応を管理してインターネットを支えている「DNS」。今回は、DNSの役割や構造の概要を解説
  • 第551話 プライバシー保護新時代 2 (2017/6/20)
     サービスの処理実体がクラウドにある以上、ネットサービス利用とプライバシー保護はトレードオフになります……
  • トラブル時にAzure Web Appsを自動的に復旧させる (2017/6/19)
     Azure Web Appsでは、サーバエラーの連続発生やメモリ消費量の増大などをトリガーとして、自動的にワーカープロセスを再起動できる。その設定方法は?
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH