tftpd の問題点

2000.7.6 ver.1.00 by R. Saito

X 端末の font や X サーバプログラムは tftp を用いていま す。今回 X 端末を Private Address に移動しましたので、 tftpserver もPrivate Address に移動しました。しかし gateway 172.21.88.1 ( = cube 130.153.140.55) 上の Vine Linux ver 2.0 の in.tftpd には問題点があるようです。したがって、現在では、 172.21.88.10 の X 端末以外はうまくいっていません。 172.21.88.10 の X 端末がなぜうまく行っているのかがわかりませ ん。

わかっている症状

  1. flex から cube 130.153.140.55 に tftp すると file が get できる。がこの場合には

    get /usr/lib/X11/fonts/misc/fonts.dir

    では Error code 2: Access violation になるが

    get usr/lib/X11/fonts/misc/fonts.dir

    なら ok です。頭の / をとる必要がある。

  2. flex から 172.21.88.1 に tftp すると connect はできるが、get はなにもできない。
    flex10% tftp 172.21.88.1
    tftp> get Xncd19c
    tftp: Xncd19c: Permission denied
    tftp> st
    Connected to 172.21.88.1.
    Mode: netascii Verbose: off Tracing: off
    Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
    tftp> v
    Verbose mode on.
    tftp> tr
    Packet tracing on.
    tftp> get usr/lib/X11/fonts/misc/fonts.dir 
    getting from 172.21.88.1:usr/lib/X11/fonts/misc/fonts.dir to fonts.dir [netascii]
    sent RRQ 
    received DATA 
    sent ACK 
    received DATA 
    sent ACK 
    sent ACK 
    received DATA 
    sent ACK 
    sent ACK 
    received DATA 
    sent ACK 
    received DATA 
    sent ACK 
    sent ACK 
    sent ACK 
    Transfer timed out.
    tftp> q
    
  3. 172.21.88.XXX の X ncd 端末から Xncd19c をget できるが、 config file や font.dir が読まれない。したがって font も正しく path が設定できない。
  4. なぜか 172.21.88.10 だけは正常に動いている。

当面の対策

  1. NCD X 端末を Private Address に移行する場合には flex を tftp server にして実行する。これでも 130.153.140.XXX の IP address が不要になります。

    bt 172.21.88.1X 130.153.140.143 172.21.88.1 255.255.255.0

    で 実行可能です。ただし config file を新たに flex に作ることが 必要です。

問題の解決 (2000.7.10)

tftpd.c をみて、先頭に / がついている場合の 処理のif 文 を直して / がついている場合の else の処理のところをコメント にして、

filname++;

をつけまして make しましたら、うまく行きました。 この処 理をしても、/ がついていない file 名と同等だと思いますので、 security 上の問題は無いと思います。問題がありましたら 教えて下さいませ。

tftpd.c の該当部分を示します。patch として良いかわかりま せんので、使う場合には自分の責任で編集して下さい。make は Vine Linux の SRPM から

rpm --rebuild tftp-0.15-1.src.rpm の とちゅうで C-c

cd /usr/src/redhat/BUILD/netkit-tftp-0.15/

cd tftpd して、tftpd.c を 編集

make と make install を実行。ps ax | grep inetd で pid を 得て、 netd を kill -HUP pid で restart. 標準が netascii になっている点に注意。

	if (*filename != '/') {
		syslog(LOG_ERR, "tftpd: serving file from %s\n", dirs[0]);
		chdir(dirs[0]);
	} else {
		/* 先頭が / の場合の処理 コメントアウトした。*/

                for (dirp = dirs; *dirp; dirp++)
			if (strncmp(filename, *dirp, strlen(*dirp)) == 0)
				break;
		if (*dirp==0 && dirp!=dirs)
			return (EACCESS);
		*/
		/* 先頭が / の場合 先頭の / を読まないで処理  */
		filename++;
		chdir(dirs[0]);
	}

なんで / が先頭についていて問題なのかが、十分良くわかってい ないので不安なのですが、問題は解決しました。どうもありがとう ございました。

試してわかったことがあったら e-mail とともにここに記入下さい。


管理者: rsaito@tube.ee.uec.ac.jp,