fbpx
Wikipedia

inetd

inetd (internet service daemon) is a super-server daemon on many Unix systems that provides Internet services. For each configured service, it listens for requests from connecting clients. Requests are served by spawning a process which runs the appropriate executable, but simple services such as echo are served by inetd itself. External executables, which are run on request, can be single- or multi-threaded. First appearing in 4.3BSD,[1] it is generally located at /usr/sbin/inetd.

Function

Often called a super-server, inetd listens on designated ports used by Internet services such as FTP, POP3, and telnet. When a TCP packet or UDP packet arrives with a particular destination port number, inetd launches the appropriate server program to handle the connection. For services that are not expected to run with high loads, this method uses memory more efficiently, since the specific servers run only when needed. Furthermore, in inetd's "nowait" mode of service management, no network code is required in the service-specific programs, as inetd hooks the network stream directly to stdin and stdout of the spawned process. For protocols that have frequent traffic, such as HTTP and POP3, either inetd's "wait" mode of operation, or a dedicated server that intercepts the traffic directly may be preferable.

Setup

The list of services that will be serviced is given in a configuration file, usually /etc/inetd.conf. A GUI for managing the configuration file is an optional accessory. The daemon may need a signal in order to re-read its configuration. For an example, telnet can be configured as follows (line taken from a machine running AIX version 5.1):

telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a 

The first word, telnet, is the official name of the service. It is resolved using the system database to map port numbers and protocols to service names. In this case, /etc/services should contain:

telnet 23/tcp 

The second and third words describe the type of socket and underlying protocol respectively. The /etc/protocols database is consulted.

The fourth word is the wait/nowait switch. A single-threaded server expects inetd to wait until it finishes reading all the data. Otherwise inetd lets the server run and spawns new, concurrent processes for new requests.

The fifth word is the user name, from the /etc/passwd database, that the service program should run as.

Finally, the path and the arguments of an external program are given. As usual, the first argument is the program name. In the example, inetd is told to launch the program /usr/sbin/telnetd with the command line arguments telnetd -a. inetd automatically hooks the socket to stdin, stdout, and stderr of the server program.

Generally TCP sockets are handled by spawning a separate server to handle each connection concurrently. UDP sockets are generally handled by a single server instance that handles all packets on that port.

Some simple services, such as echo, are handled directly by inetd, without spawning an external server.

Creating an inetd service

This is a simple inetd service, written in C. It expects a command line argument containing a filename for a log file, and then it logs all strings sent through the socket to the log file. Note that this is a very insecure example program.

#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) {  const char *fn = argv[1];  FILE *fp = fopen(fn, "a+");  if (fp == NULL)   exit(EXIT_FAILURE);  char str[4096];  /* inetd passes its information to us in stdin. */  while (fgets(str, sizeof str, stdin)) {  fputs(str, fp);  fflush(fp);  }  fclose(fp);  return 0; } 

The example uses stdio functions and it responds to network traffic coming in on stdin. In this case, we want all messages logged to a single file, so we only want one instance of the service running to service all requests. This means UDP is the correct protocol to use. First, an unused port number must be selected. In this sample, 9999 will be used. The /etc/services entry will look like this:

errorLogger 9999/udp 

And the entry in /etc/inetd.conf will look like this:

errorLogger dgram udp wait root /usr/local/bin/errlogd errlogd /tmp/logfile.txt 

This tells inetd to run the /usr/local/bin/errlogd program, with the commandline: errlogd /tmp/logfile.txt (refer to the inetd.conf man page for information on the other arguments). The first argument contains the filename to be used for the log file: /tmp/logfile.txt. inetd will run the service when needed, and attach port 9999 to the input and output streams, and all strings sent to that port will be logged to the file. By specifying wait, it tells inetd to only use one instance of the server to handle all requests.

Note: the functionality of the above example is usually implemented by using syslog and a process like syslogd. syslogd would normally be started in parallel with inetd, not as an inetd service.

inetd replacements

In recent years, because of the security limitations in the original design of inetd, it has been replaced by xinetd, rlinetd, ucspi-tcp, and others in many systems. Distributions of Linux especially have many options and Mac OS X (beginning with Mac OS X v10.2) uses xinetd. As of version Mac OS X v10.4, Apple has merged the functionality of inetd into launchd.

The services provided by inetd can be omitted entirely. This is becoming more common where machines are dedicated to a single function. For example, an HTTP server could be configured to just run httpd and have no other ports open. A dedicated firewall could have no services started.

systemd supports inetd services, and expands socket activation beyond IP messaging (AF INET+6) to include AF UNIX, AF NETLINK and more.[2][3]

Security concerns

While the inetd concept as a service dispatcher is not inherently insecure, the long list of services that inetd traditionally provided gave computer security experts pause. The possibility of a service having an exploitable flaw, or the service just being abused, had to be considered. Unnecessary services being disabled and "off by default" became the mantra. It is not uncommon to find an /etc/inetd.conf with almost all the services commented out in a modern Unix distribution.

See also

References

  1. ^ inetd(8) – FreeBSD System Manager's Manual
  2. ^ "Systemd for Developers I".
  3. ^ "Rethinking PID 1".

External links

  • inetd(8): internet 'super-server' – FreeBSD System Manager's Manual

