Dieses Konstrukt beschreibt einen Dienst. Der Parameter
Name ist nur für die bequeme Benennung da, er dient nur dazu,
Protokollmeldungen zu unterscheiden und stellt eine Vorgabe für
Optionen dar, die logischerweise einen Namen als Argument erwarten.
enabled
Dieses Konstrukt erlaubt das leichte Aktivieren oder
Deaktivieren eines Dienstes. Das Argument kann entweder
yes oder
no (ja oder nein) lauten. Der Standardwert lautet
yes. Wird es
auf
no gesetzt, ist der Dienst deaktiviert.
Beispiel:
enabled no;
port
Die Liste der Ports, für die der Dienst
verfügbar gemacht werden soll. Die Ports können entweder als
Zeichenkette oder im numerischen Format angegeben werden. Falls nicht
angegeben, ist die Vorgabe der Name des Dienstes, solange es sich nicht um
einen RPC-Dienst handelt, in dessen Falle der Wert des Ports dynamisch vom
System zugewiesen wird.
Beispiel:
port "telnet", "rcmd", 56,
99;
interface
Dies gibt an, an welche Schnittstelle die
aufgeführten Ports gebunden werden sollen. Es erwartet eine Liste von
IP-Adressen als Argument, entsprechend der konfigurierten Adressen der
benötigten Schnittstellen. Falls dieses Schlüsselwort nicht
angegeben ist oder falls ihm der besondere Wert
any zugewiesen wurde,
wird der Dienst an alle verfügbaren Schnittstellen gebunden.
Beispiele:
interface 192.168.1.1, 192.168.1.2;
interface any;
exec
Dies legt den Aufruf des Dienstes fest. Eine Reihe von
Ersetzungen können innerhalb der Zeichenkette vorgenommen werden, bitte
lesen Sie hierzu
Zeichenketten-Modifikatoren unten.
Beispiel:
exec "/usr/sbin/in.telnetd -d";
server
Dies legt das auszuführende Programm fest, falls
von
exec verschieden.
Beispiel:
server "/usr/sbin/tcpd";
protocol
Dies legt das Socket-Protokoll fest, das beim Warten auf
Verbindungen auf Ports für diesen Dienst verwandt wird. Das Argument
kann entweder
tcp oder
udp sein. Die Vorgabe ist
tcp.
Beispiel:
protocol tcp;
user
Dies legt die Benutzer-ID (»userid«) fest,
unter der dieser Dienst laufen soll. Es akzeptiert ein Argument entweder in
symbolischer oder numerischer Form. Falls
group (siehe unten) nicht
angegeben ist, wird die Gruppen-ID (groupid) auf die primäre Gruppe des
Benutzers gesetzt.
Beispiel:
user "nobody";
group
Dies legt die Gruppen-ID (groupid) fest, unter der dieser
Dienst laufen soll. Es akzeptiert ein Argument entweder in symbolischer oder
numerischer Form.
Beispiel:
group "system";
backlog
Dies ist das »backlog«-Argument, das an den
Systemaufruf
listen(2) übergeben wird.
Beispiel:
backlog 30;
instances
Dies gibt die maximale Anzahl an Dienstinstanzen an, die
gleichzeitig laufen können. Der Standardwert für diese Variable
ist 40.
Beispiel:
instances 50;
wait
Diese Direktive emuliert das
wait-Verhalten von
inetd(8). Das Argument kann entweder
yes oder
no (ja oder
nein) lauten. Der Standardwert ist
no. Wird diese Direktive auf
yes gesetzt, wird auch der Wert der Option
instances auf 1
zurückgesetzt.
Beispiel:
wait yes;
nice
Dies gibt die Prozesspriorität an, unter der
dieser Dienst laufen soll. Das Argument wird direkt an den Systemaufruf
setpriority(2) übergeben. Der Wert kann negativ sein.
Beispiel:
nice -5;
rpc
Dies gibt an, dass der Dienst im
portmap(8)-Mapper
als RPC-Dienst registriert werden soll. Es akzeptiert eine Liste von
Argumenten wie folgt:
rpc {
name "Zeichenkette"; version
3,6,9-15,22;
}
Der Parameter name ist optional und wird
standardmäßig auf den Namen des Dienstes gesetzt.
chroot
Dies gibt das Wurzelverzeichnis für den Dienst an.
Das Zeichenkettenargument kann Modifikatoren akzeptieren, wie dies unten in
Zeichenketten-Modifikatoren dargestellt ist.
Beispiel:
chroot "/tftpboot/%O";
log
Diese Direktive erwartet zwei Argumente. Das erste muss
entweder der symbolische Name einer vorher angegebenen
log-Direktive
(siehe unten) oder das nicht maskierte Wort
syslog sein. In letzterem
Fall wird eine Meldung mittels des Systemaufrufs
syslog(3)
protokolliert. Das zweite Argument ist die zu protokollierende Nachricht. Sie
unterliegt den unten in
Zeichenketten-Modifikatoren beschriebenen
Modifikatoren.
Beispiel:
log syslog "Dienst von %O
abgeschlossen";
tcpd
Diese Direktive führt dazu, dass die von
tcp_wrappers angegebenen Zugriffskontrollen angewandt werden. Dies hat den
gleichen Effekt, wie den Aufruf eines Dienstes mit dem Argument
/usr/sbin/tcpd (oder wo auch immer sich
tcpd(8) befindet)
für
server. Es spart allerdings den zusätzlichen Schritt
des Programmstarts. Es akzeptiert bis zu zwei zusätzliche Argumente.
Das erste ist der Name des Dienstes, der beim Prüfen gegen die Regeln
verwandt werden soll, und das zweite ist ein Anweisungsblock, der beim
Zutreffen von Regeln ausgeführt werden soll. Falls kein Name angegeben
wird, wird als Vorgabe der Name des Dienstes verwandt. Falls der
Anweisungsblock nicht angegeben wird, wird als Vorgabe »exit;«
verwandt.
Beispiele:
tcpd "in.telnetd";
tcpd { exec "/usr/local/bin/winnuke %O"; }
tcpd "Sinnlos" { echo "Hallo Jungs, kommt rein."; }
tcpd "trotzig" { echo "500 Zugriff von %O verweigert."; exit; }
exit
Diese Direktive ist nur in einem Anweisungsblock
für die Direktive
tcpd sinnvoll. Beachten Sie: Wenn Sie diese
nicht verwenden (und keine andere beendende Direktive wie
exec angeben)
dann wird der Dienst nie beendet.
Beispiel:
exit;
capability
Diese Direktive gibt die Fähigkeiten
(»capabilities«) an, über die der Dienst bei der
Ausführung verfügen sollte. Das Argument ist eine Zeichenkette,
die direkt an
cap_from_text(3) weitergegeben wird. Diese Beschreibung
ist ziemlich lausig, aber diese Funktionalität nützt Ihnen
sowieso nicht viel, solange Sie die Datei »README.capabilities«
noch nicht gelesen haben.
Beispiel:
capability "cap_setuid=ep";
rlimit
Diese Direktive erwartet zwei Argumente. Das erste ist
ein Symbol, das die Art der benötigten Begrenzung angibt. Diese werden
unten aufgeführt. Das zweite Argument wird in einem von zwei Formaten
erwartet. Es kann entweder ein einzelner numerischer Wert sein. In diesem Fall
werden sowohl die weichen als auch die harten Grenzen (»soft and hard
limits«) der besagte Ressource auf diesen Wert gesetzt. Alternativ kann
es eine Liste in der folgenden Form sein:
rlimit type {
soft x; hard y;
}
In dem Fall werden die harten und weichen Begrenzungen
entsprechend gesetzt. In jedem Fall kann das Wort unlimited anstelle
eines numerischen Wertes angegeben werden und damit jede Begrenzung entfernt
werden. Die Werte werden direkt an den Systemaufruf setrlimit(2)
übergeben und sollten aus diesem Kontext heraus angegeben werden.
Arten:
cpu, fsize, data, stack, core, rss, nproc, nofile,
memlock
Beispiel:
rlimit cpu 15;
initgroups
Das Argument kann entweder
yes oder
no (ja
oder nein) lauten. Diese Direktive führt zum Aufruf von
initgroups(3) beim Dienstestart, womit die zusätzlichen Gruppen
des Dienstes entsprechend der Datei
/etc/group gesetzt werden.
Beispiel:
initgroups yes;
family
Diese Direktive gibt die Protokollfamilie an, für
die Rlinetd Sockets für diesen Dienst binden soll. Derzeit kann dies
entweder
ipv4 oder
ipv6 sein. Falls nicht angegeben, ist die
Vorgabe etwas für das System angemessenes.
Beispiel:
family ipv6;
banner
Diese Direktive erlaubt es Ihnen, eine Datei für
eine Verbindung auszugeben.
Beispiel:
banner "/etc/nologin";
echo
Diese Direktive erlaubt es, eine dynamisch generierte
Zeile für diese Verbindung hinzuzufügen.
Beispiel:
echo "500 Dienst von Ihrer IP aus verweigert
(%O)";
filter
Diese Direktive erlaubt es, ein
Linux-Socket-Filterprogramm anzugeben, das dem Socket zugeordnet wird, an dem
auf Anfragen gewartet wird. So ein Programm kann mit einem Werkzeug wie
lsfcc(1) erstellt werden.
Beispiel:
filter
"/usr/local/lib/rlinetd/filters/privport";
chargen
Diese Direktive führt eine Endlosschleife aus, bei
der Daten an jede Verbindung ausgegeben werden. Falls kein Argument
übergeben wird, wird eine Teilmenge der druckbaren Zeichen ausgegeben.
Allerdings kann ein Dateiname als Argument übergeben werden, wobei dann
der Inhalt der Datei in der Schleife ausgegeben wird.
Beispiel:
chargen "/usr/local/lib/spam";
Dieses Konstrukt gibt ein Verzeichnis an, das
zusätzliche auszuwertende Konfigurationsdateien enthält. Die
Auswertung dieser zusätzlichen Dateien beginnt erst, nachdem die
aktuelle Datei abgeschlossen wurde. Die Argumente match und
ignore sind optional und werden, falls angegeben, benutzt, um die
Dateien im Verzeichnis zu filtern. Dateinamen müssen auf den
regulären Ausdruck match passen (falls dieser angegeben ist) und
dürfen nicht auf den regulären Ausdruck ignore passen
(falls dieser angegeben ist). In allen Fällen werden Dateinamen, die
mit einem Punkt (».«) beginnen, übersprungen. In
Verzeichnisse wird nicht rekursiv abgestiegen.