Der (Neu)Start eines Dienstes Linux im Netzwerk Der Remote Procedure Call Inhalt Index


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:

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


Der (Neu)Start eines Dienstes Linux im Netzwerk Der Remote Procedure Call Inhalt Index