# inetd - Der Superdämon

Dämonen sind die guten Geister von Unix. Sie bleiben im Hintergrund und erwachen nur zum Leben, wenn es für sie etwas zu tun gibt. Dann erledigen sie die ihnen zugedachten Aufgaben und begeben sich wieder zur Ruhe, bis erneut ein Auftrag für sie hereinflattert. Früher geisterten viele solcher Dämonen durch den Speicher des Rechners. Sobald das System gestartet wurde, rief man auch die Dämonen heran, selbst wenn der eine oder andere niemals wirklich etwas zu tun bekam. Jeder Server überwachte somit seine Ports, lag an einem etwas an, erzeugte er einen Kindprozess und vererbte diesem die Verbindung. Der Server schloss unverzüglich die Verbindung und erwartete neue Anforderungen... Heute überwacht der `inetd` alle Ports und erst bei Aktivierung an einem dieser Ports startet der inetd einen entsprechenden Server-Prozess, der die bereits eröffnete Verbindung mittels eines Dateideskriptors übergeben bekommt und nun direkt mit dem Clienten kommuniziert. Hat der Server seine Arbeit erledigt, beendet er sich und erst eine erneute Anfrage beim inetd kann ihn wieder heraufbeschwören. Als Fazit ist die meiste Zeit über nur noch ein Prozess aktiv - der `inetd`.

Der `inetd` ist über die Datei `/etc/inetd.conf` konfigurierbar; ein Ausschnitt daraus sei kurz aufgeführt:

`# See "man -S 8 inetd" for more information. # # If you make changes to this file, either reboot your machine # or send the inetd a HUP signal: # Do a "ps x" as root and look up the pid of inetd. Then do a # "kill -HUP <pid of inetd>". # inetd will re-read this file whenever it gets that signal. # # <service_name> <sock_type> <proto> <flags> <user> # <server_path> <args> # #echo stream tcp nowait root internal #echo dgram udp wait root internal discard stream tcp nowait root internal discard dgram udp wait root internal daytime stream tcp nowait root internal daytime dgram udp wait root internal # telnet stream tcp nowait root /usr/sbin/tcpd \ /usr/sbin/in.telnetd ftp stream tcp nowait root /usr/sbin/tcpd \ /usr/sbin/in.ftpd #fsp dgram udp wait root /usr/sbin/tcpd \ /usr/sbin/in.fspd # shell stream tcp nowait root /usr/sbin/tcpd \ /usr/sbin/in.rshd login stream tcp nowait root /usr/sbin/tcpd \ /usr/sbin/in.rlogind smtp stream tcp nowait root /usr/sbin/tcpd \ /usr/sbin/in.smtpd #`

Im Einzelnen bedeuten:

- `service_name` Bezeichnung des Dienstes
- `sock_type` Art des Kommunikationsmechanismus
- `prots` Protokollart
- `flags` für UDP: gibt an, ob der `inetd` sofort neue Anforderungen auf dem Port entgegennehmen oder auf Terminierung des Servers warten soll
- `Programmname und Argumente` Programmname inklusive vollständigem Pfad und optionaler Parameterliste

Die Dienste nach `telnet` im obigen Ausschnitt aus der `/etc/inetd.conf` werden über einen so genannten TCP-Wrapper aufgerufen. Dieser Wrapper nimmt, bevor er die jeweiligen Prozesse startet, verschiedene Initlialisierungen vor. So sucht der TCP-Wrapper in den Dateien `/etc/hosts.allow` und `/etc/hosts.deny` nach den jeweiligen Dienst betreffenden Einstellungen und übergibt diese als Parameter an dieses Programm.Wünscht man mit seinem Rechner auf Netzwerkdienste zuzugreifen oder bietet solche gar an, muss der `inetd` aktiviert werden. Überprüfen lässt sich dies mit:

`user@sonne> ps ax | grep inetd 133 ? S 0:00 /usr/sbin/inetd`

Fehlt die Ausgabe, kann der Dämon von Hand (als Root) gestartet werden:

`root@sonne> /usr/sbin/inetd`

Um den Start beim nächsten Bootvorgang automatisch zu veranlassen, muss der `inetd` in den entsprechenden Runleveln (3 und 4 bei SuSE; 3 und 5 bei RedHat) aktiviert werden. Dazu setzt man in den Runlevel-Verzeichnissen symbolische Links auf das (normalerweise bereits existierende) Skript `/sbin/inet.d/inetd` (SuSE) bzw. `/etc/rc.d/init.d/inet` (RedHat):

`# Beispiel für ein RedHat-basiertes System # zunächst die Startskripte root@sonne> ln -s /etc/rc.d/init.d/inet /etc/rc.d/init.d/rc3.d/S30inet root@sonne> ln -s /etc/rc.d/init.d/inet /etc/rc.d/init.d/rc5.d/S30inet # nun die Stopp-Skripte root@sonne> ln -s /etc/rc.d/init.d/inet /etc/rc.d/init.d/rc0.d/K50inet root@sonne> ln -s /etc/rc.d/init.d/inet /etc/rc.d/init.d/rc6.d/K50inet`

Bei SuSE-Linux passt man die obigen Links entsprechend an oder - sofern man nicht die automatische Konfiguration abgeschalten hat -man setzt die entsprechende Variable in der `/etc/rc.config` (`START_INETD="yes"`) und ruft anschließend `SuSEconfig` auf.

Modifiziert man eine beliebige Konfigurationsdatei im System, so müssen die betreffenden Dienste neu gestartet werden. Im Unterschied zu manch anderen Betriebssystemen muss Linux nicht zwangsläufig neu gebootet werden. Es genügt, den Prozessen ein Signal SIGHUP zu senden, woraufhin diese ihre Konfigurationsdateien neu einlesen. Bearbeitet man z.B. die `/etc/inetd.conf`, informiert man den `inetd` wie folgt:

`root@sonne> killall -HUP inetd`