<refentry xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="man.tftpd">

  <refentryinfo>
    <title>tftpd</title>
    <productname>iputils</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>
      <application>tftpd</application>
    </refentrytitle>
    <manvolnum>8</manvolnum>
    <refmiscinfo class='manual'>iputils</refmiscinfo>
  </refmeta>

  <refnamediv>
    <refname>tftpd</refname>
    <refpurpose>Trivial File Transfer Protocol server</refpurpose>
  </refnamediv>

  <refsynopsisdiv xml:id="synopsis">
    <cmdsynopsis>
      <command>tftpd</command>
      <arg choice="opt" rep="norepeat">-V</arg>
      <arg choice="plain" rep="norepeat">
        <replaceable>directory</replaceable>
      </arg>
      <sbr />
    </cmdsynopsis>
  </refsynopsisdiv>

  <refsection xml:id="description">
    <info>
      <title>DESCRIPTION</title>
    </info>
    <para>
    <command>tftpd</command> is a server which supports the DARPA
    Trivial File Transfer Protocol (RFC1350). The TFTP server is
    started by
    <citerefentry>
      <refentrytitle>inetd</refentrytitle>
      <manvolnum>8</manvolnum>
    </citerefentry>.</para>
    <para>
    <emphasis remap="I">directory</emphasis> is required argument;
    if it is not given
    <command>tftpd</command> aborts. This path is prepended to any
    file name requested via TFTP protocol, effectively chrooting
    <command>tftpd</command> to this directory. File names are
    validated not to escape out of this directory, however
    administrator may configure such escape using symbolic
    links.</para>
    <para>It is in difference of variants of
    <command>tftpd</command> usually distributed with unix-like
    systems, which take a list of directories and match file names
    to start from one of given prefixes or to some random default,
    when no arguments were given. There are two reasons not to
    behave in this way: first, it is inconvenient, clients are not
    expected to know something about layout of filesystem on server
    host. And second, TFTP protocol is not a tool for browsing of
    server's filesystem, it is just an agent allowing to boot dumb
    clients.</para>
    <para>In the case when
    <command>tftpd</command> is used together with
    <citerefentry>
      <refentrytitle>rarpd</refentrytitle>
      <manvolnum>8</manvolnum>
    </citerefentry>, tftp directories in these services should
    coincide and it is expected that each client booted via TFTP
    has boot image corresponding its IP address with an
    architecture suffix following Sun Microsystems conventions. See
    <citerefentry>
      <refentrytitle>rarpd</refentrytitle>
      <manvolnum>8</manvolnum>
    </citerefentry> for more details.</para>
  </refsection>

  <refsection xml:id="security">
    <info>
      <title>SECURITY</title>
    </info>
    <para>TFTP protocol does not provide any authentication. Due to
    this capital flaw
    <command>tftpd</command> is not able to restrict access to files
    and will allow only publicly readable files to be accessed.
    Files may be written only if they already exist and are
    publicly writable.</para>
    <para>Impact is evident, directory exported via TFTP
    <emphasis remap="B">must not</emphasis> contain sensitive
    information of any kind, everyone is allowed to read it as soon
    as a client is allowed. Boot images do not contain such
    information as rule, however you should think twice before
    publishing f.e. Cisco IOS config files via TFTP, they contain
    <emphasis remap="B">unencrypted</emphasis> passwords and may
    contain some information about the network, which you were not
    going to make public.</para>
    <para>The
    <command>tftpd</command> server should be executed by
    <emphasis remap="B">inetd</emphasis> with dropped root
    privileges, namely with a user ID giving minimal access to
    files published in tftp directory. If it is executed as
    superuser occasionally,
    <command>tftpd</command> drops its UID and GID to 65534, which
    is most likely not the thing which you expect. However, this is
    not very essential; remember, only files accessible for
    everyone can be read or written via TFTP.</para>
  </refsection>

  <refsection xml:id="see_also">
    <info>
      <title>SEE ALSO</title>
    </info>
    <para>
    <citerefentry>
      <refentrytitle>rarpd</refentrytitle>
      <manvolnum>8</manvolnum>
    </citerefentry>,
    <citerefentry>
      <refentrytitle>tftp</refentrytitle>
      <manvolnum>1</manvolnum>
    </citerefentry>,
    <citerefentry>
      <refentrytitle>inetd</refentrytitle>
      <manvolnum>8</manvolnum>
    </citerefentry>.</para>
  </refsection>

  <refsection xml:id="history">
    <info>
      <title>HISTORY</title>
    </info>
    <para>The
    <command>tftpd</command> command appeared in 4.2BSD. The source
    in iputils is cleaned up both syntactically (ANSIized) and
    semantically (UDP socket IO).</para>
    <para>It is distributed with iputils mostly as good demo of an
    interesting feature (MSG_CONFIRM) allowing to boot long images
    by dumb clients not answering ARP requests until they are
    finally booted. However, this is full functional and can be
    used in production.</para>
  </refsection>

  <refsection xml:id="availability">
    <info>
      <title>AVAILABILITY</title>
    </info>
    <para>
    <command>tftpd</command> is part of
    <emphasis remap="I">iputils</emphasis> package.</para>
  </refsection>
</refentry>
