tftpd.8

TFTPD(8)

TFTPD(8)

FreeBSD System Manager's Manual

TFTPD(8)

tftpd

Internet 普通文件传输协议服务器

tftpd [-cdClnow] [-F strftime-format] [-s directory] [-u user] [-U umask] [directory ...]

tftpd 实用程序是支持 Internet 普通文件传输协议 (RFC 1350) 的服务器。 TFTP 服务器在 ‘tftp’ 服务描述中指明的端口上运行;见 services(5) 。 服务器通常由 inetd(8) 启动。

tftp(1) 的使用不需要远程系统上的帐户或密码。 由于缺少身份验证信息, tftpd 将只允许访问公开可读的文件。 不允许包含字符串 “/../” 或以 “../” 开头的文件。 只有当文件已经存在并且可以公开写入时,才可以写入文件。 请注意,这将 “public” 的概念扩展为包括可以通过网络访问的所有主机上的所有用户;这可能不适用于所有系统,在启用 tftp 服务之前应考虑其影响。 服务器应具有具有最低权限的用户 ID。

可以通过在 inetd.conf(5) 中包含多达 20 个路径名作为服务器程序参数来使用目录列表调用 tftpd 来限制对文件的访问。 在这种情况下,访问仅限于名称以给定目录之一为前缀的文件。 给定的目录也被视为相对文件名请求的搜索路径。

-s 选项通过更改 tftpd 的根目录来提供额外的安全性,从而禁止对指定 directory 之外的访问。 因为 chroot(2) 需要超级用户权限,所以 tftpd 必须以 root 身份运行。 但是,在执行 chroot(2) 调用后, tftpd 会将其用户 ID 设置为指定 user 的用户 ID,如果未指定 -u 选项,则设置为 “nobody” 。

选项包括:

-c

根据连接 IP 地址,通过 chroot(2) 更改连接主机的默认根目录。 这可以防止多个客户端同时写入同一个文件。 如果目录不存在,则拒绝客户端连接。 -s 需要 -c 选项,并且指定的 directory 用作基础。

-C

操作与 -c 相同,但如果客户端 IP 的目录不存在,它会回退到通过 -s 指定的 directory 。

-F

如果指定了 strftime(3) ,则使用此 -W 兼容格式字符串来创建后缀。 默认情况下使用字符串 "%Y%m%d" 。

-d, -d [value]

启用调试输出。 如果未指定 value ,则每个指定的 -d 实例将调试级别增加一。

如果指定了 value ,则将调试级别设置为 value 。 调试级别是在 src/libexec/tftpd/tftp-utils.h 中实现的位掩码。 有效值为 0 (DEBUG_NONE), 1 (DEBUG_PACKETS), 2, (DEBUG_SIMPLE), 4 (DEBUG_OPTIONS) 和 8 (DEBUG_ACCESS) 。 通过对值进行逻辑或运算,可以在位掩码中组合多个调试值。 例如,指定 -d 15 将启用所有调试值。

-l

使用带有 LOG_FTP 功能的 syslog(3) 记录所有请求。 注意: 还必须在 syslog 配置文件 syslog.conf(5) 中启用日志记录 LOG_FTP 消息。

-n

抑制对不存在的相对文件名的请求的否定确认。

-o

禁用对 RFC2347 样式 TFTP 选项的支持。

-s directory

导致 tftpd 将其根目录更改为 directory 。 完成此操作后但在接受命令之前, tftpd 会将凭据切换到非特权用户。

-u user

使用 -s 选项时,将凭据切换到 user (默认为 “nobody”) 。 用户必须按名称指定,而不是数字 UID。

-U umask

为新创建的文件设置 umask 。 默认值为 (S_IWGRP | S_IWOTH) 。

-w

允许写入请求以创建新文件。 默认情况下, tftpd 要求写入请求中指定的文件存在。 请注意,这仅适用于使用 -u 选项指定的用户可写的目录

-W

-w 一样,但将 YYYYMMDD.nn 序列号附加到文件名的末尾。 请注意,字符串 YYYYMMDD 可以使用 -F 选项进行更改。

tftp(1), chroot(2), syslog(3), inetd.conf(5), services(5), syslog.conf(5), inetd(8)

支持以下 RFC: RFC 1350: The TFTP Protocol (Revision 2). RFC 2347: TFTP Option Extension. RFC 2348: TFTP Blocksize Option. RFC 2349: TFTP Timeout Interval and Transfer Size Options. RFC 7440: TFTP Windowsize Option.

这里提到了非标准 rolloverblksize2 TFTP 选项: Extending TFTP, http://www.compuphase.com/tftp.htm.

tftpd 实用程序出现在 4.2BSD 中; -s 选项是在 FreeBSD 2.2 中引入的, -u 选项是在 FreeBSD 4.2 中引入的, -c 选项是在 FreeBSD 4.3 中引入的, -F-W 选项是在 FreeBSD 7.4 中引入的。

在 FreeBSD 5.0 中引入了对超时间隔和传输大小选项 (RFC2349) 的支持,在 FreeBSD 7.4 中引入了对 TFTP 块大小选项 (RFC2348) 和 blksize2 选项的支持。

Edwin Groothuis edwin@FreeBSD.orgtftpd 和 tftp(1) 代码进行了重大重写以支持 RFC2348。

FreeBSD 13.0 中引入了对 windowssize 选项 (RFC7440) 的支持。

如果没有客户端和服务器支持块大小协商(RFC 2347 和 2348)或非标准 TFTP 翻转选项,则无法正确传输大于 33,553,919 字节(65535 块,最后一个 <512 字节)的文件。 作为一个组合,即使未指定翻转选项, tftpd 也接受在 65535 之后归零的块号序列。

许多 tftp 客户端不会传输超过 16,776,703 个八位字节(32767 个块)的文件,因为它们错误地使用带符号而不是无符号 16 位整数计算块号。

March 2, 2020

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区