inetd, this, article, needs, additional, citations, verification, please, help, improve, this, article, adding, citations, reliable, sources, unsourced, material, challenged, removed, find, sources, inetd, news, newspapers, books, scholar, jstor, june, 2012, l. This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Inetd news newspapers books scholar JSTOR June 2012 Learn how and when to remove this template message inetd internet service daemon is a super server daemon on many Unix systems that provides Internet services For each configured service it listens for requests from connecting clients Requests are served by spawning a process which runs the appropriate executable but simple services such as echo are served by inetd itself External executables which are run on request can be single or multi threaded First appearing in 4 3BSD 1 it is generally located at usr sbin inetd Contents 1 Function 2 Setup 3 Creating an inetd service 4 inetd replacements 5 Security concerns 6 See also 7 References 8 External linksFunction EditOften called a super server inetd listens on designated ports used by Internet services such as FTP POP3 and telnet When a TCP packet or UDP packet arrives with a particular destination port number inetd launches the appropriate server program to handle the connection For services that are not expected to run with high loads this method uses memory more efficiently since the specific servers run only when needed Furthermore in inetd s nowait mode of service management no network code is required in the service specific programs as inetd hooks the network stream directly to stdin and stdout of the spawned process For protocols that have frequent traffic such as HTTP and POP3 either inetd s wait mode of operation or a dedicated server that intercepts the traffic directly may be preferable Setup EditThe list of services that will be serviced is given in a configuration file usually etc inetd conf A GUI for managing the configuration file is an optional accessory The daemon may need a signal in order to re read its configuration For an example telnet can be configured as follows line taken from a machine running AIX version 5 1 telnet stream tcp6 nowait root usr sbin telnetd telnetd a The first word telnet is the official name of the service It is resolved using the system database to map port numbers and protocols to service names In this case etc services should contain telnet 23 tcp The second and third words describe the type of socket and underlying protocol respectively The etc protocols database is consulted The fourth word is the wait nowait switch A single threaded server expects inetd to wait until it finishes reading all the data Otherwise inetd lets the server run and spawns new concurrent processes for new requests The fifth word is the user name from the etc passwd database that the service program should run as Finally the path and the arguments of an external program are given As usual the first argument is the program name In the example inetd is told to launch the program usr sbin telnetd with the command line arguments telnetd a inetd automatically hooks the socket to stdin stdout and stderr of the server program Generally TCP sockets are handled by spawning a separate server to handle each connection concurrently UDP sockets are generally handled by a single server instance that handles all packets on that port Some simple services such as echo are handled directly by inetd without spawning an external server Creating an inetd service EditThis is a simple inetd service written in C It expects a command line argument containing a filename for a log file and then it logs all strings sent through the socket to the log file Note that this is a very insecure example program include lt stdio h gt include lt stdlib h gt int main int argc char argv const char fn argv 1 FILE fp fopen fn a if fp NULL exit EXIT FAILURE char str 4096 inetd passes its information to us in stdin while fgets str sizeof str stdin fputs str fp fflush fp fclose fp return 0 The example uses stdio functions and it responds to network traffic coming in on stdin In this case we want all messages logged to a single file so we only want one instance of the service running to service all requests This means UDP is the correct protocol to use First an unused port number must be selected In this sample 9999 will be used The etc services entry will look like this errorLogger 9999 udp And the entry in etc inetd conf will look like this errorLogger dgram udp wait root usr local bin errlogd errlogd tmp logfile txt This tells inetd to run the usr local bin errlogd program with the commandline errlogd tmp logfile txt refer to the inetd conf man page for information on the other arguments The first argument contains the filename to be used for the log file tmp logfile txt inetd will run the service when needed and attach port 9999 to the input and output streams and all strings sent to that port will be logged to the file By specifying wait it tells inetd to only use one instance of the server to handle all requests Note the functionality of the above example is usually implemented by using syslog and a process like syslogd syslogd would normally be started in parallel with inetd not as an inetd service inetd replacements EditIn recent years because of the security limitations in the original design of inetd it has been replaced by xinetd rlinetd ucspi tcp and others in many systems Distributions of Linux especially have many options and Mac OS X beginning with Mac OS X v10 2 uses xinetd As of version Mac OS X v10 4 Apple has merged the functionality of inetd into launchd The services provided by inetd can be omitted entirely This is becoming more common where machines are dedicated to a single function For example an HTTP server could be configured to just run httpd and have no other ports open A dedicated firewall could have no services started systemd supports inetd services and expands socket activation beyond IP messaging AF INET 6 to include AF UNIX AF NETLINK and more 2 3 Security concerns EditWhile the inetd concept as a service dispatcher is not inherently insecure the long list of services that inetd traditionally provided gave computer security experts pause The possibility of a service having an exploitable flaw or the service just being abused had to be considered Unnecessary services being disabled and off by default became the mantra It is not uncommon to find an etc inetd conf with almost all the services commented out in a modern Unix distribution See also EditTCP Wrapper xinetd List of TCP and UDP port numbers Svchost exeReferences Edit inetd 8 FreeBSD System Manager s Manual Systemd for Developers I Rethinking PID 1 External links Editinetd 8 internet super server FreeBSD System Manager s Manual Retrieved from https en wikipedia org w index php title Inetd amp oldid 1062381013, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.