FTPD(8) | MidnightBSD System Manager's Manual | FTPD(8) |
ftpd
— Internet
File Transfer Protocol server
ftpd |
[-468ABDdEhMmOoRrSUvW ]
[-l [-l ]]
[-a address]
[-P port]
[-p file]
[-T maxtimeout]
[-t timeout]
[-u umask] |
The ftpd
utility is the Internet File
Transfer Protocol server process. The server uses the TCP protocol and
listens at the port specified with the -P
option or
in the “ftp” service specification; see
services(5).
Available options:
-4
-D
is specified, accept connections via
AF_INET
socket.-6
-D
is specified, accept connections via
AF_INET6
socket.-8
This option does not enable any encoding conversion for server
file names; it implies instead that the names of files on the server are
encoded in UTF-8. As for files uploaded via FTP, it is the duty of the
RFC 2640 compliant client to convert their names from the
client's local encoding to UTF-8. FTP command names and own
ftpd
messages are always encoded in ASCII, which
is a subset of UTF-8. Hence no need for server-side conversion at
all.
-A
-a
-D
is specified, accept connections only on
the specified address.-B
ftpd
sends authentication
success and failure messages to the
blacklistd(8)
daemon. If this option is not specified, no communcation with the
blacklistd(8)
daemon is attempted.-D
ftpd
will detach and become
a daemon, accepting connections on the FTP port and forking children
processes to handle them. This is lower overhead than starting
ftpd
from
inetd(8) and is thus
useful on busy servers to reduce load.-d
LOG_FTP
.-E
-h
-l
LOG_FTP
. If this
option is specified twice, the retrieve (get), store (put), append,
delete, make directory, remove directory and rename operations and their
filename arguments are also logged. By default,
syslogd(8) logs these
to /var/log/xferlog.-M
-m
-O
-o
is also specified.-o
-P
-D
is specified, accept connections at
port, specified as a numeric value or service name,
instead of at the default “ftp” port.-p
-D
is specified, write the daemon's process
ID to file instead of the default pid file,
/var/run/ftpd.pid.-R
ftpd
will revert to
historical behavior with regard to security checks on user operations and
restrictions on PORT requests. Currently, ftpd
will only honor PORT commands directed to unprivileged ports on the remote
user's host (which violates the FTP protocol specification but closes some
security holes).-r
-S
ftpd
logs all anonymous file
downloads to the file /var/log/ftpd when this file
exists.-T
-T
option. The default limit is 2 hours.-t
-U
IP_PORTRANGE_DEFAULT
instead of in the range of
IP_PORTRANGE_HIGH
. Such a change may be useful for
some specific firewall configurations; see
ip(4) for more information.
Note that option is a virtual no-op in FreeBSD 5.0 and above; both port ranges are identical by default.
-u
-v
-d
.-W
The file /var/run/nologin can be used to
disable ftp access. If the file exists, ftpd
displays it and exits. If the file /etc/ftpwelcome
exists, ftpd
prints it before issuing the
“ready” message. If the file
/etc/ftpmotd exists, ftpd
prints it after a successful login. Note the motd file used is the one
relative to the login environment. This means the one in
~ftp/etc in the anonymous user's case.
The ftp server currently supports the following ftp requests. The
case of the requests is ignored. Requests marked [RW] are disabled if
-r
is specified.
Request | Description |
ABOR | abort previous command |
ACCT | specify account (ignored) |
ALLO | allocate storage (vacuously) |
APPE | append to a file [RW] |
CDUP | change to parent of current working directory |
CWD | change working directory |
DELE | delete a file [RW] |
EPRT | specify data connection port, multiprotocol |
EPSV | prepare for server-to-server transfer, multiprotocol |
FEAT | give information on extended features of server |
HELP | give help information |
LIST | give list files in a directory (“ls
-lgA ”) |
LPRT | specify data connection port, multiprotocol |
LPSV | prepare for server-to-server transfer, multiprotocol |
MDTM | show last modification time of file |
MKD | make a directory [RW] |
MODE | specify data transfer mode |
NLST | give name list of files in directory |
NOOP | do nothing |
PASS | specify password |
PASV | prepare for server-to-server transfer |
PORT | specify data connection port |
PWD | print the current working directory |
QUIT | terminate session |
REST | restart incomplete transfer |
RETR | retrieve a file |
RMD | remove a directory [RW] |
RNFR | specify rename-from file name [RW] |
RNTO | specify rename-to file name [RW] |
SITE | non-standard commands (see next section) |
SIZE | return size of file |
STAT | return status of server |
STOR | store a file [RW] |
STOU | store a file with a unique name [RW] |
STRU | specify data transfer structure |
SYST | show operating system type of server system |
TYPE | specify data transfer type |
USER | specify user name |
XCUP | change to parent of current working directory (deprecated) |
XCWD | change working directory (deprecated) |
XMKD | make a directory (deprecated) [RW] |
XPWD | print the current working directory (deprecated) |
XRMD | remove a directory (deprecated) [RW] |
The following non-standard or UNIX specific commands are supported by the SITE request.
Request | Description |
UMASK | change umask, e.g. ``SITE UMASK 002'' |
IDLE | set idle-timer, e.g. ``SITE IDLE 60'' |
CHMOD | change mode of a file [RW], e.g. ``SITE CHMOD 755 filename'' |
MD5 | report the files MD5 checksum, e.g. ``SITE MD5 filename'' |
HELP | give help information |
Note: SITE requests are disabled in case of anonymous logins.
The remaining ftp requests specified in Internet RFC 959 are recognized, but not implemented. MDTM and SIZE are not specified in RFC 959, but will appear in the next updated FTP RFC. To avoid possible denial-of-service attacks, SIZE requests against files larger than 10240 bytes will be denied if the current transfer type is ASCII.
The ftp server will abort an active file transfer only when the ABOR command is preceded by a Telnet "Interrupt Process" (IP) signal and a Telnet "Synch" signal in the command Telnet stream, as described in Internet RFC 959. If a STAT command is received during a data transfer, preceded by a Telnet IP and Synch, transfer status will be returned.
The ftpd
utility interprets file names
according to the “globbing” conventions used by
csh(1). This allows users to
utilize the metacharacters
“*?[]{}~
”.
The ftpd
utility authenticates users
according to six rules.
@
’ sign.@
’, the session's root will be
changed to the directory specified in this file or to the user's login
directory by chroot(2)
as for an “anonymous” or “ftp” account (see
next item). See
ftpchroot(5) for a
detailed description of the format of this file. This facility may also be
triggered by enabling the boolean "ftp-chroot" capability in
login.conf(5).
However, the user must still supply a password. This feature is intended
as a compromise between a fully anonymous account and a fully privileged
account. The account should also be set up as for an anonymous
account.-S
option is set, all transfers are logged as well.In the last case, ftpd
takes special
measures to restrict the client's access privileges. The server performs a
chroot(2) to the home
directory of the “ftp” user. As a special case if the
“ftp” user's home directory pathname contains the
/./ separator, ftpd
uses its
left-hand side as the name of the directory to do
chroot(2) to, and its
right-hand side to change the current directory to afterwards. A typical
example for this case would be /var/spool/ftp/./pub.
In order that system security is not breached, it is recommended that the
“ftp” subtree be constructed with care, following these
rules:
If the system has multiple IP addresses,
ftpd
supports the idea of virtual hosts, which
provides the ability to define multiple anonymous ftp areas, each one
allocated to a different internet address. The file
/etc/ftphosts contains information pertaining to
each of the virtual hosts. Each host is defined on its own line which
contains a number of fields separated by whitespace:
Lines beginning with a '#' are ignored and can be used to include comments.
Defining a virtual host for the primary IP address or hostname changes the default for ftp logins to that address. The 'user', 'statfile', 'welcome' and 'motd' fields may be left blank, or a single hyphen '-' used to indicate that the default value is to be used.
As with any anonymous login configuration, due care must be given to setup and maintenance to guard against security related problems.
The ftpd
utility has internal support for
handling remote requests to list files, and will not execute
/bin/ls in either a chrooted or non-chrooted
environment. The ~/bin/ls executable need not be
placed into the chrooted tree, nor need the ~/bin
directory exist.
ftp(1), umask(2), getusershell(3), opie(4), ftpchroot(5), login.conf(5), inetd(8), syslogd(8)
The ftpd
utility appeared in
4.2BSD. IPv6 support was added in WIDE Hydrangea
IPv6 stack kit.
The server must run as the super-user to create sockets with privileged port numbers. It maintains an effective user id of the logged in user, reverting to the super-user only when binding addresses to sockets. The possible security holes have been extensively scrutinized, but are possibly incomplete.
June 28, 2022 | midnightbsd-3.1 |