xref: /freebsd/usr.sbin/inetd/inetd.8 (revision 7660b554bc59a07be0431c17e0e33815818baa69)
1.\" Copyright (c) 1985, 1991, 1993, 1994
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     from: @(#)inetd.8	8.3 (Berkeley) 4/13/94
33.\" $FreeBSD$
34.\"
35.Dd February 7, 1996
36.Dt INETD 8
37.Os
38.Sh NAME
39.Nm inetd
40.Nd internet
41.Dq super-server
42.Sh SYNOPSIS
43.Nm
44.Op Fl d
45.Op Fl l
46.Op Fl w
47.Op Fl W
48.Op Fl c Ar maximum
49.Op Fl C Ar rate
50.Op Fl a Ar address | hostname
51.Op Fl p Ar filename
52.Op Fl R Ar rate
53.Op Fl s Ar maximum
54.Op Ar configuration file
55.Sh DESCRIPTION
56The
57.Nm
58utility should be run at boot time by
59.Pa /etc/rc
60(see
61.Xr rc 8 ) .
62It then listens for connections on certain
63internet sockets.  When a connection is found on one
64of its sockets, it decides what service the socket
65corresponds to, and invokes a program to service the request.
66The server program is invoked with the service socket
67as its standard input, output and error descriptors.
68After the program is
69finished,
70.Nm
71continues to listen on the socket (except in some cases which
72will be described below).  Essentially,
73.Nm
74allows running one daemon to invoke several others,
75reducing load on the system.
76.Pp
77The following options are available:
78.Bl -tag -width indent
79.It Fl d
80Turn on debugging.
81.It Fl l
82Turn on logging of successful connections.
83.It Fl w
84Turn on TCP Wrapping for external services.
85See the
86.Sx "IMPLEMENTATION NOTES"
87section for more information on TCP Wrappers support.
88.It Fl W
89Turn on TCP Wrapping for internal services which are built in to
90.Nm .
91.It Fl c Ar maximum
92Specify the default maximum number of
93simultaneous invocations of each service;
94the default is unlimited.
95May be overridden on a per-service basis with the "max-child"
96parameter.
97.It Fl C Ar rate
98Specify the default maximum number of times a service can be invoked
99from a single IP address in one minute; the default is unlimited.
100May be overridden on a per-service basis with the
101"max-connections-per-ip-per-minute" parameter.
102.It Fl R Ar rate
103Specify the maximum number of times a service can be invoked
104in one minute; the default is 256.
105A rate of 0 allows an unlimited number of invocations.
106.It Fl s Ar maximum
107Specify the default maximum number of
108simultaneous invocations of each service from a single IP address;
109the default is unlimited.
110May be overridden on a per-service basis with the "max-child-per-ip"
111parameter.
112.It Fl a
113Specify one specific IP address to bind to.
114Alternatively, a hostname can be specified,
115in which case the IPv4 or IPv6 address
116which corresponds to that hostname is used.
117Usually a hostname is specified when
118.Nm
119is run inside a
120.Xr jail 8 ,
121in which case the hostname corresponds to the
122.Xr jail 8
123environment.
124.Pp
125When hostname specification is used
126and both IPv4 and IPv6 bindings are desired,
127one entry with the appropriate
128.Em protocol
129type for each binding
130is required for each service in
131.Pa /etc/inetd.conf .
132For example,
133a TCP-based service would need two entries,
134one using
135.Dq tcp4
136for the
137.Em protocol
138and the other using
139.Dq tcp6 .
140See the explanation of the
141.Pa /etc/inetd.conf
142.Em protocol
143field below.
144.It Fl p
145Specify an alternate file in which to store the process ID.
146.El
147.Pp
148Upon execution,
149.Nm
150reads its configuration information from a configuration
151file which, by default, is
152.Pa /etc/inetd.conf .
153There must be an entry for each field of the configuration
154file, with entries for each field separated by a tab or
155a space.  Comments are denoted by a
156.Dq #
157at the beginning
158of a line.  There must be an entry for each field.  The
159fields of the configuration file are as follows:
160.Pp
161.Bd -unfilled -offset indent -compact
162service name
163socket type
164protocol
165{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
166user[:group][/login-class]
167server program
168server program arguments
169.Ed
170.Pp
171To specify an
172.Tn "ONC RPC" Ns -based
173service, the entry would contain these fields:
174.Pp
175.Bd -unfilled -offset indent -compact
176service name/version
177socket type
178rpc/protocol
179user[:group][/login-class]
180server program
181server program arguments
182.Ed
183.Pp
184There are two types of services that
185.Nm
186can start: standard and TCPMUX.
187A standard service has a well-known port assigned to it;
188it may be a service that implements an official Internet standard or is a
189.Bx Ns -specific
190service.
191As described in
192.Tn RFC 1078 ,
193TCPMUX services are nonstandard services that do not have a
194well-known port assigned to them.
195They are invoked from
196.Nm
197when a program connects to the
198.Dq tcpmux
199well-known port and specifies
200the service name.
201This feature is useful for adding locally-developed servers.
202TCPMUX requests are only accepted when the multiplexor service itself
203is enabled, above and beyond and specific TCPMUX-based servers; see the
204discussion of internal services below.
205.Pp
206The
207.Em service-name
208entry is the name of a valid service in
209the file
210.Pa /etc/services ,
211or the specification of a
212.Ux
213domain socket (see below).
214For
215.Dq internal
216services (discussed below), the service
217name
218should
219be the official name of the service (that is, the first entry in
220.Pa /etc/services ) .
221When used to specify an
222.Tn "ONC RPC" Ns -based
223service, this field is a valid RPC service name in
224the file
225.Pa /etc/rpc .
226The part on the right of the
227.Dq /
228is the RPC version number.
229This
230can simply be a single numeric argument or a range of versions.
231A range is bounded by the low version to the high version -
232.Dq rusers/1-3 .
233For TCPMUX services, the value of the
234.Em service-name
235field consists of the string
236.Dq tcpmux
237followed by a slash and the
238locally-chosen service name.
239The service names listed in
240.Pa /etc/services
241and the name
242.Dq help
243are reserved.
244Try to choose unique names for your TCPMUX services by prefixing them with
245your organization's name and suffixing them with a version number.
246.Pp
247The
248.Em socket-type
249should be one of
250.Dq stream ,
251.Dq dgram ,
252.Dq raw ,
253.Dq rdm ,
254or
255.Dq seqpacket ,
256depending on whether the socket is a stream, datagram, raw,
257reliably delivered message, or sequenced packet socket.
258TCPMUX services must use
259.Dq stream .
260.Pp
261The
262.Em protocol
263must be a valid protocol or
264.Dq unix .
265Examples are
266.Dq tcp
267or
268.Dq udp ,
269both of which imply IPv4 for backward compatibility.
270The names
271.Dq tcp4
272and
273.Dq udp4
274specify IPv4 only.
275The names
276.Dq tcp6
277and
278.Dq udp6
279specify IPv6 only.
280The names
281.Dq tcp46
282and
283.Dq udp46
284specify that the entry accepts both IPv4 and IPv6 connections
285via a wildcard
286.Dv AF_INET6
287socket.
288If it is desired that the service is reachable via T/TCP, one should
289specify
290.Dq tcp/ttcp ,
291which implies IPv4 for backward compatibility.
292The name
293.Dq tcp4/ttcp
294specifies IPv4 only, while
295.Dq tcp6/ttcp
296specifies IPv6 only.
297The name
298.Dq tcp46/ttcp
299specify that the entry accepts both IPv6 and IPv6 connections
300via a wildcard
301.Dv AF_INET6
302socket.
303Rpc based services
304are specified with the
305.Dq rpc/tcp
306or
307.Dq rpc/udp
308service type.
309One can use specify IPv4 and/or IPv6 with the 4, 6 or 46 suffix, for example
310.Dq rpc/tcp6
311or
312.Dq rpc/udp46 .
313TCPMUX services must use
314.Dq tcp ,
315.Dq tcp4 ,
316.Dq tcp6
317or
318.Dq tcp46 .
319.Pp
320The
321.Em wait/nowait
322entry specifies whether the server that is invoked by
323.Nm
324will take over
325the socket associated with the service access point, and thus whether
326.Nm
327should wait for the server to exit before listening for new service
328requests.
329Datagram servers must use
330.Dq wait ,
331as they are always invoked with the original datagram socket bound
332to the specified service address.
333These servers must read at least one datagram from the socket
334before exiting.
335If a datagram server connects
336to its peer, freeing the socket so
337.Nm
338can receive further messages on the socket, it is said to be
339a
340.Dq multi-threaded
341server;
342it should read one datagram from the socket and create a new socket
343connected to the peer.
344It should fork, and the parent should then exit
345to allow
346.Nm
347to check for new service requests to spawn new servers.
348Datagram servers which process all incoming datagrams
349on a socket and eventually time out are said to be
350.Dq single-threaded .
351The
352.Xr comsat 8 ,
353.Pq Xr biff 1
354and
355.Xr talkd 8
356utilities are both examples of the latter type of
357datagram server.
358The
359.Xr tftpd 8
360utility is an example of a multi-threaded datagram server.
361.Pp
362Servers using stream sockets generally are multi-threaded and
363use the
364.Dq nowait
365entry.
366Connection requests for these services are accepted by
367.Nm ,
368and the server is given only the newly-accepted socket connected
369to a client of the service.
370Most stream-based services operate in this manner.
371Stream-based servers that use
372.Dq wait
373are started with the listening service socket, and must accept
374at least one connection request before exiting.
375Such a server would normally accept and process incoming connection
376requests until a timeout.
377TCPMUX services must use
378.Dq nowait .
379.Pp
380The maximum number of outstanding child processes (or
381.Dq threads )
382for a
383.Dq nowait
384service may be explicitly specified by appending a
385.Dq /
386followed by the number to the
387.Dq nowait
388keyword.
389Normally
390(or if a value of zero is specified) there is no maximum.
391Otherwise,
392once the maximum is reached, further connection attempts will be
393queued up until an existing child process exits.
394This also works
395in the case of
396.Dq wait
397mode, although a value other than one (the
398default) might not make sense in some cases.
399You can also specify the maximum number of connections per minute
400for a given IP address by appending
401a
402.Dq /
403followed by the number to the maximum number of
404outstanding child processes.
405Once the maximum is reached, further
406connections from this IP address will be dropped until the end of the
407minute.
408In addition, you can specify the maximum number of simultaneous
409invocations of each service from a single IP address by appending a
410.Dq /
411followed by the number to the maximum number of outstanding child
412processes.  Once the maximum is reached, further connections from this
413IP address will be dropped.
414.Pp
415The
416.Em user
417entry should contain the user name of the user as whom the server
418should run.  This allows for servers to be given less permission
419than root.
420Optional
421.Em group
422part separated by
423.Dq \&:
424allows to specify group name different
425than default group for this user.
426Optional
427.Em login-class
428part separated by
429.Dq /
430allows to specify login class different
431than default
432.Dq daemon
433login class.
434.Pp
435The
436.Em server-program
437entry should contain the pathname of the program which is to be
438executed by
439.Nm
440when a request is found on its socket.  If
441.Nm
442provides this service internally, this entry should
443be
444.Dq internal .
445.Pp
446The
447.Em server program arguments
448should be just as arguments
449normally are, starting with argv[0], which is the name of
450the program.  If the service is provided internally, the
451.Em service-name
452of the service (and any arguments to it) or the word
453.Dq internal
454should take the place of this entry.
455.Pp
456Currently, the only internal service to take arguments is
457.Dq auth .
458Without options, the service will always return
459.Dq ERROR\ : HIDDEN-USER .
460The available arguments to this service that alter its behavior are:
461.Bl -tag -width indent
462.It Fl d Ar fallback
463Provide a
464.Ar fallback
465username.
466If the real
467.Dq auth
468service is enabled
469(with the
470.Fl r
471option discussed below),
472return this username instead of an error
473when lookups fail
474for either socket credentials or the username.
475If the real
476.Dq auth
477service is disabled,
478return this username for every request.
479This is primarily useful when running this service on a NAT machine.
480.It Fl g
481Instead of returning
482the user's name to the ident requester,
483report a
484username made up of random alphanumeric characters,
485e.g.\&
486.Dq c0c993 .
487The
488.Fl g
489flag overrides not only the user names,
490but also any fallback name,
491.Pa .fakeid
492or
493.Pa .noident
494files.
495.It Fl t Xo
496.Ar sec Ns Op . Ns Ar usec
497.Xc
498Specify a timeout for the service.
499The default timeout is 10.0 seconds.
500.It Fl r
501Offer a real
502.Dq auth
503service, as per RFC 1413.
504All the remaining flags apply only in this case.
505.It Fl i
506Return numeric user IDs instead of usernames.
507.It Fl f
508If the file
509.Pa .fakeid
510exists in the home directory of the identified user, report the username
511found in that file instead of the real username.
512If the username found in
513.Pa .fakeid
514is that of an existing user,
515then the real username is reported.
516If the
517.Fl i
518flag is also given then the username in
519.Pa .fakeid
520is checked against existing user IDs instead.
521.It Fl F
522same as
523.Fl f
524but without the restriction that the username in
525.Pa .fakeid
526must not match an existing user.
527.It Fl n
528If the file
529.Pa .noident
530exists in the home directory of the identified user, return
531.Dq ERROR\ : HIDDEN-USER .
532This overrides any
533.Pa fakeid
534file which might exist.
535.It Fl o Ar osname
536Use
537.Ar osname
538instead of the name of the system as reported by
539.Xr uname 3 .
540.El
541.Pp
542The
543.Nm
544utility also provides several other
545.Dq trivial
546services internally by use of
547routines within itself.  These services are
548.Dq echo ,
549.Dq discard ,
550.Dq chargen
551(character generator),
552.Dq daytime
553(human readable time), and
554.Dq time
555(machine readable time, in the form of the number of seconds since
556midnight, January 1, 1900).  All of these services are available in
557both TCP and UDP versions; the UDP versions will refuse service if the
558request specifies a reply port corresponding to any internal service.
559(This is done as a defense against looping attacks; the remote IP address
560is logged.)
561For details of these services, consult the
562appropriate
563.Tn RFC
564document.
565.Pp
566The TCPMUX-demultiplexing service is also implemented as an internal service.
567For any TCPMUX-based service to function, the following line must be included
568in
569.Pa inetd.conf :
570.Bd -literal -offset indent
571tcpmux	stream	tcp	nowait	root	internal
572.Ed
573.Pp
574When given the
575.Fl l
576option
577.Nm
578will log an entry to syslog each time a connection is accepted, noting the
579service selected and the IP-number of the remote requester if available.
580Unless otherwise specified in the configuration file,
581and in the absence of the
582.Fl W
583and
584.Fl w
585options,
586.Nm
587will log to the
588.Dq daemon
589facility.
590.Pp
591The
592.Nm
593utility rereads its configuration file when it receives a hangup signal,
594.Dv SIGHUP .
595Services may be added, deleted or modified when the configuration file
596is reread.
597Except when started in debugging mode,
598.Nm
599records its process ID in the file
600.Pa /var/run/inetd.pid
601to assist in reconfiguration.
602.Sh IMPLEMENTATION NOTES
603.Ss TCP Wrappers
604When given the
605.Fl w
606option,
607.Nm
608will wrap all services specified as
609.Dq stream nowait
610or
611.Dq dgram
612except for
613.Dq internal
614services.
615If the
616.Fl W
617option is given, such
618.Dq internal
619services will be wrapped.
620If both options are given, wrapping for both
621internal and external services will be enabled.
622Either wrapping option
623will cause failed connections to be logged to the
624.Dq auth
625syslog facility.
626Adding the
627.Fl l
628flag to the wrapping options will include successful connections in the
629logging to the
630.Dq auth
631facility.
632.Pp
633Note that
634.Nm
635only wraps requests for a
636.Dq wait
637service while no servers are available to service requests.
638Once a
639connection to such a service has been allowed,
640.Nm
641has no control
642over subsequent connections to the service until no more servers
643are left listening for connection requests.
644.Pp
645When wrapping is enabled, the
646.Pa tcpd
647daemon is not required, as that functionality is builtin.
648For more information on TCP Wrappers, see the relevant documentation
649.Pq Xr hosts_access 5 .
650When reading that document, keep in mind that
651.Dq internal
652services have no associated daemon name.
653Therefore, the service name
654as specified in
655.Pa inetd.conf
656should be used as the daemon name for
657.Dq internal
658services.
659.Ss TCPMUX
660.Tn RFC 1078
661describes the TCPMUX protocol:
662``A TCP client connects to a foreign host on TCP port 1.  It sends the
663service name followed by a carriage-return line-feed <CRLF>.  The
664service name is never case sensitive.  The server replies with a
665single character indicating positive (+) or negative (\-)
666acknowledgment, immediately followed by an optional message of
667explanation, terminated with a <CRLF>.  If the reply was positive,
668the selected protocol begins; otherwise the connection is closed.''
669The program is passed the TCP connection as file descriptors 0 and 1.
670.Pp
671If the TCPMUX service name begins with a
672.Dq + ,
673.Nm
674returns the positive reply for the program.
675This allows you to invoke programs that use stdin/stdout
676without putting any special server code in them.
677.Pp
678The special service name
679.Dq help
680causes
681.Nm
682to list TCPMUX services in
683.Pa inetd.conf .
684.Ss IPsec
685The implementation includes a tiny hack
686to support IPsec policy settings for each socket.
687A special form of comment line, starting with
688.Dq Li #@ ,
689is interpreted as a policy specifier.
690Everything after the
691.Dq Li #@
692will be used as an IPsec policy string,
693as described in
694.Xr ipsec_set_policy 3 .
695Each
696policy specifier is applied to all the following lines in
697.Pa inetd.conf
698until the next policy specifier.
699An empty policy specifier resets the IPsec policy.
700.Pp
701If an invalid IPsec policy specifier appears in
702.Pa inetd.conf ,
703.Nm
704will provide an error message via the
705.Xr syslog 3
706interface and abort execution.
707.Ss Ux Domain Sockets
708In addition to running services on IP sockets,
709.Nm
710can also manage
711.Ux
712domain sockets.
713To do this you specify a
714.Em protocol
715of
716.Dq unix
717and specify the
718.Ux
719domain socket as the
720.Em service-name .
721The
722.Em service-type
723may be
724.Dq stream
725or
726.Dq dgram .
727The specification of the socket must be
728an absolute path name,
729optionally prefixed by an owner and mode
730of the form
731.Em :user:group:mode: .
732The specification:
733.Pp
734.Dl ":news:daemon:220:/var/run/sock"
735.Pp
736creates a socket owned
737by user
738.Dq news
739in group
740.Dq daemon
741with permissions allowing only that user and group to connect.
742The default owner is the user that
743.Nm
744is running as.
745The default mode only allows the socket's owner to connect.
746.Pp
747.Sy WARNING :
748while creating
749.Ux
750domain socket,
751.Nm
752must change the ownership and permissions on the socket.
753This can only be done securely if
754the directory in which the socket is created
755is writable only by root.
756Do
757.Em NOT
758use
759.Nm
760to create sockets in world writable directories,
761such as
762.Pa /tmp ,
763instead use
764.Pa /var/run
765or a similar directory.
766.Pp
767Internal services may be run on
768.Ux
769domain sockets, in the usual way.
770In this case
771the name of the internal service
772is determined using
773the last component of the socket's pathname.
774.Sh "FILES"
775.Bl -tag -width /var/run/inetd.pid -compact
776.It Pa /etc/inetd.conf
777configuration file
778.It Pa /etc/rpc
779translation of service names to RPC program numbers
780.It Pa /etc/services
781translation of service names to port numbers
782.It Pa /var/run/inetd.pid
783the pid of the currently running
784.Nm
785.El
786.Sh "EXAMPLES"
787Here are several example service entries for the various types of services:
788.Bd -literal
789ftp          stream  tcp   nowait root  /usr/libexec/ftpd        ftpd -l
790ntalk        dgram   udp   wait   root  /usr/libexec/ntalkd      ntalkd
791telnet       stream  tcp6  nowait root  /usr/libexec/telnetd  telnetd
792shell        stream  tcp46  nowait root  /usr/libexec/rshd rshd
793tcpmux/+date stream  tcp   nowait guest /bin/date                date
794tcpmux/phonebook stream tcp nowait guest /usr/local/bin/phonebook phonebook
795rstatd/1-3   dgram   rpc/udp wait root  /usr/libexec/rpc.rstatd  rpc.rstatd
796/var/run/echo stream unix  nowait root	internal
797#@ ipsec ah/require
798chargen      stream  tcp   nowait root  internal
799#@
800.Ed
801.Sh "ERROR MESSAGES"
802The
803.Nm
804server
805logs error messages using
806.Xr syslog 3 .
807Important error messages and their explanations are:
808.Pp
809.Bl -ohang -compact
810.It Xo
811.Ar service Ns / Ns Ar protocol
812.No "server failing (looping), service terminated."
813.Xc
814The number of requests for the specified service in the past minute
815exceeded the limit.
816The limit exists to prevent a broken program
817or a malicious user from swamping the system.
818This message may occur for several reasons:
819.Bl -enum -offset indent
820.It
821There are many hosts requesting the service within a short time period.
822.It
823A broken client program is requesting the service too frequently.
824.It
825A malicious user is running a program to invoke the service in
826a denial-of-service attack.
827.It
828The invoked service program has an error that causes clients
829to retry quickly.
830.El
831.Pp
832Use the
833.Fl R Ar rate
834option,
835as described above, to change the rate limit.
836Once the limit is reached, the service will be
837reenabled automatically in 10 minutes.
838.Pp
839.It Xo
840.Ar service Ns / Ns Ar protocol :
841.No \&No such user
842.Ar user ,
843.No service ignored
844.Xc
845.It Xo
846.Ar service Ns / Ns Ar protocol :
847.No getpwnam :
848.Ar user :
849.No \&No such user
850.Xc
851No entry for
852.Ar user
853exists in the
854.Xr passwd 5
855database.
856The first message
857occurs when
858.Nm
859(re)reads the configuration file.
860The second message occurs when the
861service is invoked.
862.Pp
863.It Xo
864.Ar service :
865.No can't set uid
866.Ar uid
867.Xc
868.It Xo
869.Ar service :
870.No can't set gid
871.Ar gid
872.Xc
873The user or group ID for the entry's
874.Ar user
875field is invalid.
876.Pp
877.It "setsockopt(SO_PRIVSTATE): Operation not supported"
878The
879.Nm
880utility attempted to renounce the privileged state associated with a
881socket but was unable to.
882.El
883.Sh SEE ALSO
884.Xr ipsec_set_policy 3 ,
885.Xr hosts_access 5 ,
886.Xr hosts_options 5 ,
887.Xr login.conf 5 ,
888.Xr passwd 5 ,
889.Xr rpc 5 ,
890.Xr services 5 ,
891.Xr comsat 8 ,
892.Xr fingerd 8 ,
893.Xr ftpd 8 ,
894.Xr rexecd 8 ,
895.Xr rlogind 8 ,
896.Xr rpcbind 8 ,
897.Xr rshd 8 ,
898.Xr telnetd 8 ,
899.Xr tftpd 8
900.Rs
901.%A Michael C. St. Johns
902.%T Identification Protocol
903.%O RFC1413
904.Re
905.Sh HISTORY
906The
907.Nm
908utility appeared in
909.Bx 4.3 .
910TCPMUX is based on code and documentation by Mark Lottor.
911Support for
912.Tn "ONC RPC"
913based services is modeled after that
914provided by
915.Tn SunOS
9164.1.
917The IPsec hack was contributed by the KAME project in 1999.
918The
919.Fx
920TCP Wrappers support first appeared in
921.Fx 3.2 .
922