ProFTPD 1.2 README - Solaris 2.5.x


Using ProFTPD with Solaris 2.5.1 (possibly even other versions):
[Ed: Note, in Solaris 2.6 this is no longer necessary]

Solaris 2.5.1 has an odd problem involving TCP sockets inside of a chroot(), as used with DefaultRoot and <Anonymous> logins. Apparently, due to the Solaris XTI code, socket operations initially attempt to open a few devices, including /dev/tcp, /dev/udp, /dev/zero and /dev/ticotsord. This is most likely caused by the networking libraries, and is completely out of the control and/or scope of ProFTPD.

Solaris 2.5.1 users wishing to use ProFTPD will have to do something like the following in their anonymous or otherwise chroot'ed directories:

  [ !!NOTE!! Do not use the major/minor device numbers below verbatim.
  Solaris on different archs will use different major/minors.  Check
  your OS documentation first before doing this. ]

  mkdir dev
  mknod dev/tcp c 11 42
  mknod dev/udp c 11 41
  mknod dev/zero c 13 12
  mknod dev/ticotsord c 105 1
Solaris 2.5 (and possibly 2.5.1) requires these additional device nodes to be created in order to avoid a system panic when the loopback interface is used:
  mknod dev/ticlts c 105 2
  mknod dev/ticots c 105 0

  # the following is necessary to allow proftpd to create a socket
  # when in non-low-port mode (such as during passive transfers)
  chmod 0666 dev/tcp
Failure to create these files will result in "socket() failed in inet_create_connection(): No such file or directory" when a user logs in anonymously and attempts to transfer data of any type (including a simple directory listing).

If you receive errors such as "socket() failed in inet_create_connection(): Permission denied", you need to chmod 0666 your dev/tcp device.