FTP, Anonymous FTP, TFTP FAQ

  1.0: About FTP
  2.0: Debugging FTP
    2.1: ftpd -d
    2.2: chroot
    2.3: Other Network Problems
  3.0: Common How Tos
    3.1: How to Set Up Anonymous FTP on a SunOS Machine?
    3.2: How to Set Up Anonymous FTP on a Solaris Machine?
    3.3: How To Start Logging with FTP?
    3.4: How to Set Up TFTP?
    3.5: How do I Set Up or Enable "automatic login" With ftp?
    3.6: How do I Set Up FTP Anonymous ftp Sub-logins?
  4.0: Some Frequently Asked Questions
    4.1: Miscellaneous Questions
    4.2: Common FTP Client Problems
    4.3: Common FTP Server Problems
    4.4: Anonymous FTP Problems
    4.5: TFTP Questions
  5.0: Patches
    5.1: FTP Patches for SunOS
    5.2: FTP Patches for Solaris
    5.3: TFTP Patches for Solaris
  6.0: Known Bugs & RFEs
    6.1: RFEs
  7.0: References
    7.1: Important Man Pages
    7.2: Sunsolve Documents
    7.3: Sun Educational Services
    7.4: Solaris Documentation
    7.5: Third Party Documentation
    7.6: RFCs

   1.0: About FTP

  This Tip Sheet documents a wide variety of information concerning FTP
  as implemented in the SunOS and Solaris operating systems. It is
  intended as a guide to the most common setup questions and problems
  with FTP. A few references give some additional information on FTP
  these are noted in Section 7.0.

  The following terms are important for a clear understanding of FTP:

  FTP, or File Transfer Protocol, is a standard way by which files can
  be sent from one machine to another. It consists of a client program,
  FTP, which makes File Requests, and a server program, FTPD, which
  honors these requests.

  ANONYMOUS FTP is used when a system administrator wants to make files
  available to the net as a whole. If Anonymous FTP is enabled on a
  machine, anyone can ftp to that machine using the 'ftp' or 'anonymous'
  account.

  TFTP, or the Trivial File Transfer Protocol, is closely related to FTP.
  It is an extremely simplistic version of FTP which is often used for
  booting diskless clients and X terminals. Care should be taken with
  TFTP because it has only minimal concerns with security.

  2.0 Debugging FTP

   2.0: Debugging FTP

  FTP very rarely has problems beyond the basic issues listed in this
  document. The following tools might be somewhat useful in examining any
  further problems, but will really only be necessary in the rarest of
  circumstances.

   2.1: ftpd -d

  The debugging level of ftpd can be increased by starting it with the
  -d option. This can be done by modifying the inetd.conf, to add this
  option, as follows:

    ftp     stream  tcp     nowait  root    /usr/sbin/in.ftpd       in.ftpd -d

  (This is the line from the Solaris inetd.conf  SunOS is very
  similar, though the location of in.ftpd is different.)

  You will also need to modify syslog.conf by adding the following line:

    daemon.debug                   /var/adm/ftp-debug.log

  Afterwards, you must restart both inetd and the syslogd:

    %%%% kill -HUP inetd-pid
    %%%% kill -HUP syslog-pid

  This will show you all the return codes and low-level FTP commands in
  the file /var/adm/ftp-debug.log, as the session proceeds:

    Oct  4 10:22:21 psi ftpd[8080]: psi FTP server (UNIX(r) System V Release 4.0)
    ready.
    Oct  4 10:22:23 psi ftpd[8080]: FTPD: command: USER appel
    Oct  4 10:22:23 psi ftpd[8080]: <--- 530
    Oct  4 10:22:23 psi ftpd[8080]: User appel access denied.
    Oct  4 10:22:24 psi ftpd[8080]: FTPD: command: QUIT
    Oct  4 10:22:24 psi ftpd[8080]: <--- 221
    Oct  4 10:22:24 psi ftpd[8080]: Goodbye.

  This might be helpful just to determine that ftp commands are getting
  to ftpd.

   2.2: chroot

  If you are continuing to have problems setting up an anonymous ftp
  directory, especially if you are having problems with ls not working
  and the suggestions in Section 4.3 do not help, you can get some
  additional information from the chroot command, run as follows:

    # chroot /usr/ftp /bin/ls

  (/usr/ftp should be replaced with whatever your anonymous ftp
  directory is)

  In case of errors, using this command will give you a much more
  precise idea of what has been forgotten:

    # chroot /usr/ftp /bin/ls
    ls: Cannot find /usr/lib/ld.so.1

   2.3: Other Network Problems

  Unless you are getting specific errors from ftpd, it is likely that
  most other problems accessing FTP are related to network problems as a
  whole. Most specifically, in cases of machine inaccessibility, you
  should check your interfaces and routing, while in cases of ftp
  returning 'host unknown' you should examine your naming services (DNS,
  NIS, NIS+). SunService has other documents available for all of these
  products.

  If you are having problems with FTP being slow or sluggish, it is
  probable that you have an overall network performance problem. This is
  beyond the scope of the help that SunService can provide. Consult
  Sections 8.0 and 9.0 for other alternatives that you have in this
  case.

  3.0 Common How Tos

   3.1: How to Set Up Anonymous FTP on a SunOS Machine?

  This document describe how to set up an anonymous ftp account on a
  Sun 4.1.X system.  Other systems might vary slightly from these
  instructions.  The ftpd man page instructions are not clear, and
  other books, such as the "Unix System Administrator's Handbook", give
  generic instructions and are not specific to Sun.

  These instructions do NOT apply to Solaris 2.X.

  1.  Login or su to root.

  2.  Create an ftp login in /etc/passwd. Add the following line to
      /etc/passwd:

      ftp:*:11:20::/home/hostname/ftp:

      Note:  The uid number can be any available non-reserved number
      number  the home directory is system administrator selectable.
      Use this directory in following steps.
      The shell entry is intentionally left out.

  3.  Create ftp directories and set their permissions:

    mkdir /home/hostname/ftp
    cd ~ftp
    mkdir bin dev etc pub usr
    mkdir usr/lib
    chown ftp .
    chgrp other .
    chmod 555 .
    chown root ./bin
    chgrp wheel ./bin
    chmod 555 ./bin
    chown root ./dev
    chgrp wheel ./dev
    chmod 775 ./dev
    chown root ./etc
    chgrp wheel ./etc
    chmod 555 ./etc
    chown ftp ./pub
    chgrp other ./pub
    chmod 777 ./pub
    chown root ./usr
    chgrp wheel ./usr
    chmod 555 ./usr
    chown root ./usr/lib
    chgrp wheel ./usr/lib
    chmod 555 ./usr/lib

  4.  Copy ftp files:

    cd ~ftp
    cp /usr/bin/ls ./bin
    cp /etc/group  ./etc
    cp /etc/passwd ./etc
    chown root ./bin/ls
    chgrp wheel ./bin/ls
    chmod 111 ./bin/ls
    chown root ./etc/passwd
    chgrp wheel ./etc/passwd
    chmod 444 ./etc/passwd
    chown root./etc/group
    chgrp wheel ./etc/group
    chmod 444 ./etc/group

  5.  Edit ~ftp/etc/passwd to remove all encrypted passwords, replacing them
      with '*'s, e.g.:

          root:*:0:1:Operator:/:/bin/csh
          nobody:*:65534:65534::/:
          daemon:*:1:1::/:
          sys:*:2:2::/:/bin/csh
          bin:*:3:3::/bin:
          ftp:*:11:20::/home/hostname/ftp:

  6.  Edit ~ftp/etc/group to remove all encrypted passwords, replacing them
      with '*'s, e.g.:

          wheel:*:0:
          nogroup:*:65534:
          daemon:*:1:
          kmem:*2:
          bin:*:3:
          tty:*:4:
          operator:*:5:
          news:*:6:
          uucp:*:8:
          audit:*:9:
          staff:*:10:
          other:*:20:

  7.  Copy the runtime loader:

    cd ~ftp/usr/lib
    cp /usr/lib/ld.so .
    chown root ./ld.so
    chgrp wheel ./ld.so
    chmod 555 ./ld.so

  8.  Copy additional libraries:

    cd ~ftp/usr/lib
    cp /usr/lib/libdl.so.* .
    chown root ./libdl.so.*
    chgrp wheel ./libdl.so.*
    chmod 555 ./libdl.so.*

  9.  Create the zero device used by the runtime loader:

    cd ~ftp/dev
    mknod zero c 3 12
    chown root ./zero
    chgrp wheel ./zero
    chmod 644 ./zero

  10.  Copy the latest version of shared C library.
       The last digit might be different on your system (e.g.: libc.so.1.9):

    cd ~ftp/usr/lib
    cp /usr/lib/libc.so.1.8 .
    chown root ./libc.so.1.8
    chgrp wheel ./libc.so.1.8
    chmod 555 ./libc.so.1.8

  11.  If necessary, uncomment the ftpd line in /etc/inetd.conf:

  ftp     stream  tcp     nowait  root    /usr/etc/in.ftpd        in.ftpd

  and then restart the inetd:

    kill -HUP inetd-pid

  12.  Test the anonymous ftp account.

  You should be aware that this script has created ~ftp/pub with 777
  (world-write) permissions. If you prefer more secure permissions,
  execute a new chmod on ~ftp/pub after running this script.

   3.2: How to Set Up Anonymous FTP on a Solaris Machine?

   The following steps, on setting up Anonymous FTP on a Solaris machine,
   are copied from the 2.5 ftpd man page. It has been tested on 2.3, 2.4
   AND 2.5.  Please note that if you use the ftpd setup script from the
   2.3 or 2.4 man page there is an error  use this script instead.

   First, add the following entry to the /etc/passwd file. In this case,
   /export/ftp was chosen to be the anonymous ftp area, and the shell is
   the non-existent file /nosuchshell. This prevents users from logging
   in as the ftp user. Any of these variables can be changed at your
   discretion:

     ftp:x:30000:30000:Anonymous FTP:/export/ftp:/nosuchshell

   Second, add the following entry to /etc/shadow:

     ftp:NP:6445::::::

   Finally, cut and paste the following script, and run it on the machine
   that you are setting up as an anonymous FTP server:

  #     The following is  a  shell  script  that  will  set  up  the
  #     anonymous  ftp  area.   It  presumes that ftp accounts is set
  #     up locally, as is suggested above.
  #       This is a tested script from the Solaris 2.5 ftpd man page.
  #       It has been tested on 2.3, 2.4, AND 2.5.
  #
  #!/bin/sh
  # script to setup anonymous ftp area
  #
  # handle the optional command line argument
       case $# in

          # the default location for the anon ftp comes from the passwd file
          0) ftphome="`grep '^ftp:' /etc/passwd | cut -d: -f6`"
             ;;

          1) if [ "$1" = "start" ]; then
                ftphome="`grep '^ftp:' /etc/passwd | cut -d: -f6`"
             else
                ftphome=$1
             fi
             ;;

          *) echo "Usage: $0 [anon-ftp-root]"
             exit 1
             ;;
       esac

       if [ -z "${ftphome}" ]; then
          echo "$0: ftphome must be non-null"
          exit 2
       fi

       # This script assumes that ftphome is neither / nor /usr so ...
       if [ "${ftphome}" = "/" -o "${ftphome}" = "/usr" ]; then
          echo "$0: ftphome must not be / or /usr"
          exit 2
       fi

       # If ftphome does not exist but parent does, create ftphome
       if [ ! -d ${ftphome} ]; then
           # lack of -p below is intentional
           mkdir ${ftphome}
       fi
       echo Setting up anonymous ftp area ${ftphome}

       # Ensure that the /usr/bin directory exists
       if [ ! -d ${ftphome}/usr/bin ]; then
           mkdir -p ${ftphome}/usr/bin
       fi

       cp /usr/bin/ls ${ftphome}/usr/bin
       chmod 111 ${ftphome}/usr/bin/ls

       # Now set the ownership and modes to match the man page
       chown root ${ftphome}/usr/bin
       chmod 555 ${ftphome}/usr/bin

       # this might not be the right thing to do
       # but we need the bin -> usr/bin link
       if [ -r ${ftphome}/bin ]; then
           mv -f ${ftphome}/bin ${ftphome}/Obin
       fi
       ln -s usr/bin ${ftphome}

       # Ensure that the /usr/lib and /etc directories exist
       if [ ! -d ${ftphome}/usr/lib ]; then
           mkdir -p ${ftphome}/usr/lib
       fi
       if [ ! -d ${ftphome}/etc ]; then
           mkdir -p ${ftphome}/etc
       fi

       #Most of the following are needed for basic operation, except
       #for libnsl.so, nss_nis.so, libsocket.so, and straddr.so which are
       #needed to resolve NIS names.

       cp /usr/lib/ld.so /usr/lib/ld.so.1 ${ftphome}/usr/lib

       for lib in libc libdl libintl libw libnsl libsocket   \
       nss_nis nss_nisplus nss_dns nss_files
       do
          cp /usr/lib/${lib}.so.1 ${ftphome}/usr/lib
          rm -f ${ftphome}/usr/lib/${lib}.so
          ln -s ./${lib}.so.1 ${ftphome}/usr/lib/${lib}.so
       done

       cp /usr/lib/straddr.so.2 ${ftphome}/usr/lib
       rm -f ${ftphome}/usr/lib/straddr.so
       ln -s ./straddr.so.2 ${ftphome}/usr/lib/straddr.so

       cp /etc/passwd /etc/group /etc/netconfig ${ftphome}/etc

       # Copy timezone database
       mkdir -p ${ftphome}/usr/share/lib/zoneinfo
       (cd ${ftphome}/usr/share/lib/zoneinfo
         (cd /usr/share/lib/zoneinfo; find . -print | cpio -o) | cpio -imdu
         find . -print | xargs chmod 555
         find . -print | xargs chown root
       )

       chmod 555 ${ftphome}/usr/lib/*
       chmod 444 ${ftphome}/etc/*

       # Now set the ownership and modes
       chown root ${ftphome}/usr/lib ${ftphome}/etc
       chmod 555 ${ftphome}/usr/lib ${ftphome}/etc

       # Ensure that the /dev directory exists
       if [ ! -d ${ftphome}/dev ]; then
           mkdir -p ${ftphome}/dev
       fi

       # make device nodes. ticotsord and udp are necessary for
       # 'ls' to resolve NIS names.

       for device in zero tcp udp ticotsord
       do
          line=`ls -lL /dev/${device} | sed -e 's/,//'`
          major=`echo $line | awk '{print $5}'`
          minor=`echo $line | awk '{print $6}'`
          rm -f ${ftphome}/dev/${device}
          mknod ${ftphome}/dev/${device} c ${major} ${minor}
       done

       chmod 666 ${ftphome}/dev/*

       ## Now set the ownership and modes
       chown root ${ftphome}/dev
       chmod 555 ${ftphome}/dev

       if [ ! -d ${ftphome}/pub ]; then
          mkdir -p ${ftphome}/pub
       fi
       chown ftp ${ftphome}/pub
       chmod 777 ${ftphome}/pub

  #End of Solaris 2.x anonymous ftp script

  This script creates ~ftp/pub with 777
  (world-write) permissions. If you prefer more secure permissions,
  execute a new chmod on ~ftp/pub after running this script.
   3.3: How to Start Logging with FTP?

  You can log ftpd connections, which tell you which
  hosts have connected to your system using this procedure.

  STEP 1: add the -l option to ftpd in the
  /etc/inetd.conf file as follows:

    ftp    stream  tcp  nowait  root  /usr/sbin/in.ftpd  in.ftpd -l

  (This is the line from the Solaris inetd.conf  SunOS is very
  similar, though the location of in.ftpd is different.)

  STEP 2:
  You will also need to modify syslog.conf by adding the following
  line (make sure you use TABs and not SPACES - especially if you cut
  and paste this line):

    daemon.info                   /var/adm/ftp.log

  STEP 3:
  Create the /var/adm/ftp.log file:
  touch /var/adm/ftp.log

  STEP 4:
  Restart both inetd and the syslogd:

    %%%% kill -HUP inetd-pid
    %%%% kill -HUP syslog-pid

  ftp should begin logging to /var/adm/ftp.log immediately.

  If you have other daemons which also log information messages, you
  will find that they get logged to this file as well. If this is the
  case, you will probably want to turn off informational messages on
  your other daemons  by default standard Solaris daemons will not log
  informational messages.

  You can view more detail on ftp logins to an FTP server.
  SunOS ftpd logs into /var/adm/wtmp.
  Solaris ftpd logs into /var/adm/wtmpx.
  You do NOT need to enable the ftpd logging described above.
  You can view this detailed info using the "last" command.
  Here is some example output from last   grep ftp on Solaris:

  hackley   ftp          mercedes         Tue Apr  2 10:52 - 10:52  (00:00)
  hackley   ftp          mercedes         Thu Mar 28 10:30 - 10:30  (00:00)

   3.4: How to Set Up TFTP?

  To allow your machine to serve TFTP requests, uncomment the following
  line from /etc/inetd.conf:

    tftp  dgram   udp     wait    root    /usr/sbin/in.tftpd  \
    in.tftpd -s /tftpboot

  (This is the line from the Solaris inetd.conf  SunOS is very
  similar, though the location of in.tftpd is different.)

  Next, create the tftp user home directory:

    %%%% mkdir /tftpboot
    %%%% chown root /tftpboot
    %%%% chmod 777 /tftpboot

  Finally, restart inetd:

    %%%% kill -HUP inetd-pid

  You can verify TFTP is working by putting a file in /tftpboot, and then,
  running the command:

    %%%% tftp machine-name
    tftp> get filename

  Note that TFTP does not work the same as FTP  you won't see the same
  messages, and can't use 'cd', 'ls' or most other FTP commands.

   3.5  How do I set up or enable "automatic login" with ftp?

  Use the .netrc file in the user's home  directory on the machine
  initiating the transfer (e.g. using the ftp command)

  The .netrc might have one or more lines resembling
  machine remotehost login remoteuser password remotepass

  For example, a .netrc file containing the following line:

  machine ray login demo password mypassword

  allows an autologin to the host called ray using the login
  name "demo" with password "mypassword".

  NOTE:
  The .netrc file mode MUST be 600, owned by the user.
  Or you will get the error when starting ftp:
  "Error - .netrc file not correct mode.
  Remove password or correct mode."

   3.6  How do I set up FTP anonymous ftp sub-logins?

  NOTE: Sub-logins for ftp ONLY work under Solaris 2.x!

  Anonymous ftp sub-logins allow
  you to configure an anonymous ftp server, and
  customizing it for different users - i.e. to give
  each user their own home directory, and be able to
  set permissions on each home directory so that others
  can't see or transfer files from within them.

  This also will prevent all users logging in via
  this method to ever go beyond the directory
  hierarchy of ~ftp due to anonymous ftp using the
  chroot function.

  What this entails at the user end is logging in twice -
  once as an anonymous ftp user, and then once again as
  themselves using the 'user' command from the ftp prompt.

  An example:

  ivy -> ftp ivy
  Connected to ivy.
  220 ivy FTP server (UNIX(r) System V Release 4.0) ready.
  Name (ivy:betsym): anonymous
  331 Guest login ok, send ident as password.
  Password:
  230 Guest login ok, access restrictions apply.
  ftp> user betsym
  331 Password required for betsym.
  Password:
  230 User betsym logged in.
  ftp> pwd
  257 "/betsym" is current directory.
  ftp> ls
  200 PORT command successful.
  150 ASCII data connection for /bin/ls (129.151.21.49,41058) (0 bytes).
  226 ASCII Transfer complete.
  ftp>

  How to Set Up Sub-logins with anonymous ftp:

  1.  Setup anonymous ftp as you normally would.

  2.  Edit the ~ftp/etc/passwd file and add the
      user entry.  If you are running 2.3 or 2.4,
      you need the encrypted passwd from the shadow file
      instead of the "x" in the password field.
      If you are using /bin/false as a shell, remember that it
      needs to be listed in ~ftp/etc/shells.

  3.  Edit the ~ftp/etc/passwd file directory entry
      for the user if needed.
      Keep in mind that the home directory will be in
      the ~ftp directory, but as far as ftp knows,
      ~ftp is really '/', so the home directory should
      be listed as /betsym in the ~ftp/etc/passwd file,
      but it will really live at ~ftp/betsym.

      EDITORS NOTE:  At 2.5, the ftpd picks up the home directory
      from /etc/passwd, or the passwd database in NIS or NIS+.

  4.  Create the home directory inside ~ftp for the user
      with appropriate permissions.  For example:
      mkdir ~ftp/betsym
      chown betsym ~ftp/betsym
      chmod 755 ~ftp/betsym

  The following Steps must also be done if you are running
  Solaris 2.5 or above:

  4.  Edit the ~ftp/etc/shadow file for the user
      with the encrypted passwd. For example:
      betsym:LrMIABiTAd892:9561:::::

  5.  chmod 400 ~/ftp/etc/shadow
      chown root ~/ftp/etc/shadow

  6.  cd ~ftp
      mkdir usr/lib/security
      cp /usr/lib/security/pam_entry.so usr/lib/security/pam_entry.so
      mkdir etc/lib
      cp /etc/lib/pam_entry.so etc/lib/pam_entry.so

  4.0 Some Frequently Asked Questions

   4.1: Miscellaneous Questions

  Q1: How do I get ftpd to print a special message on login?
  Q2: How do I get ftpd to print messages for certain directories?
  Q3: How do I restrict the number of FTP sessions?
  Q4: How do I get ftpd to automatically uncompress/untar files?

  A: Sun's ftpd meets the standard specs for a FTP server. However, it
  does not offer much additional functionality, which some recent
  public-domain ftp servers have provided. If you need that additional
  functionality, the best public domain FTP server is probably the
  wu-ftpd, which can be retrieved from wuarchive.wustl.edu. However,
  that ftpd is not supported by SunService.

  Q5: How do I get a script to work with FTP?  Do you have an example?

  A5: First, you will need to set up a ".netrc" file on the FTP server.
      See Section 3.5 on how to do this.
      Then, create an FTP script on the FTP client.  Here is an
      example script that pulls RFC's using anonymous FTP:

  #!/bin/sh
  #
  # usage:
  #       getrfc 822 1066 ...
  (
          echo user anonymous $USER@yoursite.com
          echo cd rfc
          for n do
                  echo get rfc${n}.txt rfc${n}
          done
          echo bye
  ) !  ftp -i -n -v nic.internic.net
    ^^
    There should be a PIPE symbol instead of a ! (sorry, due
    to limitation on our PSD database system at Sun)

   4.2: Common FTP Client Problems

  Q: Why does ftp core dump on my SunOS machine when I try and access
  certain remote machines?

  A: This is a known bug that occurs when a remote machine has multiple
  addresses. It is fixed in the libc patch for 4.1.3 and 4.1.3_u1. See
  section 5.1 below.

  Q: Why do some remote sites refuse to let me ftp to them, complaining
  that they can't lookup my server name?

  A: This is probably because the machine you are ftping from does not
  have a DNS PTR record. You should consult your DNS maps, and verify
  that both A and PTR records are being propagated for the machine in
  question. SunService has a document on DNS which explains this all
  in more depth.

   4.3: Common FTP Server Problems

  Q: Why does a user get the following error when he tries to ftp to a
  local machine:

    "530 user  access denied."

  A1: Your user has a non-standard shell. On the machine that he is
  trying to ftp to, create a file called /etc/shells, add the user's
  shell, and also add all of the standard shells, as the list of
  defaults will not be used if an /etc/shells file exists.

  The following example lists all of the default Solaris shells, and
  also adds on one non-standard shell at the end. It should also be fine
  for SunOS machines:

    %%%% cat /etc/shells
    /usr/bin/sh
    /usr/bin/csh
    /usr/bin/ksh
    /usr/bin/jsh
    /bin/sh
    /bin/csh
    /bin/ksh
    /bin/jsh
    /sbin/sh
    /sbin/jsh
    /usr/local/bin/tcsh

  A2: Your user is listed in the file /etc/ftpusers on the machine he is
  trying to ftp to. All users who have entries in that file are
  automatically denied FTP access.

   4.4: Anonymous FTP Problems

  Q1: Why can I not 'ls' when I log in to my Anonymous FTP site?
  Q2: Why do I get the following error when I try and 'ls' in my
  Anonymous FTP:

    "can't create data socket (0.0.0.0,20): No such device or address"

  A1: Your Anonymous FTP directory has not been set up correctly. If you
  did it by hand, try using the appropriate script in Section 3.1 or 3.2
  above.

  A2: Your Anonymous FTP directory is on a partition which has been
  mounted with the option -nosuid. This can be verified by examining
  either the /etc/fstab (SunOS) or /etc/vfstab (Solaris) file. To
  correct this problem, you must remove the nosuid option from the
  appropriate file, and then remount the partition, most likely by
  rebooting the machine.

  Q: Why do I get the following error when I log in to my anonymous FTP
  account? This seems to happen after anonymous FTP has been running
  correctly for a while:

    "Can't create data socket (150.203.21.26,20): Interrupted system call."

  A: This is a known bug #1167893, under Solaris 2.4. It is currently
  being investigated. Rebooting the machine will return Anonymous FTP
  to its correctly working state.

  Q:  Why can't I run the "user" and "pass" commands when logged in
  to a SunOS 4.X anonymous ftp server?  I see the error "can't change user
  from guest login."

  A:  You can't do this.  SunOS does NOT permit ftp sub-logins on
      anonymous ftp.

   4.5: TFTP Questions

  Q: What are the security ramifications of running tftpd?

  A: There are security concerns with TFTP because it allows users to
  retrieve files without supplying a username or passwd. This means that
  if it were run without any arguments, anyone could retrieve any
  world-readable file from your system.

  However, tftpd usually runs with the arguments "-s /tftpboot". This
  restricts tftp to only accessing the files under the /tftpboot
  directory.  Anyone could still access any file under the /tftpboot
  directory, but usually the files kept there will not be of any
  security concern.

  5.0 Patches

   5.0: Patches

  The following is the list of all of the FTP related patches for 4.1.3,
  4.1.3_u1, 4.1.4, 5.3 and 5.4. If you are having FTP problems,
  installing the patches is a good place to start, especially if you
  recognize the general symptoms noted below.

  In order for a machine to be stable, all of the recommended patches
  should be installed as well. The list of recommended patches for your
  operating system is available from sunsolve1.sun.com.

   5.1: FTP Patches for SunOS

  100557-04 SunOS 4.1.2, 4.1.3: ftp Jumbo Patch

    Corrects minor problems in /usr/ucb/ftp related to mput and the
    .netrc file.

  100865-03 SunOS 4.1.2, 4.1.3: FTP fixes

    Corrects some problems with in.ftpd involving permissions and an
    "Interrupted System Call" error. Should be installed on 4.1.2
    or 4.1.3 FTP servers.

  101640-03 SunOS 4.1.3: in.ftpd logs password info when -d option is used

    Closes a security hole in in.ftpd, which caused passwords to be
    logged, if ftpd is running with the -d option. Unfortunately, this
    patch conflicts with 100865 above, and only one of the two can be
    installed. Of the two, 100865 should probably be selected for
    installation, unless you are specifically planning to run in.ftpd
    with the -d option.

  101625-02 SunOS 4.1.3_u1: ftp does not prompt for account information

    Corrects a minor problem in /usr/ucb/ftp.

  5.1.1: Related Patches for SunOS

  100891-13 SunOS 4.1.3: international libc jumbo patch
  100890-13 SunOS 4.1.3: domestic libc jumbo patch
  101558-07 SunOS 4.1.3_U1: international libc jumbo patch
  101759-04 SunOS 4.1.3_U1: domestic libc jumbo patch

    Correct a problem where ftp, ping and other internet connection
    programs coredump if they try and connect to a machine with multiple
    A records. Please be sure to install the domestic version, and not
    the international version, if you are in the US, because the
    international version does not include encryption, which is
    necessary for login to work correctly.

   5.2: FTP Patches for Solaris

  101653-01 SunOS 5.3: case mapping in ftp doesn't work for the mget command

    Fixes a minor conflict in ftp between the case and mget commands.

   5.3: TFTP Patches for Solaris

  102773-01 SunOS 5.4: in.tftpd very slow on solaris 2.4

    Corrects an error where tftp could run very slowly and give "child status
    has changed" messages. Currently is only available as a T (test)
    patch. If this is a large problem for you, ask a SunService engineer
    if you can be sent the preliminary patch.

  6.0 Known Bugs and RFEs

   6.0: Known Bugs & RFEs

  The following bugs & rfes reflect currently open issues with the FTP
  software.
   6.1: Bugs

  1167893   FTPD fails: 425 Can't create data socket (129.148.5.117,20): Inte

    Occasionally, after anonymous FTP has been running for a while on a
    Solaris 2.4 machine, it will start failing with "Interrupted System
    Call" errors. This bug is currently under investigation.

   6.2: RFEs

  1030210   Allow ftp set file permissions upon file transfers

    Currently, when a user 'put's a file to a Sun machine, the file ends
    up with permissions of 666. This RFE requests that the user's umask
    instead be respected.

  7.0 References

   7.1: Important Man Pages

    ftp
    ftpd
    ftpusers
    netrc
    tftp
    tftpd

   7.2 Sunsolve Documents

  There are a number of Sunsolve documents concerning FTP. The ones
  listed below are simply those which contain some information
  which is not already in this document.
  7.2.1: FAQs

  1285      Relationship between ftp and inetd.conf

  7.2.2: SRDBs

  3035      how to set up cron to automate a ftp session
  4099      Change in ftp packet sizes
  4742      Transferring binary or executable files via ftp or tftp
  11195     Files created by in.ftpd always have permissions 666 at

   7.3 Sun Educational Services

  [pending]

   7.4: Solaris Documentation

  [pending]

   7.5: Third Party Documentation

  _Managing Internet Information Services_, by Liu, Peek, Jones, Buus &
  Nye, published by O'Reilly & Associates, ISBN #1-56592-062-7

    This book, dedicated to all the different Internet services (WWW,
    Gopher, WAIS, etc), includes three chapters on setting up and
    maintaining an FTP archive.

   7.6: RFCs

  RFCs are the internet-written documents that define the specifications
  of many common networking programs. RFCs can be retrieved from
  nic.ddn.mil, in the /rfc directory, or through the following link.

  link to: http://www.cis.ohio-state.edu/hypertext/information/rfc.html

  640  Revised FTP Reply Codes

       Definition of the numerical codes that FTP returns after each
       action.

  959  File Transfer Protocol
       Spec for the FTP protocol.

  1350 THE TFTP PROTOCOL (REVISION 2)
       Spec for the TFTP protocol.

  1635 How to Use Anonymous FTP

       Introductory document on using FTP to access anonymous sites.